Matroids Matheplanet Forum Index
Moderiert von mire2
Mathematische Software & Apps » Matlab » Kondition von Matrixpotenzen
Seite 1   [1 2]   2 Seiten
Autor
Universität/Hochschule Kondition von Matrixpotenzen
s-amalgh
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 16.12.2020
Mitteilungen: 122
  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 Letzter Besuch: in der letzten Woche
Dabei seit: 17.11.2006
Mitteilungen: 1741
  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
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 16.12.2020
Mitteilungen: 122
  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 Letzter Besuch: in der letzten Woche
Dabei seit: 17.11.2006
Mitteilungen: 1741
  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
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 16.12.2020
Mitteilungen: 122
  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 Letzter Besuch: in der letzten Woche
Dabei seit: 17.11.2006
Mitteilungen: 1741
  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
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 16.12.2020
Mitteilungen: 122
  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 Letzter Besuch: in der letzten Woche
Dabei seit: 17.11.2006
Mitteilungen: 1741
  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
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 16.12.2020
Mitteilungen: 122
  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 Letzter Besuch: in der letzten Woche
Dabei seit: 17.11.2006
Mitteilungen: 1741
  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
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 16.12.2020
Mitteilungen: 122
  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 Letzter Besuch: in der letzten Woche
Dabei seit: 17.11.2006
Mitteilungen: 1741
  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
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 16.12.2020
Mitteilungen: 122
  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 Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2589
  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
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 16.12.2020
Mitteilungen: 122
  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 Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2589
  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
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 16.12.2020
Mitteilungen: 122
  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 Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2589
  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
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 16.12.2020
Mitteilungen: 122
  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 Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2589
  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
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 16.12.2020
Mitteilungen: 122
  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 Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2589
  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
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 16.12.2020
Mitteilungen: 122
  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 Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2589
  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
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 16.12.2020
Mitteilungen: 122
  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 Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2589
  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
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 16.12.2020
Mitteilungen: 122
  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
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 16.12.2020
Mitteilungen: 122
  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 Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2589
  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 Letzter Besuch: in der letzten Woche
Dabei seit: 17.11.2006
Mitteilungen: 1741
  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
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 16.12.2020
Mitteilungen: 122
  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 Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2589
  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
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 16.12.2020
Mitteilungen: 122
  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
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 16.12.2020
Mitteilungen: 122
  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 Letzter Besuch: in der letzten Woche
Dabei seit: 17.11.2006
Mitteilungen: 1741
  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
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 16.12.2020
Mitteilungen: 122
  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 Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2589
  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
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 16.12.2020
Mitteilungen: 122
  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 Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 2589
  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
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 16.12.2020
Mitteilungen: 122
  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
-->> Fortsetzung auf der nächsten Seite -->>
Seite 1Gehe zur Seite: 1 | 2  

Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2021 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]