Eine sehr kurze Einführung in Matlab

Dr. Thomas Schramm
Rechenzentrum der Technischen Universität Hamburg-Harburg
WS98 - WS01
Recht frei nach der Matlab Expo von Mathworks
 

Inhaltsübersicht

  1. Am besten man tut es
  2. Etwas systematischer..
  3. Wie einem Hilfe zuteil wird
  4. Matrixfunktionen mit Beispielen
  5. Skripte und Funktionen
  6. Beispiele aus der Numerik
  7. Grafik & Visualisierung

  1. Am besten man tut es
  2. In Matlab können Zahlen sehr einfach eingegeben und berechnet werden. Z.B.

    (1997-2)/25

    ans =

          79.8000

     
    In diesem Dokument sind die Matlab EINGABEN grün und die AUSGABEN blau dargestellt.

    Die Ausgabe wird in der Matlabvariablen ans gespeichert. Der wichtigste Datentyp in Matlab ist die Matrix (eine Zahl ist eine 1x1-Matrix). Matrizen können Variablen zugeordnet werden, z.B. die Magische-Dürer-Matrix:

     

    A=[16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]
    A =
        16  3  2 13
         5 10 11  8
         9  6  7 12
         4 15 14  1

     
    Bei der Eingabe werden die Zahlen in einer Zeile mit Blanks oder Kommta getrennt, die einzelnen Zeilen mit Semikolon. Um z.B. die Summe aller Elemente der ersten Spalte zu erhalten, geben wir

    A(1,1)+A(2,1)+A(3,1)+A(4,1)
     ans =

          34

     

    ein. Viel schneller geht die Benutzung des Doppelpunkt-Operators (:). Z.B.

    1:4
    ans =
         1 2 3 4

     also finden wir das obige Ergebnis mit der sum-Funktion

    sum(A(1:4,1))
    ans =
          34

    Noch kürzer ist die automatische Nutzung des kleinsten und größten Indexes

    sum(A(:,1))
    ans =
         34
    bzw. die Summation über alle Spalten auf einmal:

    sum(A)
    ans =
          34 34 34 34
     

    Um desgleichen mit den Zeilen zu veranstalten, benutzen wir einfach die transponierte Matrix:

     B=A'
    B =
    16  5  9  4
     3 10  6 15
     2 11  7 14
    13  8 12  1

    sum(B)
    ans =
          34 34 34 34

    Oder für die Diagonale mit dem diag-Kommando

    diag(A)
    ans =
          16
          10
           7
           1

    sum(diag(A))
    ans =
          34
    Wenn die Matrix um die Mittelachse gespiegelt wird ,können wir auch die Summe der Gegendiagonalen berechnen.

    B=fliplr(A)
    B =
        13  2  3 16
        8  11 10  5
        12  7  6  9
        1  14 15  4
     

    sum(diag(fliplr(A)))
    ans =
        34

    Magische Quadrate lassen sich im übrigen ganz einfach in Matlab z.B. mit

    B=magic(4)
    B =
        16 2  3 13
        5 11 10  8
        9  7  6 12
        4 14 15  1

    erzeugen. Dies entspricht nicht ganz unserer Eingangsmatrix. Dies läßt sich leicht korrigieren:

    C=B(:,[1,3,2,4])
    C =
        16 3  2 13
        5 10 11  8
        9  6  7 12
        4 15 14  1

    Zurück zur Inhaltsübersicht

     

  3. Etwas systematischer..
  4.  

    Matrix-Element kann jeder gültiger Matlabausdruck sein.:

    x=[-1.3 sqrt(3) (1+2+3)*4/5]
    x =
        -1.3000 1.7321 4.8000

    Auf Matrixelemente wird mit der Angabe des Indexes in Klammern zugegriffen

    x(5)=42
    x =
        -1.3000 1.7321 4.8000 0 42.0000

    (Beachten Sie, daß x(5) vorher noch nicht definiert war!)

     Komplexe Zahlen werden einfach mit einem i oder j als imaginärer Einheit eingegeben. Z.B.:

    A=[1 2 ;3 4]+i*[5 6; 7 8]
    A =
        1.0000 + 5.0000i 2.0000 + 6.0000i
        3.0000 + 7.0000i 4.0000 + 8.0000i

     
    Z.B. finden wir für die bekannte Euler-Formel

    exp(i*(1+i))
    ans =
        0.1988 + 0.3096i

    und

    cos(1+i)+i*sin(1+i)
    ans =
        0.1988 + 0.3096i

    Wie erwartet!

    Zurück zur Inhaltsübersicht

     

  5. Wie einem Hilfe zuteil wird, man aufräumt und man andere Informationen erhält:
  6.  

    Am einfachsten benutzt man das help-Kommando. Z.B.

    help sum

    SUM Sum of elements.
    For vectors, SUM(X) is the sum of the elements of X. For
    matrices, SUM(X) is a row vector with the sum over each
    column. For N-D arrays, SUM(X) operates along the first
    non-singleton dimension.

    SUM(X,DIM) sums along the dimension DIM.

    Example: If X = [0 1 2
                                3 4 5]
    then sum(X,1) is [3 5 7] and sum(X,2) is [ 3
                                                                        12];

    See also PROD, CUMSUM, DIFF.

     

    Komfortabler ist ab dem Release 5 die helpwin-Funktion, die ein eigenes Hypertextsystem startet. Am schönsten ist allerdings die neue helpdesk-Funktion, die eine vollständige online-Dokumentation im HTML- oder PDF-Stil für Netscape startet.

    Um sich den Zustand der definierten Variablen anzusehen, kann man das who bzw. whos-Kommando benutzen.

    who
    Your variables are:
         A B C ans x
     

    whos
    Name Size Bytes Class
        A  2x2   64   double array (complex)
        B  4x4  128   double array
        C  4x4  128   double array
      ans  1x1   16   double array (complex)
        x  1x5   40   double array

      Grand total is 42 elements using 376 bytes

    Um alle definierten Variablen zu löschen geben wir

    clear all
    ein.

    Zurück zur Inhaltsübersicht

  7. Matrixfunktionen
  8. In Matlab sind grundsätzlich alle Rechenoperationen wie +-*/ und ^ für Matrizen definiert. Einige Beispiele:

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

    (Hier dient das Semikolon zwischen den Definitionen zum trennen der Eingaben und unterdrücken der Ausgaben.)

    C=A-B
    C =
        1 1 1
        0 0 0

    A*B'
    ans =
         8 32
        17 77

    A/B
    ans =
        0.7500 0.2500
        0.0000 1.0000

    A\B
    ans =
        2.0000  1.5000 1.0000
        0       0      0
       -0.6667 -0.1667 0.3333

    Hierbei entspricht der /-Operator der Rechts- und der \-Operator der Links-Division. D.h. das Ergebnis von X=B/A entspricht der Lösung der Gleichung X*A=B und X=A\B der Gleichung A*X=B .
    Die Matrix-Links-Divison A\B ist immer definiert, wenn B soviele Zeilen hat wie A. Für die Rechts-Divison gilt A/B=(B'/A')' . Für über- bzw. unterbestimmte Systeme wird dann ein Ausgleichsverfahren (Least Squares) angewendet.

    D=[1,2,3;3,5,6;7,8,9]
    D =
        1 2 3
        3 5 6
        7 8 9

    D^2
    ans =
        28  36  42
        60  79  93
        94 126 150

    x=[1 2 3]; y=[4 5 6]';
    x*y
    ans =
        32

    b=x*D
    b =
        28 36 42

    Wird eine komponentenweise Multiplikation, Division oder Exponentation gewünscht, ist der Operation ein Punkt (.) voranzustellen.

    A.*B
    ans =
         0  2  6
        16 25 36

    A./B
    Warning: Divide by zero.
    ans =
        Inf    2.0000 1.5000
        1.0000 1.0000 1.0000

    D.^2
    ans =
        1  4  9
        9 25 36
       49 64 81

    Für Matrizen sind viele weitere Funktionen, wie Eigenwerte (eig) , LU-Zerlegung (lu), Matrix-Exponential (expm), usw. definiert. Für dünn besetzte große Matrizen (sparse) gibt es in Matlab spezielle Verfahren, die sehr viel Speicher und Rechenzeit sparen.

    Zurück zur Inhaltsübersicht

     

  9. Skripte und Funktionen
  10. Skripte sind einfache ASCII-Textfiles, die Matlabbefehle enthalten. Zeilen, denen ein %-Vorangestellt ist, werden als Kommentar verarbeitet. Aus einer Matlab-Session heraus kann das Skript durch Aufrufen des Dateinmens aufgerufen werden. Hierzu muß allerdings der Pfad zu der Datei vereinbart werden. Dieses geschieht mit dem path-Kommando, oder im Release 5 in der Windowsversion mit dem Pathbrowser.

    help path
    PATH Get/set search path.

    Ein gültiges Skript wäre z.B:

    %fibscript.m
    %Fibonacci-Zahlen
    f=[1 1]; n=1;
    while f(n) + f(n+1)<80
          f(n+2)=f(n)+f(n+1);
          n=n+1;
    end;
    f

    Dieses Textfile sollte dann unter dem Namen fibscript.m abgespeicht werden.

    !Achtung Windows-Editoren neigen dazu ein nicht sichtbares ".txt" an die Datei anzuhängen. Man vergewissere sich mit der rechten Maustaste und "Eigenschaften" und benutze ggf. den Befehl "umbenennen", um das ".txt" zu entfernen.

    Ausgeführt wird das Skript mit

    fibscript
    f =
        1 1 2 3 5 8 13 21 34 55

    Eleganter ist allerdings die Formulierung mit Hilfe einer Funktion. Diese könnte so aussehen:

    function f=fibfun(n)
    %FIBFUN berechnet die n-te Fibonacci Zahl
    if n>2
        f=fibfun(n-1)+fibfun(n-2);
        else
        f=1;
    end

    Jetzt können wir die 10-te Fibonacci-Zahl einfach mit

    fibfun(10)
    ans =
        55

    aufrufen. Ein Hilfesystem wird durch die Kommentar-Zeile gleich mitgeliefert:

    help fibfun
    FIBFUN berechnet n-te Fibonacci Zahl

    Zurück zur Inhaltsübersicht

     

  11. Beispiele aus der Numerik - Insbesondere Polynome
  12. Polynome werden in Matlab sehr einfach durch die Angabe des Koeffizientenvektors definiert., z.B. wird das Polynom y=x3-30x+30 in Matlab mit

    p=[1 0 -30 30 ];

    dargestellt. Jetzt muß noch ein Wertebereich für x definiert werden:

    x=[-8:0.1:8];

    (-8 bis 8 mit der Schrittweite 0.1). Die Funktionswerte y bekommen wir dann (alle auf einmal) mit der Funktion polyval :

    y=polyval(p,x);

    Das kann geplottet werden:

    plot(x,y) 

     
    Nullstellen finden wir mit roots :

    x0=roots(p) 
    x0 =
        -5.9217
         4.8845
         1.0372

    Test:

    polyval(p,x0)
    ans =
        1.0e-012 *
        0.2309
        0.2345
        0.0107

    Matlab bietet viele weitere Funktionen zum numerischen Auswerten von Daten oder zum Lösen von Gleichungen. Insbesondere zum Lösen von gewöhnlichen Differentialgleichungen liegen viele Methoden vor. Siehe. z.B.

    help funfun
    Function functions and ODE solvers.

        Optimization and root finding.
            fmin - Minimize function of one variable.
            fmins - Minimize function of several variables.
            fzero - Find zero of function of one variable.

         Numerical integration (quadrature).
            quad - Numerically evaluate integral, low order method.
            quad8 - Numerically evaluate integral, higher order method.
            dblquad - Numerically evaluate double integral.

        Plotting.
            ezplot - Easy to use function plotter.
            fplot - Plot function.

        Inline function object.
            inline - Construct INLINE function object.
            argnames - Argument names.
            formula - Function formula.
            char - Convert INLINE object to character array.

        Utilities.
            vectorize - Vectorize string expression or INLINE function object.

        Ordinary differential equation solvers.
            (If unsure about stiffness, try ODE45 first, then ODE15S.)
            ode45 - Solve non-stiff differential equations, medium order method.
            ode23 - Solve non-stiff differential equations, low order method.
            ode113 - Solve non-stiff differential equations, variable order method.
            ode15s - Solve stiff differential equations, variable order method.
            ode23s - Solve stiff differential equations, low order method.

        odefile - ODE file syntax.
            ODE Option handling.
            odeset - Create/alter ODE OPTIONS structure.
            odeget - Get ODE OPTIONS parameters.

        ODE output functions.
            odeplot - Time series ODE output function.
            odephas2 - 2-D phase plane ODE output function.
            odephas3 - 3-D phase plane ODE output function.
            odeprint - Command window printing ODE output function.

      Zurück zur Inhaltsübersicht

     

  13. Grafik & Visualisierung
  14. Matlab kennt viele Befehle zur Visualisierung von Daten. Die plot-Funktion haben wir bereits kennen gelernt. Es gibt eine besondere Funktion, um Funktionen zu plotten, die noch keinen definierten Wertebereich haben.

    fplot('sin',[-pi pi])

         

    Die Funktion muß in Apostrophs eingeschlossen sein. Wählen ein etwas komplizierteres Beispiel und schalten wir noch das Gitter ein:

    fplot('sin(x)+exp(-x)',[0 12])
    grid on

     

    Für die Visualisierung von Matrizen als 3-dimensionale Daten definieren wir uns einen Wertebereich mit der meshgrid-Funktion:

    [x,y]=meshgrid(-3:1/8:3);

    Jetzt kann x bzw. y in einer Formel wie eine normale Variable verwendet werden. Z.B. der Eierkarton

    z=sin(x).*cos(y);

    Alls Sammlung von 2-D Kurven

    plot(z)

     

    Oder als Kontur-Plot

    contour(z)


    Oder als Fläche im Raum

    surf(z)

     Oder als Kombination von Kontur- und Flächenplot

    surfc([-3:1/8:3],[-3:1/8:3],z)

     

     

    Es gibt viele weitere Plotfunktionen und –Optionen, sehen Sie sich die entsprechenden Hilfen z.B. zu
    plot3, contour3, pcolor, mesh, surfl, image, movie usw. an

    Zurück zur Inhaltsübersicht