Learn in 10 minutes

Learn in 10 minutes

MATLAB in 10 Minuten lernen

Programmiersprache

MATLAB (Matrix Laboratory) ist eine Hochsprache und Entwicklungsumgebung für numerische Berechnungen, Algorithmusentwicklung und Datenvisualisierung. MATLAB, ursprünglich in den späten 1970er Jahren entwickelt, ist zu einem unverzichtbaren Werkzeug in den Bereichen Ingenieurwesen, Naturwissenschaften und Mathematik geworden.

In diesem Tutorial lernst du die Grundlagen von MATLAB und kannst direkt mit dieser leistungsstarken计算环境 loslegen.

1. Dein erstes MATLAB-Programm

Erstelle eine Skriptdatei namens hello.m oder gib die Befehle direkt im MATLAB-Befehlsfenster ein.

disp('Hello, World!')

Oder du verwendest die fprintf-Funktion:

fprintf('Hello, World!\n')

Die Ausgabe sieht so aus:

Hello, World!

Die Funktion disp() zeigt den Inhalt direkt an, während fprintf() mehr Formatierungskontrolle bietet, ähnlich wie Cs printf.

2. Grundlegende Syntax

MATLAB hat seine eigenen Syntaxregeln, die sich von den meisten universell einsetzbaren Programmiersprachen unterscheiden. Das Verständnis dieser Grundlagen ist wichtig, um sauberen und wartbaren Code zu schreiben.

2.1 Kommentare

Einzeilige Kommentare beginnen mit dem Prozentzeichen %:

% Dies ist ein Kommentar
x = 10;  % Weist x den Wert 10 zu

Mehrzeilige Kommentare verwenden %{ und %}:

%{
Dies ist ein mehrzeiliger Kommentar.
Er kann sich über mehrere Zeilen erstrecken.
%}

2.2 Semikolons

Das Semikolon ; unterdrückt die Ausgabe. Ohne Semikolon zeigt MATLAB das Ergebnis an:

x = 5     % Zeigt: x = 5
y = 10;   % Keine Ausgabe, aber y wird zugewiesen

2.3 Groß- und Kleinschreibung

MATLAB unterscheidet zwischen Groß- und Kleinschreibung. A und a sind unterschiedliche Variablen:

A = 5;
a = 10;
disp(A)  % Ausgabe: 5
disp(a)  % Ausgabe: 10

2.4 Variablennamen

Variablennamen müssen mit einem Buchstaben beginnen, gefolgt von Buchstaben, Zahlen oder Unterstrichen:

gueltiger_name = 1;
ein_weiterer_gueltiger_name_123 = 2;
% 123ungueltig = 3;  % Fehler: kann nicht mit einer Zahl beginnen

2.5 Grundlegende Operationen

MATLAB glänzt besonders bei Matrixoperationen. Eine Matrix zu erstellen ist ganz einfach:

A = [1 2 3; 4 5 6; 7 8 9]  % 3x3 Matrix

Ausgabe:

A =

     1     2     3
     4     5     6
     7     8     9

3. Variablen und Datentypen

MATLAB verwendet dynamische Typisierung. Variablen werden bei der Zuweisung erstellt und ihr Typ wird durch den zugewiesenen Wert bestimmt.

3.1 Numerische Typen

MATLAB speichert standardmäßig alle Zahlen als Gleitkommazahlen mit doppelter Genauigkeit:

% Ganzzahl
int_num = 42;

% Gleitkommazahl
float_num = 3.14159;

% Wissenschaftliche Notation
sci_num = 2.5e-3;  % 0.0025

3.2 Strings

String-Variablen verwenden einfache Anführungszeichen:

str = 'Hello, MATLAB';
str2 = "Hello, MATLAB";  % String-Array (R2016b+)

String-Verkettung:

str1 = 'Hello';
str2 = 'World';
combined = [str1 ', ' str2];  % 'Hello, World'

3.3 Logische Werte (Boolean)

Logische Werte sind true oder false:

flag = true;
result = false;

