Autor |
Kondition von Matrixpotenzen |
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Themenstart: 2021-05-07
|
Hallo zusammen, ich habe diese Aufgabe.
https://www.matheplanet.com/matheplanet/nuke/html/uploads/b/54010_Unjojoijijiohizhvghfhbenannt.PNG
Ich bin mir nicht sicher ob ich richtig verstanden habe was ich bei a) genau machen soll ....
Was wurde mit "Gleichungssysteme aufstellen" gemeint ?
Das ist mein Code, ist richtig oder habe ich falsch verstanden?
\sourceon nameDerSprache
function Alghabra04(A,b,k)
#A zeigen
A
#k zeigen
k
disp("\nA^k :\n")
A^k
#b zeigen
b
# x rechnen
x = A^k\(A^(k-1) * b)
# Konditionszahl von A^k berechnen
disp("Konditionszahl von A^k ist : \n")
c = cond(A^k)
#halblogarithmischen Plot darstellen
index=1;
for i = 1:35
v(index) = cond(A^i);
index=index +1;
end
k1 = 1:35;
#v
semilogy(k1,v)
end
\sourceoff
Danke im Voraus! :)
|
Profil
|
Delastelle
Senior  Dabei seit: 17.11.2006 Mitteilungen: 2265
 | Beitrag No.1, eingetragen 2021-05-09
|
Hallo s-amalgh!
Wie sieht denn der plot aus?
Sieht man da schon was?
(nicht zu große Bilder kann man auch hochladen und anzeigen lassen.)
Viele Grüße
Ronald
|
Profil
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Beitrag No.2, vom Themenstarter, eingetragen 2021-05-09
|
Danke erstmal für deine Antwort!
ich weiß erstmal nicht ob ich richtig verstanden habe was die Aufgabe verlängt
|
Profil
|
Delastelle
Senior  Dabei seit: 17.11.2006 Mitteilungen: 2265
 | Beitrag No.3, eingetragen 2021-05-09
|
Bei mir ist Numerik lange her - ich müsste auch erst mal überlegen wie man das richtig löst.
Eventuell hat ja jemand anderes noch Ideen...
|
Profil
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Beitrag No.4, vom Themenstarter, eingetragen 2021-05-09
|
mein Plot sieht so aus
https://www.matheplanet.com/matheplanet/nuke/html/uploads/b/54010_Unbenankjhkjhkjhkjhkjhnt.PNG
Denkst du ist das richtig?
|
Profil
|
Delastelle
Senior  Dabei seit: 17.11.2006 Mitteilungen: 2265
 | Beitrag No.5, eingetragen 2021-05-10
|
Hallo,
Zur Konditionszahl in Octave (kostenlos - ähnlich zu Matlab) fand ich foldendes:
\sourceon Octave
-- cond (A)
-- cond (A, P)
Compute the P-norm condition number of a matrix with respect to
inversion.
'cond (A)' is defined as 'norm (A, P) * norm (inv (A), P)'.
By default, 'P = 2' is used which implies a (relatively slow)
singular value decomposition. Other possible selections are 'P =
1, Inf, "fro"' which are generally faster. See 'norm' for a full
discussion of possible P values.
The condition number of a matrix quantifies the sensitivity of the
matrix inversion operation when small changes are made to matrix
elements. Ideally the condition number will be close to 1. When
the number is large this indicates small changes (such as underflow
or round-off error) will produce large changes in the resulting
output. In such cases the solution results from numerical
computing are not likely to be accurate.
See also: condest, rcond, condeig, norm, svd.
\sourceoff
Eventuell sieht man auch etwas zur Kondition wenn man sich einmal eine höhere Potenz der Matrix ausdruckt(anzeigt)!
Viele Grüße
Ronald
|
Profil
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Beitrag No.6, vom Themenstarter, eingetragen 2021-05-10
|
kann man also cond(A^k) nicht so schreiben?
was ist p ? ich habe nicht so gut verstanden
|
Profil
|
Delastelle
Senior  Dabei seit: 17.11.2006 Mitteilungen: 2265
 | Beitrag No.7, eingetragen 2021-05-10
