Autor |
Kondition von Matrixpotenzen |
|
zippy
Senior  Dabei seit: 24.10.2018 Mitteilungen: 4422
 | Beitrag No.40, eingetragen 2021-05-12
|
\quoteon(2021-05-12 17:40 - s-amalgh in Beitrag No. 39)
du meintest vielleicht die Funktion Konditionszahl weil relativen_fehler hat nur for schleife
\quoteoff
Nein, ich meinte schon relativen_fehler.
Tatsächlich enthält diese Funktion bei dir eine for-Schleife, aber das ist nicht, was ich vorgeschlagen hatte:
\quoteon(2021-05-11 01:37 - zippy in Beitrag No. 31)
2. Eine Funktion von $k$ zur Berechnung des relativen Fehlers.
\quoteoff
Aber du musst meinen Vorschlag nicht umsetzen. Es ist ja nur ein Vorschlag.
|
Profil
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Beitrag No.41, vom Themenstarter, eingetragen 2021-05-12
|
Jetzt ist so wie du gemeint hast oder?
\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
end
function relativen_fehler(k)
#Der relative Fehler für A^k
fehler = norm(A^k \ (A^(k-1) * b) - [1 ; 2 ;-1]) / norm([1 ; 2 ;-1])
#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(3)
#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 eigentlich noch eine Frage \sourceon Matlab
function [x] = konditionszahl(k)
\sourceoff
Wofür benutzt man [x] ? Ich habe das auf google gesehen aber ich weiß nicht ob ich das schreiben muss oder nicht
Könntest du mir bitte das erklären und meinen Code auch wieder sehen?
Danke im Voraus!
|
Profil
|
zippy
Senior  Dabei seit: 24.10.2018 Mitteilungen: 4422
 | Beitrag No.42, eingetragen 2021-05-12
|
\quoteon(2021-05-12 18:06 - s-amalgh in Beitrag No. 41)
Jetzt ist so wie du gemeint hast oder?
\quoteoff
Nein, die Funktion berechnet ja immer noch etwas anderes als den relativen Fehler für dieses $k$.
\quoteon(2021-05-12 18:06 - s-amalgh in Beitrag No. 41)
Wofür benutzt man [x]
\quoteoff
Mit dem $x$ sagst du, welche Variable dem Rückgabewert der Funktion entsprechen soll. In deinem Code weist du tatsächlich $x$ einen Wert zu, aber von diesem Wert machst du später keinen Gebrauch mehr.
Die eckigen Klammern brauchst du nur, wenn es um mehrere Rückgabewerte geht (siehe hier den Abschnitt "Function with One Output").
|
Profil
|
Buri
Senior  Dabei seit: 02.08.2003 Mitteilungen: 46764
Wohnort: Dresden
 | Beitrag No.43, eingetragen 2021-05-12
|
Hi s-amalgh,
ich hatte befürchtet, dass Matlab die Matrixpotenz Ak nicht wie gewünscht berechnet. Es ist möglicherweise so, dass das (i,j)-Element von Ak gleich der Potenz (aij)k ist, die Potenzierung also elementweise erfolgt und nicht als Matrixpotenz.
Das müsste man an Hand einer Testmatrix, zum Beispiel (1,2;3,4)^2 feststellen, die elementweise Potenz wäre (1,4;9,16) , während die Matrixpotenz gleich (7,10;15,22) ist.
Glücklicherweise wird die Matrixpotenz von Matlab durch Ak richtig berechnet, siehe Beitrag #45.
Gruß Buri
|
Profil
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Beitrag No.44, vom Themenstarter, eingetragen 2021-05-12
|
"Nein, die Funktion berechnet ja immer noch etwas anderes als den relativen Fehler für dieses k."
wieso rechnet was anders? ich habe k= 3 geschcrieben
fehler = 5.3051e-016
das ist jetzt der relative Fehler von k=3 wieso falsch?
|
Profil
|
zippy
Senior  Dabei seit: 24.10.2018 Mitteilungen: 4422
 | Beitrag No.45, eingetragen 2021-05-12
|
\quoteon(2021-05-12 18:19 - Buri in Beitrag No. 43)
ich befürchte, dass Matlab die Matrixpotenz Ak nicht wie gewünscht berechnet.
\quoteoff
Das ist Unsinn, du verwechselst "^" und ".^":
\sourceon MATLAB
1> A = [1, 2; 3, 4]
A =
1 2
3 4
2> A^2
ans =
7 10
15 22
3> A.^2
ans =
1 4
9 16
\sourceoff
[Die Antwort wurde nach Beitrag No.43 begonnen.]
|
Profil
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Beitrag No.46, vom Themenstarter, eingetragen 2021-05-12
|
"Nein, die Funktion berechnet ja immer noch etwas anderes als den relativen Fehler für dieses k."
wieso rechnet was anders? ich habe k= 3 geschcrieben
fehler = 5.3051e-016
das ist jetzt der relative Fehler von k=3 wieso falsch?
|
Profil
|
zippy
Senior  Dabei seit: 24.10.2018 Mitteilungen: 4422
 | Beitrag No.47, eingetragen 2021-05-12
|
\quoteon(2021-05-12 18:22 - s-amalgh in Beitrag No. 44)
ich habe k= 3 geschcrieben
\quoteoff
Danach berechnest du ihn aber für alle $k$ von 1 bis 35.
|
Profil
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Beitrag No.48, vom Themenstarter, eingetragen 2021-05-12
|
"Danach berechnest du ihn aber für alle k von 1 bis 35."
ja aber ich muss es für alle k von 1 bis 35 für halblogarithmischen Plot
|
Profil
|
zippy
Senior  Dabei seit: 24.10.2018 Mitteilungen: 4422
 | Beitrag No.49, eingetragen 2021-05-12