% Logische Operationen
a = true;
b = false;
and_result = a && b;    % false
or_result = a || b;     % true
not_result = ~a;        % false

3.4 Zeichenarrays vs. Strings

MATLAB hat sowohl Zeichenarrays als auch String-Objekte:

% Zeichenarray (ältere Methode)
char_arr = 'Hello';

% String-Objekt (moderne Methode, R2016b+)
str_obj = "Hello";

% Mit String-Objekten lässt sich leichter arbeiten
name = "Alice";
greeting = "Hello, " + name;  % Funktioniert ganz natürlich

4. Datenstrukturen

MATLAB bietet verschiedene Datenstrukturen für unterschiedliche Anwendungsfälle.

4.1 Vektoren

Ein Vektor ist ein eindimensionales Array:

% Zeilenvektor
row_vec = [1 2 3 4 5];

% Spaltenvektor
col_vec = [1; 2; 3; 4; 5];

% Mit dem Doppelpunkt-Operator
range_vec = 1:5;        % [1 2 3 4 5]
step_vec = 0:2:10;      % [0 2 4 6 8 10]

% linspace für gleichmäßig verteilte Werte
lin_vec = linspace(0, 10, 5);  % [0 2.5 5 7.5 10]

4.2 Matrizen

Matrizen bilden das Fundament von MATLAB:

% Direkte Matrizerstellung
A = [1 2 3; 4 5 6; 7 8 9];

% Auf Elemente zugreifen
element = A(2, 3);  % Gibt 6 zurück (Zeile 2, Spalte 3)

% Matrixoperationen
B = A';            % Transponierte
C = A * B;         % Matrixmultiplikation
D = A .* B;        % Elementweise Multiplikation

4.3 Cell-Arrays

Cell-Arrays können verschiedene Datentypen speichern:

% Cell-Array erstellen
cell_arr = {1, 'hello', [1 2 3], true};

% Auf Zellinhalt mit geschweiften Klammern zugreifen
data = cell_arr{2};  % Gibt 'hello' zurück

% Mit Klammern auf Zelle zugreifen
sub_cell = cell_arr(1:2);  % Gibt {1, 'hello'} zurück

4.4 Strukturen

Strukturen funktionieren wie Dictionaries mit benannten Feldern:

% Struktur erstellen
student.name = 'John';
student.age = 20;
student.major = 'Engineering';

% Auf Felder zugreifen
disp(student.name);  % Ausgabe: John

% Array von Strukturen
students(1).name = 'Alice';
students(1).age = 21;
students(2).name = 'Bob';
students(2).age = 22;

4.5 Tabellen

Tabellen eignen sich gut für tabellarische Daten:

% Tabelle erstellen
Age = [25; 30; 35];
Name = {'Alice'; 'Bob'; 'Charlie'};
Salary = [50000; 60000; 70000];

T = table(Name, Age, Salary);

% Auf Daten zugreifen
disp(T.Age);
disp(T.Name{1});

5. Operatoren

MATLAB bietet verschiedene Operatoren für arithmetische, Vergleichs- und logische Operationen.

5.1 Arithmetische Operatoren

a = 10;
b = 3;

sum = a + b;           % 13
diff = a - b;          % 7
prod = a * b;          % 30
quot = a / b;          % 3.3333
int_div = floor(a/b);  % 3
mod = mod(a, b);       % 1 (Rest)
pow = a ^ b;           % 1000

5.2 Elementweise Operatoren

Elementweise Operatoren arbeiten mit entsprechenden Elementen:

A = [1 2 3];
B = [4 5 6];

C = A .* B;  % Elementweise: [4 10 18]
D = A.^2;    % Elementweise quadriert: [1 4 9]

5.3 Vergleichsoperatoren

x = 5;
y = 10;

eq = (x == y);    % false
neq = (x ~= y);   % true
gt = (x > y);     % false
lt = (x < y);     % true
ge = (x >= y);    % false
le = (x <= y);    % true

5.4 Logische Operatoren

a = true;
b = false;