|
Hallo,
man kann cond(A^k) schreiben.
In der Octave-Beschreibung bezeichnet p eine Zahl für eine spezielle Norm. Laut Beschreibung wird p erst mal 2 gesetzt.
Du kannst ja mal schauen ob Ihr im Skript oder verwendeten Buch die Kondition genauso definiert habt!
als
'norm (A, P) * norm (inv (A), P)'
(inv(A) sollte die invertierte Matrix A^(-1) sein.)
Viele Grüße
Ronald
|
Profil
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Beitrag No.8, vom Themenstarter, eingetragen 2021-05-10
|
ja aber wenn man cond(A^k) schreiben kann dann brauche ich 'cond (A)' is defined as 'norm (A, P) * norm (inv (A), P)' nicht oder..
|
Profil
|
Delastelle
Senior  Dabei seit: 17.11.2006 Mitteilungen: 2265
 | Beitrag No.9, eingetragen 2021-05-10
|
Hallo,
ich hatte die Octave-Hilfe zu "cond" gesucht um noch mal nachzuschauen was dort steht.
Im Plot Beitrag 4 steigt ja die Konditionszahl bei höheren Matrixpotenzen von A an. Sie soll aber eher bei 1 liegen für gute Kondition der Matrix.
Viele Grüße
Ronald
|
Profil
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Beitrag No.10, vom Themenstarter, eingetragen 2021-05-10
|
"Funktion, welches die Gleichungssysteme in Abhängigkeit von k aufstellt "
bedeutet das dass die Funktion die Gleichungssysteme lösen soll oder wie?
|
Profil
|
Delastelle
Senior  Dabei seit: 17.11.2006 Mitteilungen: 2265
 | Beitrag No.11, eingetragen 2021-05-10
|
Hallo,
mir fällt da ein:
\sourceon Octave
>> A = [2 4 -5; 1 2 0; -4 12 6]
A =
2 4 -5
1 2 0
-4 12 6
>> b = [15; 5; 14]
b =
15
5
14
>> A\b
ans =
1
2
-1
>>
\sourceoff
Dies geht auch für höhere Potenzen von A z.B. in einem Matlab-Skript.
Ich denke später noch mal drüber nach ob das die Lösungsidee ist.
Viele Grüße
Ronald
|
Profil
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Beitrag No.12, vom Themenstarter, eingetragen 2021-05-10
|
"Dies geht auch für höhere Potenzen von A"
nein also z.B. x =A^2\b gibt nicht (1,2,-1)^T .
aber was ich nicht verstehe ist was ist der unterschied zwischen das "Funktion, welches die Gleichungssysteme in Abhängigkeit von k aufstellt" bei a) und das "Lösen Sie für k = 1,....,35 das Gleichungssystem A^k *x = A^(k−1)*b mit einem bereits in MATLAB implementierten Löser für lineare Gleichungssysteme" ?
bedeuten beide gleich?
|
Profil
|
zippy
Senior  Dabei seit: 24.10.2018 Mitteilungen: 4428
 | Beitrag No.13, eingetragen 2021-05-10
