Benutzer-Werkzeuge

Webseiten-Werkzeuge


matlab

Dies ist eine alte Version des Dokuments!


Matlab

Matlab ist eine Mathematik-Software der Firma Mathworks

Dynamische Variablennamen

Um einen Wert einer Variable mit dynamischem Namen zuzuweisen:

eval(sprintf('%s = 3', 'bla'));

Auf die gleiche Weise kann auch eine symbolische Variable mit dynamischem Namen erstellt werden:

eval(sprintf('syms %s', 'bla')); 

Private Methoden in Klassen mit externen Dateien

Möchte man nicht alle Methoden in der Datei mit der Klassendefinition (klassenName.m) haben, sondern auf mehrere aufteilen, kann man ein Verzeichnis @klassenName anlegen und darin Methoden methodenName.m anlegen. Um die Zugriffskontrolle für die Methoden einzustellen, legt man @klassenName/klassenName.m an und schreibt nur den Funktionsrumpf hinein.

Beispiel:

methods (Access = private)
  a=methodenName(x);
end

Konstanten

Matlab bietet keine Möglichkeit Konstanten zu definieren, es gibt aber Workarounds

Typ einer Variablen prüfen

Um den Typ einer Variablen anzeigen zu lassen, gibt es den Befehl

class(a)

Um zu prüfen, ob eine Variablen von einem definierten Typ ist gibt es z.B.

isa(x,'sym')
ischar(x)
isfloat(x)
iscell(x) 

mehrere Graphen in einem Plot

Um mehrere Plot in einer Grafik zusammenzufasssen kann man vorher „hold on“ setzen. Beispiel:

hold on;
ezplot('x^2');
ezplot('x^3');

Farbe von Graphen setzen

Standardmäßig plottet MATLAB alle Graphen in blau, andere Farben werden mit „set“ gesetzt. Beispiel:

g1 = ezplot('x^2');
set(g1, 'color', 'red');

Dem Befehl line kann die gewünschte Farbe auch direkt übergeben werden, ezplot unterstützt das nicht.

line ([-5, 5], [1, 1], 'color', 'red');

Sollen mehrere Plots in verschiedenen Farben geplottet werden, die nacheinander generiert werden, kann eine Colormap verwendet werden:

nrPlots = 5;
cc=jet(nrPlots);
figure; 
hold on;
for i=1:nrPlots
    plot([0 1],[0 i],'color',cc(i,:));
end

Statt jet kann auch eine andere Colormap wie hsv verwendet werden.

Schriftgröße der Achsenbeschriftung ändern

Die Schriftgröße der Achsenbeschriftung kann folgendermaßen vergrößert werden:

plot(rand(1,10))
set(gca,'FontSize',14); 

alle Figures löschen

Geöffnete Figures/Plots werden mit close geschlossen:

close all;

Ausgabe von fsolve

Nach der Ausführung von fsolve gibt die Funktion Informationen zur Lösung aus. Wenn das störend ist, kann die Ausgabe mit der Option „display off“ unterdrückt werden:

fsolve(@f, x0, optimset('display', 'off'));

Lösung von Differentialgleichungen

Debugger hält nicht an Breakpoints

clear all;
clear functions;

löschen die zuvor gesetzten Breakpoints, so dass der Debugger dort nicht anhält. Einige Möglichkeiten, die beiden Befehle auszuführen ohne die Breakpoints zu löschen, werden hier beschrieben.

mehrzeilige Anweisungen

Da Matlab kein Semikolon als Ende einer Anweisung verlangt, müssen mehrzeilige Anweisungen mit „…“ geschrieben werden:

if (bedingung1 || ...
    bedingung2 || ...
    bedingung3)

Element am Ende von Array einfügen

Die (für mich) logischste Schreibweise, ein Element am Ende eines Arrays einzufügen, ist diese:

a(end + 1) = newElement;

Außerdem gibt es noch diese Möglichkeiten:

a = [a newElement];
a = cat(2, a, newElement);  

Nachträglich Einträge zu Legende hinzufügen

Matlab erlaubt es nicht, nachträglich Einträge zu einer Legende hinzuzufügen. Ein Workaround ist die Verwendung des undokumentierten Features „DynamicLegend“ in Verbindung mit der Eigenschaft „DisplayName“ der Plots:

x=0:.01:20;
plot(x, cos(x), 'DisplayName', 'cos (x)');
legend('-DynamicLegend');
hold on;
plot(x, sin(x), 'DisplayName', 'sin (x)');

Die zugewiesenen DisplayNames lassen sich auch im Property Editor von Matlab anzeigen.

Animationen erstellen

Einzelbilder,die zu Animationen zusammengebaut werden sollen, werden wie gewöhnlich geplottet und dann mit getframe() in einem Array abgelegt. Mit movie lassen sich dann die Einzelbilder als Film abspielen. Ohne Argumente aufgerufen, erfasst getframe keine Titel oder Achsenbeschriftungen. Möchte man diese in der Animation sehen, müssen getframe und movie mit gcf bzw. einem anderen Figurehandle aufgerufen werden.

clear;
[X Y] = meshgrid(-2:2, -2:2);
for j = 1:10
    surf(X, Y, X.^2+j);
    zlim([0 20]);
    title(['j = ' num2str(j)]);
    F(j) = getframe(gcf);
end
movie(gcf, F, 20);

Lizenzen

Die augenblicklich ausgecheckten Lizenzen lassen sich durch den Befehl

license('inuse')

anzeigen.

Maximum einer Matrix

Der Maximalwert einer Matrix lässt sich am einfachsten mit

max(a(:))

finden.

Aktuelles Datum anzeigen

Das aktuelle Datum mit Uhrzeit lässt sich am einfachsten mit

datestr(now);

anzeigen lassen.

matlab.1396526129.txt.gz · Zuletzt geändert: 2014/04/03 13:55 von olli