|
\quoteon(2021-05-12 18:28 - s-amalgh in Beitrag No. 48)
ja aber ich muss es für alle k von 1 bis 35 für halblogarithmischen Plot
\quoteoff
Du kannst ja diese Funktion für $k$ von 1 bis 35 aufrufen.
|
Profil
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Beitrag No.50, vom Themenstarter, eingetragen 2021-05-12
|
meinst du dass ich noch eine andere Funktion schreiben?
|
Profil
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Beitrag No.51, vom Themenstarter, eingetragen 2021-05-12
|
Könntest du mir bitte das schreiben? ich wäre dankbar
Danke im Voraus!
|
Profil
|
zippy
Senior  Dabei seit: 24.10.2018 Mitteilungen: 4422
 | Beitrag No.52, eingetragen 2021-05-12
|
Ich skizziere mal, was ich meinte:
\sourceon MATLAB
function Alghabra04
A = [2, 4, -5; 1, 2, 0; -4, 12, 6]
b = [15; 5; 14]
x = [1; 2; -1]
r = 1:35
function c = konditionszahl(k)
c = cond(A^k)
end
function f = relativer_fehler(k)
f = norm(A^k \ (A^(k-1) * b) - x) / norm(x)
end
for k = r
c(k) = konditionszahl(k)
f(k) = relativer_fehler(k)
end
% Teil a)
semilogy(r, c)
% Teil b)
semilogy(r, c * eps, r, f)
end
\sourceoff
[Die Antwort wurde nach Beitrag No.50 begonnen.]
|
Profil
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Beitrag No.53, vom Themenstarter, eingetragen 2021-05-12
|
soll ich keinen Wert für k geben? als Beispiel um A^k und konditioszahl und Produkt und fehler zu rechnen?
|
Profil
|
zippy
Senior  Dabei seit: 24.10.2018 Mitteilungen: 4422
 | Beitrag No.54, eingetragen 2021-05-12
|
\quoteon(2021-05-12 19:06 - s-amalgh in Beitrag No. 53)
soll ich keinen Wert für k geben? als Beispiel um A^k und konditioszahl und Produkt und fehler zu rechnen?
\quoteoff
Das kannst du machen, in der Aufgabe verlangt werden aber nur die beiden Plots (den für Teil a) habe ich oben noch ergänzt).
|
Profil
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Beitrag No.55, vom Themenstarter, eingetragen 2021-05-12
|
in der Aufgabe verlangt wird das Gleichungssystem für k = 1,.... , 35 zu lösen.
Wo sollte ich das schreiben "x1 = mldivide(A^k,(A^(k-1)) * b)" ?
|
Profil
|
zippy
Senior  Dabei seit: 24.10.2018 Mitteilungen: 4422
 | Beitrag No.56, eingetragen 2021-05-12
|
\quoteon(2021-05-12 20:01 - s-amalgh in Beitrag No. 55)
in der Aufgabe verlangt wird das Gleichungssystem für k = 1,.... , 35 zu lösen.
\quoteoff
Das wird hier gemacht:
\quoteon(2021-05-12 18:57 - zippy in Beitrag No. 52)
\sourceon
f = norm(A^k \ (A^(k-1) * b) - x) / norm(x)
\sourceoff
\quoteoff
\quoteon(2021-05-12 20:01 - s-amalgh in Beitrag No. 55)
Wo sollte ich das schreiben "x1 = mldivide(A^k,(A^(k-1)) * b)" ?
\quoteoff
Warum willst du das denn noch irgendwo hinschreiben?
|
Profil
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Beitrag No.57, vom Themenstarter, eingetragen 2021-05-12
|
"f = norm(A^k \ (A^(k-1) * b) - x) / norm(x)"
das ist um die relativen Fehler zu rechnen oder ?
"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 (z.B. mldivide)"
So steht in der Aufgabe und wie ich verstanden habe ich muss das Gleichungssystem durch mldivide lösen deswegen will ich x1 irgendwo hinschreiben
|
Profil
|
zippy
Senior  Dabei seit: 24.10.2018 Mitteilungen: 4422
 | Beitrag No.58, eingetragen 2021-05-12
|
\quoteon(2021-05-12 20:20 - s-amalgh in Beitrag No. 57)
So steht in der Aufgabe und wie ich verstanden habe ich muss das Gleichungssystem durch mldivide lösen deswegen will ich x1 irgendwo hinschreiben
\quoteoff
Der Ausdruck $A^k\setminus(A^{k-1}\cdot b)$ ist die Lösung des Gleichungssystems. Warum willst du dieses Zwischenergebnis einer Variablen zuweisen?
Aber wenn du Spaß daran hast, kannst du das natürlich tun. Schreib
\sourceon
x1 = A^k \ (A^(k-1) * b)
f = norm(x1 - x) / norm(x)
\sourceoff
statt
\sourceon
f = norm(A^k \ (A^(k-1) * b) - x) / norm(x)
\sourceoff
|
Profil
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Beitrag No.59, vom Themenstarter, eingetragen 2021-05-13
|
Alles klar, Vielen vielen Dank für deine tolle Hilfe! :))
|
Profil
|
s-amalgh
Wenig Aktiv  Dabei seit: 16.12.2020 Mitteilungen: 374
 | Beitrag No.60, vom Themenstarter, eingetragen 2021-05-15
|
Könntest du mir bitte dabei helfen ?
https://www.matheplanet.com/matheplanet/nuke/html/viewtopic.php?topic=253920&start=0&lps=1845192#v1845192
Danke im Voraus! :)
|
Profil
|