|
\quoteon(2021-05-10 02:56 - s-amalgh in Beitrag No. 12)
bedeuten beide gleich?
\quoteoff
Bei a) bildest du die Matrizen $A^k$ und berechnest deren Konditionszahlen. Das hast du ja im Startbeitrag bereits getan.
Bei b) berechnest du die Fehler der Lösungen von $A^k\,x=A^{k−1}\,b$, indem du dieses System per $x=A^k\setminus(A^{k-1}\,b)$ löst und dann die Lösung $x$ mit der in der Aufgabe genannten exakten Lösung $\hat x$ vergleichst. Dieser Schritt fehlt noch.
Mehr ist nicht zu tun. Insbesondere muss man sich keine Gedanken zur richtigen Definition der Konditionszahl machen, da in der Aufgabe explizit gesagt wird, dass man die MATLAB-Funktion cond benutzen soll.
|
Profil
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Beitrag No.14, vom Themenstarter, eingetragen 2021-05-10
|
Danke erstmal für deine Antwort! :)
Soll ich das “ x = A^k\(A^(k-1) * b)” in der 12 Zeile löschen? Ich bin mir nicht sicher ob ich für a) das x = A^k\(A^(k-1) * b) löschen soll
Weil bei b) steht dass ich die lineare Gleichungssystem mit “ mldivide” lösen soll.
Bei a) soll ich noch halblogarithmischen Plot darstellen und das habe ich gemacht aber ich bin mir nicht sicher ob mein Plot richtig aussieht .
“ Lösung x mit der in der Aufgabe genannten exakten Lösung x^ vergleichst “
Wie vergleiche ich das? Mit norm( x - x^) oder wie meinst du das?
Und wie ich verstanden habe ich soll bei b) noch das Produkt aus Maschinengenauigkeit und der Konditionszahl berechnen und dann muss ich die relativen Fehler mit dem Produkt in einem halblogarithmischen Plot darstellen oder?
Danke im Voraus für deine Antwort! :)
|
Profil
|
zippy
Senior  Dabei seit: 24.10.2018 Mitteilungen: 4428
 | Beitrag No.15, eingetragen 2021-05-10
|
\quoteon(2021-05-10 15:56 - s-amalgh in Beitrag No. 14)
Weil bei b) steht dass ich die lineare Gleichungssystem mit “ mldivide” lösen soll.
\quoteoff
mldivide ist nur eine andere Schreibweise für den \-Operator. Die Doku sagt "x = mldivide(A,B) is an alternative way to execute x = A\B, but is rarely used. It enables operator overloading for classes."
\quoteon(2021-05-10 15:56 - s-amalgh in Beitrag No. 14)
aber ich bin mir nicht sicher ob mein Plot richtig aussieht .
\quoteoff
Er sieht erstmal plausibel aus. Wenn du dir nicht sicher bist, rechne einfach ein paar wenige Punkte von Hand nach.
\quoteon(2021-05-10 15:56 - s-amalgh in Beitrag No. 14)
Wie vergleiche ich das? Mit norm( x - x^) oder wie meinst du das?
\quoteoff
Ja. Dass du die euklidische Norm verwenden sollst, steht in der Aufgabenstellung.
\quoteon(2021-05-10 15:56 - s-amalgh in Beitrag No. 14)
Und wie ich verstanden habe ich soll bei b) noch das Produkt aus Maschinengenauigkeit und der Konditionszahl berechnen und dann muss ich die relativen Fehler mit dem Produkt in einem halblogarithmischen Plot darstellen oder?
\quoteoff
So ist es.
|
Profil
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Beitrag No.16, vom Themenstarter, eingetragen 2021-05-10
|
\sourceon nameDerSprache
mldivide ist nur eine andere Schreibweise für den \-Operator. Die Doku sagt "x = mldivide(A,B) is an alternative way to execute x = A\B, but is rarely used. It enables operator overloading for classes."
\sourceoff
soll ich also das “ x = A^k\(A^(k-1) * b)” zweimal in meinem Code schreiben einmal für a) und einmal für b) oder wie?
\sourceon nameDerSprache
Ja. Dass du die euklidische Norm verwenden sollst, steht in der Aufgabenstellung.
\sourceoff
Die relativen Fehler berechne ich so norm(x1 - x)/norm(x) oder falsch? x ist die exakte Lösung und x1 die Lösung meines Codes
\sourceon nameDerSprache
So ist es.
\sourceoff
c = cond(A^k)
produkt = c*eps
soll ich das Produkt so berechnen oder ist eps falsch?
Danke im Voraus für deine Antwort! :)
|
Profil
|
zippy
Senior  Dabei seit: 24.10.2018 Mitteilungen: 4428
 | Beitrag No.17, eingetragen 2021-05-10