and_op = a & b;     % false (elementweises UND)
or_op = a | b;      % true (elementweises ODER)
not_op = ~a;        % false
and_short = a && b; % false (Kurzschluss-UND)
or_short = a || b;  % true (Kurzschluss-ODER)

6. Kontrollstrukturen

MATLAB bietet die üblichen Kontrollstrukturen, aber mit einer anderen Syntax als Sprachen wie Python.

6.1 if-elseif-else

score = 85;

if score >= 90
    grade = 'A';
elseif score >= 80
    grade = 'B';
elseif score >= 70
    grade = 'C';
else
    grade = 'F';
end

disp(grade)  % Ausgabe: B

6.2 switch

Die switch-Anweisung vergleicht einen einzelnen Ausdruck mit mehreren Fällen:

day = 'Monday';

switch day
    case {'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'}
        disp('Weekday');
    case {'Saturday', 'Sunday'}
        disp('Weekend');
    otherwise
        disp('Invalid day');
end

6.3 for-Schleifen

Die for-Schleife iteriert über einen Bereich oder ein Array:

% Über einen Bereich iterieren
for i = 1:5
    disp(i);
end

% Über ein Array iterieren
fruits = {'apple', 'banana', 'orange'};
for fruit = fruits
    disp(fruit{1});
end

% Verschachtelte Schleifen für Matrixoperationen
A = [1 2; 3 4];
B = zeros(2, 2);
for i = 1:2
    for j = 1:2
        B(i, j) = A(i, j) * 2;
    end
end

6.4 while-Schleifen

count = 0;
while count < 5
    disp(count);
    count = count + 1;
end

6.5 Schleifensteuerung

Die break-Anweisung beendet die Schleife und continue springt zur nächsten Iteration:

% break verwenden
for i = 1:10
    if i == 5
        break;
    end
    disp(i);
end
% Ausgabe: 1 2 3 4

% continue verwenden
for i = 1:5
    if mod(i, 2) == 0
        continue;  % Gerade Zahlen überspringen
    end
    disp(i);
end
% Ausgabe: 1 3 5

7. Ein- und Ausgabe

7.1 Benutzereingabe

Verwende die Funktion input(), um Benutzereingaben zu erhalten:

% Numerische Eingabe erhalten
num = input('Enter a number: ');

% String-Eingabe erhalten
name = input('Enter your name: ', 's');

% Ausdruckseingabe (wertet die Eingabe aus)
expr = input('Enter an expression: ');

7.2 Ausgabe anzeigen

Mehrere Funktionen zeigen Ausgaben an:

% disp - einfache Anzeige
disp('Hello');
disp([1 2 3]);

% fprintf - formatierte Ausgabe
name = 'Alice';
age = 25;
fprintf('Name: %s, Age: %d\n', name, age);

% sprintf - formatierten String erstellen
str = sprintf('Value: %.2f', 3.14159);
disp(str);

7.3 Formatspezifizierer

Häufige Formatspezifizierer in MATLAB:

% %s - String
% %d - Ganzzahl
% %f - Gleitkommazahl
% %.2f - Gleitkommazahl mit 2 Dezimalstellen
% %e - Wissenschaftliche Notation

fprintf('%d %.2f %e\n', 42, 3.14159, 1000)
% Ausgabe: 42 3.14 1.000000e+03

8. Funktionen

Funktionen in MATLAB werden normalerweise in separaten Dateien definiert, aber anonyme Funktionen bieten die Möglichkeit, Funktionen inline zu erstellen.

8.1 Anonyme Funktionen

Anonyme Funktionen erstellen einfache Funktionen ohne separate Dateien:

% Einzelner Input
square = @(x) x^2;
disp(square(5));  % Ausgabe: 25

% Mehrere Inputs
add = @(x, y) x + y;
disp(add(3, 4));  % Ausgabe: 7

% Mehrere Ausdrücke
hypot = @(x, y) sqrt(x^2 + y^2);
disp(hypot(3, 4));  % Ausgabe: 5

8.2 Funktionsdateien

Erstelle eine Datei namens myfunc.m:

function y = myfunc(x)
    y = x^2 + 1;
end

