EMZETT.
Login

Kurz: MATLAB und Octave zeichnen mit plot und Verwandten. In der Kommandozeile (ohne Fenster) speicherst du Bilder mit print/saveas:

Teil des Kurses MATLAB

Kapitel 6 von 8 im Kurs MATLAB. Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.

Diagramme zeichnen

MATLAB und Octave zeichnen mit plot und Verwandten. In der Kommandozeile (ohne Fenster) speicherst du Bilder mit print/saveas:

x = linspace(0, 2*pi, 200);
y1 = sin(x);
y2 = cos(x);
 
figure;
plot(x, y1, 'b-', 'LineWidth', 2);
hold on;
plot(x, y2, 'r--');
hold off;
grid on;
xlabel('x'); ylabel('y');
title('Sinus und Kosinus');
legend('sin(x)', 'cos(x)', 'Location', 'northeast');
axis([0 2*pi -1.2 1.2]);
print -dpng diagramm.png
FunktionDiagramm
plot(x, y)Linien (mit Format 'r--o': Farbe, Linienart, Marker)
scatter(x, y)Streudiagramm
bar(werte), barhBalken
hist(daten, klassen)Histogramm
pie(werte)Kreis
semilogy, logloglogarithmische Achsen
subplot(2, 1, 1)mehrere Diagramme in einem Fenster
surf(X, Y, Z), mesh, contour3D-Flächen, Höhenlinien
plot3(x, y, z)Raumkurve
imagesc(M)Matrix als Bild
[X, Y] = meshgrid(-2:0.1:2);
Z = X .* exp(-X.^2 - Y.^2);
surf(X, Y, Z);
colorbar;

Wir können die Daten dahinter auch ohne Fenster prüfen:

x = linspace(0, 2*pi, 5);
y = sin(x);
disp([x' y'])
[X, Y] = meshgrid(1:3, 1:2)
Z = X .* Y

Ausgabe:

0        0
   1.5708   1.0000
   3.1416   0.0000
   4.7124  -1.0000
   6.2832  -0.0000
X =
 
   1   2   3
   1   2   3
 
Y =
 
   1   1   1
   2   2   2
 
Z =
 
   1   2   3
   2   4   6

Dateien lesen und schreiben

datei = tempname();
daten = [1 2 3; 4 5 6];
dlmwrite(datei, daten);                  % CSV schreiben
inhalt = fileread(datei)
gelesen = dlmread(datei)
csvwrite(datei, [7 8 9]);
csvread(datei)
 
fid = fopen(datei, 'w');
fprintf(fid, 'Zeile %d\n', 1:3);
fclose(fid);
 
fid = fopen(datei, 'r');
while true
    zeile = fgetl(fid);
    if ~ischar(zeile), break; end
    disp(zeile)
end
fclose(fid);
 
save(datei, 'daten');                     % Variablen speichern (.mat-artig)
clear daten
load(datei);
disp(size(daten))
delete(datei);
exist(datei, 'file')

Ausgabe:

inhalt = 1,2,3
4,5,6
 
gelesen =
 
   1   2   3
   4   5   6
 
ans =
 
   7   8   9
 
Zeile 1
Zeile 2
Zeile 3
   2   3
ans = 0

In MATLAB lesen readtable, readmatrix, writetable, writematrix, importdata Tabellen und CSV komfortabel; Excel via readtable('daten.xlsx').

Skripte, Funktionen und Struktur

Ein Projekt besteht meist aus:

projekt/
├── hauptskript.m       % Ablauf
├── lade_daten.m        % function daten = lade_daten(pfad)
├── berechne.m          % function ergebnis = berechne(daten, parameter)
├── plot_ergebnis.m
└── daten/
% hauptskript.m
clear; clc; close all;
 
parameter = struct('n', 100, 'rauschen', 0.1);
daten = lade_daten('daten/messung.csv');
ergebnis = berechne(daten, parameter);
plot_ergebnis(ergebnis);
fprintf('Fertig: %d Werte\n', numel(ergebnis));

Tipps:

  • Funktionen und Skripte mit Kommentar-Kopf dokumentieren (erscheint bei help name)
  • Vorallokation: x = zeros(1, n), bevor man in einer Schleife füllt
  • tic/toc messen Zeit, der Profiler (profile on) findet Engpässe
  • Eingaben prüfen mit validateattributes, inputParser, assert
  • Versionsverwaltung (Git) auch für .m-Dateien
tic; s = 0; for i = 1:1e5, s = s + i; end; zeit_schleife = toc;
tic; s2 = sum(1:1e5); zeit_vektor = toc;
fprintf('Ergebnis gleich: %d, Vektor-Version schneller: %d\n', s == s2, zeit_vektor < zeit_schleife);
 
n = 1e4;
a = zeros(1, n);                         % vorallokiert
for i = 1:n, a(i) = i^2; end
disp(a(end))

Ausgabe:

Ergebnis gleich: 1, Vektor-Version schneller: 1
1.0000e+08

Octave und MATLAB: Unterschiede

ThemaMATLABOctave
Kommentar%% oder #
Strings'...', "..." (String-Typ)'...', "..." (beide Zeichenketten)
Skriptdateien mit FunktionenFunktionen am DateiendeFunktionen vor Nutzung, 1; am Anfang
Inkrementx = x + 1zusätzlich x += 1, x++
Blockendeendend, endif, endfor …
ToolboxenkostenpflichtigPakete (pkg load statistics)
Tabellentable, readtabledataframe-Paket
Live Editor, Simulinkjanein

Merke

  • plot, bar, hist, surf; hold on, subplot, xlabel, legend, print zum Speichern
  • Dateien: fopen/fprintf/fgetl/fclose, dlmwrite/dlmread, save/load, fileread
  • Gute Praxis: Vorallokation, Vektorisierung, dokumentierte Funktionen, tic/toc
  • Octave ist kostenlos und weitgehend kompatibel

Übungsaufgabe

Zeichne die Funktion exp(-x/5) .* sin(2*x) von 0 bis 20 und speichere das Diagramm als PNG.

Quiz zur Selbstkontrolle

Weiter im Kurs

Zurück: Numerik, Statistik und Datenanalyse

Weiter: Projekte: Simulation und Algorithmen

Alle Kapitel: MATLAB im Überblick