|
Du musst dir nicht jeden noch so kleinen Schritt hier bestätigen lassen.
\quoteon(2021-05-10 17:04 - s-amalgh in Beitrag No. 16)
soll ich also das “ x = A^k\(A^(k-1) * b)” zweimal in meinem Code schreiben einmal für a) und einmal für b) oder wie?
\quoteoff
Diese Rechnung benötigst du erst in b).
\quoteon(2021-05-10 17:04 - s-amalgh in Beitrag No. 16)
Die relativen Fehler berechne ich so norm(x1 - x)/norm(x) oder falsch? x ist die exakte Lösung und x1 die Lösung meines Codes
\quoteoff
Ja, das würde ich auch unter dem relativen Fehler verstehen.
\quoteon(2021-05-10 17:04 - s-amalgh in Beitrag No. 16)
produkt = c*eps
soll ich das Produkt so berechnen oder ist eps falsch?
\quoteoff
Wenn du dir nicht sicher bist, solltest du die Doku zu eps anschauen.
|
Profil
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Beitrag No.18, vom Themenstarter, eingetragen 2021-05-10
|
Danke :)
Letzte Frage: wie kann ich die relativen Fehler mit dem Produkt in einem halblogarithmischen Plot darstellen ?
|
Profil
|
zippy
Senior  Dabei seit: 24.10.2018 Mitteilungen: 4428
 | Beitrag No.19, eingetragen 2021-05-10
|
\quoteon(2021-05-10 17:50 - s-amalgh in Beitrag No. 18)
wie kann ich die relativen Fehler mit dem Produkt in einem halblogarithmischen Plot darstellen ?
\quoteoff
Schau in die Doku zu semilogy. Das "Plot Multiple Lines"-Beispiel passt zu deiner Aufgabe.
|
Profil
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Beitrag No.20, vom Themenstarter, eingetragen 2021-05-10
|
Was sollte auf der x-Achse sein und was sollte auf der y-Achse sein?
|
Profil
|
zippy
Senior  Dabei seit: 24.10.2018 Mitteilungen: 4428
 | Beitrag No.21, eingetragen 2021-05-10
|
\quoteon(2021-05-10 18:21 - s-amalgh in Beitrag No. 20)
Was sollte auf der x-Achse sein und was sollte auf der y-Achse sein?
\quoteoff
Machs wie in deinem Beitrag Nr. 4.
|
Profil
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Beitrag No.22, vom Themenstarter, eingetragen 2021-05-10
|
Eine Frage ist mir jetzt aufgefallen und zwar soll k = 1,2,….. oder k = 1,2,……,35 ?
|
Profil
|
zippy
Senior  Dabei seit: 24.10.2018 Mitteilungen: 4428
 | Beitrag No.23, eingetragen 2021-05-10
|
\quoteon(2021-05-10 18:56 - s-amalgh in Beitrag No. 22)
soll k = 1,2,….. oder k = 1,2,……,35 ?
\quoteoff
Die Gleichung $A^k\,x=A^{k−1}\,b$ kann man für alle $k$ formulieren. Daher steht dort $k=1,2,\ldots$.
Sobald man aber etwas plotten will, muss man irgendwo ein Ende finden. Daher steht in der Aufgabenstellung unter a) und b) jeweils $k=1,2,\ldots,35$.
|
Profil
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Beitrag No.24, vom Themenstarter, eingetragen 2021-05-11
|
"Stellen Sie jeweils die relativen Fehler zusammen mit
der Fehlersch¨ atzung κ(Ak) "0 in einem halblogarithmischen Plot dar"
heißt das muss ich alle relativen Fehler der Lösung für k=1 und dann k=2 bis k= 35? wenn ja wie kann ich das machen?
|
Profil
|
zippy
Senior  Dabei seit: 24.10.2018 Mitteilungen: 4428
 | Beitrag No.25, eingetragen 2021-05-11
