| K. Taubert, W. Wiedl: MATLAB Einführung |
Im Matlab Programm können Sie diese Zahlen schreiben:
1 -2 +30 -400
1.5 -2.0 +.25 -425. 3.1415926535897
1.0e+3 .1e-5 5.e4 2e3Wir bezeichnen solche Zahlendarstellungen, bei denen der Zahlenwert unmittelbar angegeben wird als Literale. Daneben werden wir später noch Namen wie pi zur Bezeichnung von Zahlen verwenden.
Imaginäre Zahlen schreibt man wie üblich als reelle Zahlen mit
anhängendem i, das auch durch ein j ersetzt werden
kann. i bzw. j allein steht für die imaginäre Einheit und ist
gleichwertig mit 1.0i. Komplexe Zahlen werden als Summe von Real- und
Imaginärteil geschrieben, also mit Hilfe einer Operation, es gibt
keine speziellen Literale. Den Real- bzw. Imaginärteil einer komplexen
Zahl x erhält man mit real(x) bzw. imag(x).
» i
ans =
0 + 1.0000i
» 3j
ans =
0 + 3.0000i
» .1i
ans =
0 + 0.1000i
» 1.2j
ans =
0 + 1.2000i
| » 3e2i
ans =
0 +3.0000e+002i
» imag(3+2i)
ans =
2
» real(3+2i)
ans =
3 |
Namen beginnen in Matlab immer mit einem Buchstaben, dem beliebig viele weitere Buchstaben, Dezimalziffern und Unterstreichungszeichen (underscores, _) folgen dürfen. Matlab berücksichtigt beim Vergleich von zwei Namen allerdings nur die ersten 31 Zeichen. Zwischen Groß- und Kleinbuchstaben wird unterschieden.
Namen werden dazu verwendet, eine Wert zu bezeichnen. Welchen Wert ein Name hat, wird in der Regel erst im Programm festgelegt, es gibt aber eine Reihe von Namen mit vordefinierten Werten:
» format compact
» pi
ans =
3.1416
» eps
ans =
2.2204e-016
» realmin
ans =
2.2251e-308 |
» realmax
ans =
1.7977e+308
» i
ans =
0 + 1.0000i
» j
ans =
0 + 1.0000i
|
Die Bedeutung von eps ergibt sich daraus, daß 1.0 + eps die kleinste Zahl mit Betrag größer 1.0 ist, die Matlab intern darstellen und von 1.0 unterscheiden kann. Der Wert von 1.0 + 0.5*eps wird intern also entweder als 1.0 oder als 1.0 + eps dargestellt. eps ist damit ein Maß für die interne Rechengenauigkeit.
Matlab kennt keine geschützten Namen, man kann jeden Namen einen anderen Wert geben bzw. ihn in einer anderen Bedeutung benutzen. In diesem Zusammenhang sei ein kleiner Unterschied erwähnt. i und 1.0i bezeichnen in der Regel zwar beide denselben Zahlenwert, i ist aber ein Name, dessen Wert per Voreinstellung die imaginäre Einheit ist, niemand wird jedoch gehindert, dem Namen i eine andere Bedeutung zu geben. i ist also ein Name mit einem variablen Wert. Dagegen ist 1.0i ein Literal zur Darstellung der imaginären Einheit und damit eine Konstante. Wir werden sehen, daß wir den Wert von i ändern können, den von 1.0i nicht.
In der Mathematik macht man man keinen Unterschied zwischen 1.0i und dem Produkt 1.0*i. In Matlab muß man diesen Unterschied machen. 1.0i ist die literale Darstellung einer Zahl und nicht identisch mit dem Produkt 1.0*i, wenn man z.B. den Wert von i ändert, ändert sich auch der Wert des Produktes 1.0*i, nicht aber der Wert von 1.0i.
Daten, die als elementare Bausteine für strukturierte Daten wie Vektoren oder Matrizen verwendet werden, bezeichnen wir als skalare Daten oder Skalare. Komplexe Zahlen sind in Matlab Skalare, auch wenn man mit real bzw. imag auf einzelne Komponenten davon zugreifen kann.
» 3+pi
ans =
6.1416
|
» 5i+3.0e-2 ans = 0.0300 + 5.0000i |
» 4-2
ans =
2
|
» 3i-eps ans = -0.0000 + 3.0000i |
» 4*2.5e-2 ans = 0.1000 |
» pi.*i
ans =
0 + 3.1416i
|
» 4/2
ans =
2
| » 3./pi
ans =
0.9549
|
» 4\2
ans =
0.5000
|
» 2.5^1.2
ans =
3.0028
» 2^3
ans =
8
|
» 1.25^i
ans =
0.9752 + 0.2213i
» i.^2
ans =
-1.0000 + 0.0000i
|
Die Operatoren + und - können auch als unäre Operatoren auf einzelne Operanden angewandt werden. Die Operatorsymbole werden dann in der üblichen Weise vor dem Operanden angegeben:
» -pi
ans =
-3.1416
|
Matlab erweitet den Bereich der Zahlen um zwei spezielle Werte mit den Namen inf und nan, anstelle von inf kann man auch Inf, anstelle von nan auch NaN schreiben.
Der Wert inf ergibt sich:
» 3/0 Warning: Divide by zero. ans = Inf |
» realmax + 1.0e+100
ans =
1.7977e+308
» realmax+1.0e+200
ans =
1.7977e+308
| » realmax+1.0e+300
ans =
Inf
» 1.0e+200*1.0e+200
ans =
Inf
|
» 5+inf
ans =
Inf
» 3*inf
ans =
Inf
| » inf/2
ans =
Inf
|
» -3/Inf
ans =
0
|
nan (not a number) liefert Matlab:
» 0/0 Warning: Divide by zero. ans = NaN » inf-inf ans = NaN | » inf/inf ans = NaN |
» 5*nan ans = NaN |
» abs(-pi)
ans =
3.1416
| » abs(2+2i)
ans =
2.8284
|
» sqrt(2)
ans =
1.4142
» sqrt(-2.0e+2)
ans =
0 +14.1421i
| » sqrt(3.5+2i)
ans =
1.9405 + 0.5153i
|
» exp(2)
ans =
7.3891
» exp(-2.5e-3)
ans =
0.9975
| » exp(2.5-2.0e-3i) ans = 12.1825 - 0.0244i |
» log(10)
ans =
2.3026
» log(1)
ans =
0
» log(0)
Warning: Log of zero.
ans =
-Inf
| » log(-1)
ans =
0 + 3.1416i
» log(i)
ans =
0 + 1.5708i
|
» sin(0.1)
ans =
0.0998
| » tan(pi)
ans =
-1.2246e-016
|
help elfuneine Auflistung speziellerer Funktionen mit dem Befehl:
help specfunNähere Informationen zu einer bestimmten Funktion mit Namen Funktionsname erhält man mit dem Befehl:
help Funktionsname
Wir haben die Namen pi, eps, realmin, realmax, i, j als Namen von bestimmten Zahlen kennengelernt. Genauer gesprochen bezeichnen diese Namen in Matlab per Voreinstellung bestimmte Funktionen ohne Argument, die eben als Funktionswert bestimmte Zahlen liefern. Wie alle Namen in Matlab sind diese Namen aber nicht geschützt, Sie können ihren Wert, also das was sie bezeichnen, ohne Probleme abändern.
Wenn Sie das wirklich tun, sollten Sie aber auch später daran denken,
wenn Sie die Namen wieder benutzen. Im folgenden Beispiel ist der ausgegebene
Wert von sin(pi) kein Rechenfehler von Matlab.
» pi=1
pi =
1
| » sin(pi)
ans =
0.8415
|
Falls mehrere Operationen und Funktionsaufrufe in einem Ausdruck beschrieben werden, muß die Reihenfolge festgelegt werden, in der diese auszuführen sind. Matlab unterscheidet sich da nicht vom Üblichen. Man kann die Reihenfolge wie gewohnt durch Klammerung angeben, daneben gilt die (übliche) Prioritätenregelung für Operatoren. Die Angaben der Klammerung haben immer Vorrang vor der Prioritätenregelung.
Die Prioritätsstufen sind von oben nach unten:
» -3.2^3 ans = -32.7680 | » -(3.2^3) ans = -32.7680 |
» -2^2
ans =
-4
|
» 3*-5 ans = -15 » 3*(-5) ans = -15 | » 4+-2
ans =
2
» 5--2^2
ans =
9
|
Die Prioritätenregelung legt nicht fest, wie der folgende Ausdruck
zu interpretieren ist:
» 2^-(3-2)
ans =
0.5000
|
» 4./-2
ans =
-2
|
» 1.0 + 0.5*eps
ans =
1
| » 1.0 + (0.5*eps)
ans =
1
|
» (2+3)^2 + sin((1+eps)*pi)
ans =
25
|
» 2^3^4
ans =
4096
» (2^3)^4
ans =
4096
» 2^(3^4)
ans =
2.4179e+024
| » 128/4/2
ans =
16
» (128/4)/2
ans =
16
» 128/(4/2)
ans =
64
|
Aufgabe 2.1:
Lassen Sie die Werte von pi, eps sowie 1.0 + eps ausgeben. Letzteres
ist die kleinste Zahl größer 1.0, die Matlab von 1.0
unterscheiden kann.
Welches Ergebnis liefert Matlab für 1.0+0.5*eps?
Können Sie Matlab dazu bringen, eine Zahl auszugeben, deren Wert
zwischen pi und (1+eps)*pi liegt?