Die Funktion aufrufen:

result = myfunc(5);  % Ausgabe: 26

8.3 Funktionen mit mehreren Ausgaben

function [sum, prod] = calc(x, y)
    sum = x + y;
    prod = x * y;
end

Mit mehreren Ausgaben aufrufen:

[s, p] = calc(3, 4);
disp(s);  % 7
disp(p);  % 12

8.4 Variable Argumente

Verwende varargin und varargout für variable Argumente:

function result = sum_all(varargin)
    result = 0;
    for i = 1:length(varargin)
        result = result + varargin{i};
    end
end

% Mit beliebig vielen Argumenten aufrufen
total = sum_all(1, 2, 3, 4, 5);  % Ausgabe: 15

9. Skriptdateien

Skripte sind .m-Dateien, die eine Sequenz von MATLAB-Befehlen enthalten. Sie arbeiten mit Daten im Workspace:

% Speichern als myscript.m
% Statistiken für einen Datensatz berechnen
data = [1 2 3 4 5 6 7 8 9 10];

mean_val = mean(data);
std_val = std(data);
max_val = max(data);
min_val = min(data);

fprintf('Mean: %.2f\n', mean_val);
fprintf('Std: %.2f\n', std_val);
fprintf('Max: %d\n', max_val);
fprintf('Min: %d\n', min_val);

10. Fehlerbehandlung

Verwende try-catch für die Fehlerbehandlung:

try
    result = risky_operation();
catch ME
    fprintf('Error: %s\n', ME.message);
    % Den Fehler behandeln
    result = 0;
end

error() verwenden, um Fehler auszulösen:

function result = divide(a, b)
    if b == 0
        error('Division by zero is not allowed');
    end
    result = a / b;
end

11. Dateioperationen

11.1 Daten speichern und laden

% Variablen in Datei speichern
x = [1 2 3];
y = 'hello';
save('data.mat', 'x', 'y');

% Variablen aus Datei laden
load('data.mat');

% In Textdatei speichern
writematrix(x, 'data.txt');

% Aus Textdatei lesen
data = readmatrix('data.txt');

11.2 Textdateioperationen

% In Textdatei schreiben
fid = fopen('output.txt', 'w');
fprintf(fid, 'Line 1\n');
fprintf(fid, 'Line 2\n');
fclose(fid);

% Aus Textdatei lesen
fid = fopen('output.txt', 'r');
while ~feof(fid)
    line = fgetl(fid);
    if ischar(line)
        disp(line);
    end
end
fclose(fid);

textscan für strukturiertes Lesen verwenden:

fid = fopen('data.txt', 'r');
format = '%s %d %f';
C = textscan(fid, format);
fclose(fid);

name = C{1};
age = C{2};
score = C{3};

12. Plotten

MATLABs Plotfunktionen gehören zu seinen stärksten Features.

12.1 Grundlegendes 2D-Plotten

x = 0:0.1:2*pi;
y = sin(x);

plot(x, y);
xlabel('x');
ylabel('sin(x)');
title('Sine Wave');
grid on;

12.2 Mehrere Plots

x = 0:0.1:2*pi;

% Subplots
subplot(2, 1, 1);
plot(x, sin(x));
title('Sine');

subplot(2, 1, 2);
plot(x, cos(x));
title('Cosine');

12.3 Plot-Anpassung

x = 0:0.1:10;
y1 = x;
y2 = x.^2;

plot(x, y1, 'b-', 'LineWidth', 2);  % Blaue durchgezogene Linie
hold on;
plot(x, y2, 'r--', 'LineWidth', 2); % Rote gestrichelte Linie
hold off;

xlabel('X');
ylabel('Y');
legend('Linear', 'Quadratic');
title('Linear vs Quadratic');
grid on;

12.4 Andere Plottypen

% Balkendiagramm
bar([1 2 3 4], [10 20 15 25]);

% Histogramm
data = randn(1000, 1);
histogram(data, 30);

% Streudiagramm
x = rand(100, 1);
y = 2*x + randn(100, 1)*0.1;
scatter(x, y);