|
\quoteon(2021-05-11 00:06 - s-amalgh in Beitrag No. 24)
wenn ja wie kann ich das machen?
\quoteoff
Völlig analog dazu, wie du es für die Konditionszahl im Startbeitrag gemacht hast.
|
Profil
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Beitrag No.26, vom Themenstarter, eingetragen 2021-05-11
|
https://www.matheplanet.com/matheplanet/nuke/html/uploads/b/54010_Unbekjehrkjehgkeghenannt.PNG
Denkst du ist das richtig?
|
Profil
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Beitrag No.27, vom Themenstarter, eingetragen 2021-05-11
|
Das ist mein Code :
\sourceon nameDerSprache
function Alghabra04(A,b,k)
#A zeigen
A
#k zeigen
k
disp("\nA^k :\n")
A^k
#b zeigen
b
#Die exakte Lösung
x = [1 ; 2 ;-1]
# Konditionszahl von A^k in Abhängigkeit von k in einem halblogarithmischen Plot
index=1;
for i = 1:35
v(index) = cond(A^i);
index=index +1;
end
k1 = 1:35;
semilogy(k1,v)
#die Lösung x berechnen
x1 = mldivide(A^k,(A^(k-1)) * b)
#der relativer Fehler der Lösung berechnen
fehler = norm(x)\norm(x - x1)
# Konditionszahl von A^k berechnen
disp("Konditionszahl von A^k ist : \n")
c = cond(A^k)
#Das Produkt aus Maschinengenauigkeit eps und der Konditionszahl berechnen
disp("Produkt aus Maschinengenauigkeit eps und der Konditionszahl : ")
produkt = c*eps
#Die relativen Fehler mit der Fehlerschätzung in einem halblogarithmischen Plot darstellen
index1=1;
for i = 1:35
u(index1) = cond(A^i)*eps;
x2 = A^(i) \ (A^(i -1) * b);
fehler1(index1) = norm(x)\norm(x - x2);
index1 = index1 +1;
end
semilogy(fehler1,u)
end
\sourceoff
|
Profil
|
zippy
Senior  Dabei seit: 24.10.2018 Mitteilungen: 4428
 | Beitrag No.28, eingetragen 2021-05-11
|
\quoteon(2021-05-11 00:30 - s-amalgh in Beitrag No. 26)
Denkst du ist das richtig?
\quoteoff
Nein, das sieht nicht richtig aus.
\quoteon(2021-05-11 00:32 - s-amalgh in Beitrag No. 27)
Das ist mein Code
\quoteoff
Du bist beim Aufruf von semilogy nicht diesem Hinweis gefolgt:
\quoteon(2021-05-10 17:59 - zippy in Beitrag No. 19)
Schau in die Doku zu semilogy. Das "Plot Multiple Lines"-Beispiel passt zu deiner Aufgabe.
\quoteoff
Wenn du semilogy so aufrufst, wie oben beschrieben...
\sourceon MATLAB
A = [2, 4, -5; 1, 2, 0; -4, 12, 6]
b = [15; 5; 14]
x = [1; 2; -1]
r = 1:35
for k = r
c(k) = cond(A^k)
f(k) = norm(A^k \ (A^(k-1) * b) - x) / norm(x)
end
semilogy(r, c * eps, r, f)
\sourceoff
... sieht der Plot so aus:

|
Profil
|
Delastelle
Senior  Dabei seit: 17.11.2006 Mitteilungen: 2265
 | Beitrag No.29, eingetragen 2021-05-11
|
Hallo,
eine Ergänzung:
ich kam bei A^35 auf
\sourceon Octave
A = [2, 4, -5; 1, 2, 0; -4, 12, 6]
>> A^35
ans =
8.2129e+30 -3.8879e+31 -2.1800e+31
1.3959e+30 -6.6079e+30 -3.7052e+30
-8.5477e+30 4.0464e+31 2.2689e+31
\sourceoff
dabei ist zu beachten, dass Matlab für viele Funktionen double-Gleitkommazahlen verwendet.
Diese haben 8 Byte und eine Genauigkeit von 15-16 Stellen.
Damit ist eine Zahl "x e+30" nur näherungsweise gespeichert.
Die Software Maple kann auch mit größerer Genaugikeit rechnen.
Matlab kann dies inzwischen eventuell auch
(eine solche Matlab-Version besitze ich aber nicht.)
Viele Grüße
Ronald
|
Profil
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Beitrag No.30, vom Themenstarter, eingetragen 2021-05-11
|
Ist mein Code sonst richtig oder?
und noch eine Frage :
Soll ich die erste For -Schleife in meinem Code löschen und alles in einer For-schleife schreiben wie du gemacht hast oder nicht?
Und soll ich die Matrix A und die rechte seite b in meinem Code schreiben oder das eigeben wenn ich meine Funktion anwenden will (Alghabra04([2 4 -5; 1 2 0 ; -4 12 6],[15 ; 5 ; 14],3)) ? Eigentlich ich wusste nicht was ich da mache weil ich diese Punkt in der Aufgabenstellung nicht verstanden habe
Danke im Voraus für die Antwort! :)
[Die Antwort wurde nach Beitrag No.28 begonnen.]
|
Profil
|
zippy
Senior  Dabei seit: 24.10.2018 Mitteilungen: 4428
 | Beitrag No.31, eingetragen 2021-05-11
|
\quoteon(2021-05-11 01:28 - s-amalgh in Beitrag No. 30)
Soll ich die erste For -Schleife in meinem Code löschen und alles in einer For-schleife schreiben wie du gemacht hast oder nicht?
\quoteoff
Mein Code entspricht nicht der Aufgabenstellung. Die möchte nämlich, dass du bestimmte Dinge in eine Funktion auslagerst.
Du könntest deinen Code beispielsweise zu aufteilen:
1. Eine Funktion von $k$ zur Berechnung der Konditionszahl.
2. Eine Funktion von $k$ zur Berechnung des relativen Fehlers.
3. Eine Schleife zum Auswerten dieser Funktionen für $k=1,\ldots,35$.
4. Die Aufrufe von semilogy für die beiden Plots.
|
Profil
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Beitrag No.32, vom Themenstarter, eingetragen 2021-05-11
|
Meinst du soll mein Code die Hauptfunktion haben und drin 3 Funktionen noch? Könntest du mir bitte ein Beispiel vom Code geben damit ich verstehe. ?
Und soll ich die Matrix A und die rechte seite b in meinem Code schreiben oder das eigeben wenn ich meine Funktion anwenden will (Alghabra04([2 4 -5; 1 2 0 ; -4 12 6],[15 ; 5 ; 14],3)) ?
|
Profil
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Beitrag No.33, vom Themenstarter, eingetragen 2021-05-11
|
Entspricht mein Code der Aufgabenstellung oder fehlt noch was ?
\sourceon Matlab
function Alghabra04(k)
function [x] = konditionszahl(A,b)
# A^k zeigen
disp("\nA^k :\n")
A^k
#die Lösung x berechnen
disp("die Loesung x :\n")
x = mldivide(A^k,(A^(k-1)) * b)
# Konditionszahl von A^k berechnen
disp("Konditionszahl von A^k ist : \n")
c = cond(A^k)
#Das Produkt aus Maschinengenauigkeit eps und der Konditionszahl berechnen
disp("Produkt aus Maschinengenauigkeit eps und der Konditionszahl : ")
produkt = c*eps
#Der relative Fehler für A^k
fehler = norm(A^k \ (A^(k-1) * b) - [1 ; 2 ;-1]) / norm([1 ; 2 ;-1])
end
function relativen_fehler(A,b)
#Die relativen Fehler berechnen
r = 1:35;
for k = r
c(k) = cond(A^k);
c1(k) = cond(A^k)*eps;
f(k) = norm(A^k \ (A^(k-1) * b) - [1 ; 2 ;-1]) / norm([1 ; 2 ;-1]);
end
end
#Eingabe der Matrix und rechter Seite
A1 = [2 4 -5; 1 2 0; -4 12 6];
b1 = [15; 5; 14];
# Aufruf die Funktione
x1 = konditionszahl(A1,b1);
relativen_fehler(A1,b1)
#halblogarithmischer Plot
semilogy(1:35, c1, 1:35, f)
legend({"Konditionszahl von A^k ","die relativen Fehler mit der Fehlerschaetzung "},"Location","southeast") #legend
end
\sourceoff
und das ist das Plot :
https://www.matheplanet.com/matheplanet/nuke/html/uploads/b/54010_Unbenrvkropvkrpvrannt.PNG
|
Profil
|
Delastelle
Senior  Dabei seit: 17.11.2006 Mitteilungen: 2265
 | Beitrag No.34, eingetragen 2021-05-12
|
Hallo,
ich habe bei Matlab-Funktionen bisher immer so gearbeitet
(Eventuell geht es auch anders):
\sourceon Hauptprogramm.m
for i = 1:10
fib(i)
end
\sourceoff
\sourceon fib.m
function [erg] = fib(n)
% die Fibonacci-Folge
if ( (n == 0) | (n == 1) )
erg = 1;
else
erg = fib(n-2)+fib(n-1);
end
\sourceoff
Viele Grüße
Ronald
|
Profil
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Beitrag No.35, vom Themenstarter, eingetragen 2021-05-12
|
- Habe ich also einen Fehler in meinem Code?
- Soll ich die beiden Funktionen “konditionszahl(A,b)“ und „ relativen_Fehler(A,b)“ in einem Funktion statt 2 ?
- Was soll ich mit dem k machen? “Alghabra04(k)” . Lasse ich es da oder soll ich es irgendwo anders schreiben?
Könntet ihr mir bitte antworten? Weil ich meinen Code heute abschicken muss
Danke im Voraus!
|
Profil
|
zippy
Senior  Dabei seit: 24.10.2018 Mitteilungen: 4428
 | Beitrag No.36, eingetragen 2021-05-12
|
Du hast keinen Fehler in deinem Code und auch die Verwendung von inneren Funktionen ("nested functions") halte ich für sinnvoll.
Etwas verwirrend ist für mich der Umgang mit der Variablen $k$ (das ist aber kein Fehler im engerern Sinne, und du musst das nicht unbedingt ändern): Die äußere Funktion sollte keinen Parameter $k$ haben, weil sie ja etwas für alle Werte von $k$ macht. Die beiden inneren Funktionen würde ich nur für einen Wert von $k$ ihr Ergebnis berechnen lassen und ihnen somit das $k$ als Parameter mitgeben.
Übrigens können innere Funktionen auf die Variablen der äußeren zugreifen. Du musst ihnen daher $A$ und $b$ nicht notwendigerweise als Parameter mitgeben.
|
Profil
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Beitrag No.37, vom Themenstarter, eingetragen 2021-05-12
|
Ich habe jetzt meinen Code geändert
könntest du bitte einen Blick darauf werfen?
\sourceon Matlab
function Alghabra04
function [x] = konditionszahl
# A^k zeigen
disp("\nA^k :\n")
A^k
#die Lösung x berechnen
disp("die Loesung x :\n")
x = mldivide(A^k,(A^(k-1)) * b)
# Konditionszahl von A^k berechnen
disp("Konditionszahl von A^k ist : \n")
c = cond(A^k)
#Das Produkt aus Maschinengenauigkeit eps und der Konditionszahl berechnen
disp("Produkt aus Maschinengenauigkeit eps und der Konditionszahl : ")
produkt = c*eps
#Der relative Fehler für A^k
fehler = norm(A^k \ (A^(k-1) * b) - [1 ; 2 ;-1]) / norm([1 ; 2 ;-1])
end
function relativen_fehler
#Die relativen Fehler berechnen
r = 1:35;
for k = r
c(k) = cond(A^k);
c1(k) = cond(A^k)*eps;
f(k) = norm(A^k \ (A^(k-1) * b) - [1 ; 2 ;-1]) / norm([1 ; 2 ;-1]);
end
end
#Eingabe der Matrix und rechter Seite
A = [2 4 -5; 1 2 0; -4 12 6];
b = [15; 5; 14];
k = 3;
# Aufruf die Funktione
konditionszahl
relativen_fehler
#halblogarithmischer Plot
semilogy(1:35, c1, 1:35, f)
legend({"Konditionszahl von A^k ","die relativen Fehler mit der Fehlerschaetzung "},"Location","southeast") #legend
end
\sourceoff
So meinst du das oder habe ich dich falsch verstanden?
|
Profil
|
zippy
Senior  Dabei seit: 24.10.2018 Mitteilungen: 4428
 | Beitrag No.38, eingetragen 2021-05-12
|
\quoteon(2021-05-12 16:59 - s-amalgh in Beitrag No. 37)
So meinst du das oder habe ich dich falsch verstanden?
\quoteoff
Nein, so meinte ich das nicht. Deine Funktion relativen_fehler hat doch beispielsweise keine dieser beiden Eigenschaften:
\quoteon(2021-05-12 07:45 - zippy in Beitrag No. 36)
Die beiden inneren Funktionen würde ich nur für einen Wert von $k$ ihr Ergebnis berechnen lassen und ihnen somit das $k$ als Parameter mitgeben.
\quoteoff
|
Profil
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Beitrag No.39, vom Themenstarter, eingetragen 2021-05-12
|
du meintest vielleicht die Funktion Konditionszahl weil relativen_fehler hat nur for schleife
\sourceon matlab
function Alghabra04
function [x] = konditionszahl(k)
# A^k zeigen
disp("\nA^k :\n")
A^k
#die Lösung x berechnen
disp("die Loesung x :\n")
x = mldivide(A^k,(A^(k-1)) * b)
# Konditionszahl von A^k berechnen
disp("Konditionszahl von A^k ist : \n")
c = cond(A^k)
#Das Produkt aus Maschinengenauigkeit eps und der Konditionszahl berechnen
disp("Produkt aus Maschinengenauigkeit eps und der Konditionszahl : ")
produkt = c*eps
#Der relative Fehler für A^k
fehler = norm(A^k \ (A^(k-1) * b) - [1 ; 2 ;-1]) / norm([1 ; 2 ;-1])
end
function relativen_fehler
#Die relativen Fehler berechnen
r = 1:35;
for k = r
c(k) = cond(A^k);
c1(k) = cond(A^k)*eps;
f(k) = norm(A^k \ (A^(k-1) * b) - [1 ; 2 ;-1]) / norm([1 ; 2 ;-1]);
end
end
#Eingabe der Matrix und rechter Seite
A = [2 4 -5; 1 2 0; -4 12 6];
b = [15; 5; 14];
# Aufruf die Funktione
konditionszahl(3)
relativen_fehler
#halblogarithmischer Plot
semilogy(1:35, c1, 1:35, f)
legend({"Konditionszahl von A^k ","die relativen Fehler mit der Fehlerschaetzung "},"Location","southeast") #legend
end
\sourceoff
ich habe das jetzt wieder geändert. richtig jetzt?
|
Profil
|