Antworte auf:  Kondition von Matrixpotenzen von s-amalgh
Forum:  Matlab, moderiert von: mire2

[Zur Forum-Gliederung] [Wie man Fragen beantwortet] [Themenstart einblenden]

  Alle registrierten Mitglieder können Mitteilungen schreiben.
Benutzername:
Passwort:
Nachricht-Icon:                   
                  
              
Nachricht:


 
 


Input assistance tools (JavaScript): [Link extern intern] [MathML?] [$$?]
[fed-area] [LaTeX-inline] [LaTeX-display] [Tikz] [hide-area][show-area] [Source code [num.]][?]
 Show Preview      Write using fedgeo formula editor or Latex.

Smilies for your message:
😃 😄 😁 🙂 🙃 😉 🤗 🤫 🤔 🙄 😴 🤒 😎 😮 😲 😂
🙁 😖 😒 😐 😡 👌 👍 👎 🤢 🤧 🥵 🥶 😵 🤯 😛 😷
Optionen: Deaktiviere HTML in dieser Nachricht
Deaktiviere MATHML in dieser Nachricht. Wenn Dein Text $-Zeichen enthält, die nicht LaTeX-Formeln begrenzen.
Deaktiviere Smilies in dieser Nachricht
Zeige die Signatur (Kann in 'Mein Profil' editiert werden.)
    [Abbrechen]
 
Beachte bitte die [Forumregeln]


Themenübersicht
s-amalgh
Aktiv
Dabei seit: 16.12.2020
Mitteilungen: 103
 Beitrag No.60, eingetragen 2021-05-15 17:40    [Diesen Beitrag zitieren]

Könntest du mir bitte dabei helfen ?
LinkLineare Ausgleichsrechnung und Normalgleichung
Danke im Voraus! :)


s-amalgh
Aktiv
Dabei seit: 16.12.2020
Mitteilungen: 103
 Beitrag No.59, eingetragen 2021-05-13 01:04    [Diesen Beitrag zitieren]

Alles klar, Vielen vielen Dank für deine tolle Hilfe! :))


zippy
Senior
Dabei seit: 24.10.2018
Mitteilungen: 2454
 Beitrag No.58, eingetragen 2021-05-12 20:43    [Diesen Beitrag zitieren]

2021-05-12 20:20 - s-amalgh in Beitrag No. 57 schreibt:
So steht in der Aufgabe und wie ich verstanden habe ich muss das Gleichungssystem durch mldivide lösen deswegen will ich x1  irgendwo hinschreiben

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
x1 = A^k \ (A^(k-1) * b)
f = norm(x1 - x) / norm(x)

statt
f = norm(A^k \ (A^(k-1) * b) - x) / norm(x)


s-amalgh
Aktiv
Dabei seit: 16.12.2020
Mitteilungen: 103
 Beitrag No.57, eingetragen 2021-05-12 20:20    [Diesen Beitrag zitieren]

"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


zippy
Senior
Dabei seit: 24.10.2018
Mitteilungen: 2454
 Beitrag No.56, eingetragen 2021-05-12 20:14    [Diesen Beitrag zitieren]

2021-05-12 20:01 - s-amalgh in Beitrag No. 55 schreibt:
in der Aufgabe verlangt wird das Gleichungssystem für k = 1,....  , 35 zu lösen.

Das wird hier gemacht:

2021-05-12 18:57 - zippy in Beitrag No. 52 schreibt:
f = norm(A^k \ (A^(k-1) * b) - x) / norm(x)


2021-05-12 20:01 - s-amalgh in Beitrag No. 55 schreibt:
Wo sollte ich das schreiben "x1 = mldivide(A^k,(A^(k-1)) * b)" ?

Warum willst du das denn noch irgendwo hinschreiben?


s-amalgh
Aktiv
Dabei seit: 16.12.2020
Mitteilungen: 103
 Beitrag No.55, eingetragen 2021-05-12 20:01    [Diesen Beitrag zitieren]

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)" ?


zippy
Senior
Dabei seit: 24.10.2018
Mitteilungen: 2454
 Beitrag No.54, eingetragen 2021-05-12 19:47    [Diesen Beitrag zitieren]

2021-05-12 19:06 - s-amalgh in Beitrag No. 53 schreibt:
soll ich keinen Wert für k geben? als Beispiel um A^k und konditioszahl und Produkt und fehler zu rechnen?

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).


s-amalgh
Aktiv
Dabei seit: 16.12.2020
Mitteilungen: 103
 Beitrag No.53, eingetragen 2021-05-12 19:06    [Diesen Beitrag zitieren]

soll ich keinen Wert für k geben? als Beispiel um A^k und konditioszahl und Produkt und fehler zu rechnen?


zippy
Senior
Dabei seit: 24.10.2018
Mitteilungen: 2454
 Beitrag No.52, eingetragen 2021-05-12 18:57    [Diesen Beitrag zitieren]

Ich skizziere mal, was ich meinte:
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

[Die Antwort wurde nach Beitrag No.50 begonnen.]


s-amalgh
Aktiv
Dabei seit: 16.12.2020
Mitteilungen: 103
 Beitrag No.51, eingetragen 2021-05-12 18:56    [Diesen Beitrag zitieren]

Könntest du mir bitte das schreiben? ich wäre dankbar
Danke im Voraus!


s-amalgh
Aktiv
Dabei seit: 16.12.2020
Mitteilungen: 103
 Beitrag No.50, eingetragen 2021-05-12 18:31    [Diesen Beitrag zitieren]

meinst du dass ich noch eine andere Funktion schreiben?


zippy
Senior
Dabei seit: 24.10.2018
Mitteilungen: 2454
 Beitrag No.49, eingetragen 2021-05-12 18:30    [Diesen Beitrag zitieren]

2021-05-12 18:28 - s-amalgh in Beitrag No. 48 schreibt:
ja aber ich muss es für alle k von 1 bis 35 für halblogarithmischen Plot

Du kannst ja diese Funktion für $k$ von 1 bis 35 aufrufen.


s-amalgh
Aktiv
Dabei seit: 16.12.2020
Mitteilungen: 103
 Beitrag No.48, eingetragen 2021-05-12 18:28    [Diesen Beitrag zitieren]

"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



zippy
Senior
Dabei seit: 24.10.2018
Mitteilungen: 2454
 Beitrag No.47, eingetragen 2021-05-12 18:26    [Diesen Beitrag zitieren]

2021-05-12 18:22 - s-amalgh in Beitrag No. 44 schreibt:
ich habe k= 3 geschcrieben

Danach berechnest du ihn aber für alle $k$ von 1 bis 35.


s-amalgh
Aktiv
Dabei seit: 16.12.2020
Mitteilungen: 103
 Beitrag No.46, eingetragen 2021-05-12 18:24    [Diesen Beitrag zitieren]

"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?


zippy
Senior
Dabei seit: 24.10.2018
Mitteilungen: 2454
 Beitrag No.45, eingetragen 2021-05-12 18:23    [Diesen Beitrag zitieren]

2021-05-12 18:19 - Buri in Beitrag No. 43 schreibt:
ich befürchte, dass Matlab die Matrixpotenz Ak nicht wie gewünscht berechnet.

Das ist Unsinn, du verwechselst "^" und ".^":
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


[Die Antwort wurde nach Beitrag No.43 begonnen.]


s-amalgh
Aktiv
Dabei seit: 16.12.2020
Mitteilungen: 103
 Beitrag No.44, eingetragen 2021-05-12 18:22    [Diesen Beitrag zitieren]

"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?




Buri
Senior
Dabei seit: 02.08.2003
Mitteilungen: 46406
Wohnort: Dresden

 Beitrag No.43, eingetragen 2021-05-12 18:19    [Diesen Beitrag zitieren]

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 fed-Code einblenden feststellen, die elementweise Potenz wäre fed-Code einblenden , während die Matrixpotenz gleich fed-Code einblenden ist.
Glücklicherweise wird die Matrixpotenz von Matlab durch Ak richtig berechnet, siehe Beitrag #45.
Gruß Buri


zippy
Senior
Dabei seit: 24.10.2018
Mitteilungen: 2454
 Beitrag No.42, eingetragen 2021-05-12 18:15    [Diesen Beitrag zitieren]

2021-05-12 18:06 - s-amalgh in Beitrag No. 41 schreibt:
Jetzt ist so wie du gemeint hast oder?

Nein, die Funktion berechnet ja immer noch etwas anderes als den relativen Fehler für dieses $k$.

2021-05-12 18:06 - s-amalgh in Beitrag No. 41 schreibt:
Wofür benutzt man [x]

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").


s-amalgh
Aktiv
Dabei seit: 16.12.2020
Mitteilungen: 103
 Beitrag No.41, eingetragen 2021-05-12 18:06    [Diesen Beitrag zitieren]

Jetzt ist so wie du gemeint hast oder?
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
 


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!


zippy
Senior
Dabei seit: 24.10.2018
Mitteilungen: 2454
 Beitrag No.40, eingetragen 2021-05-12 17:56    [Diesen Beitrag zitieren]

2021-05-12 17:40 - s-amalgh in Beitrag No. 39 schreibt:
du meintest vielleicht die Funktion Konditionszahl weil relativen_fehler hat nur for schleife

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:

2021-05-11 01:37 - zippy in Beitrag No. 31 schreibt:
2. Eine Funktion von $k$ zur Berechnung des relativen Fehlers.

Aber du musst meinen Vorschlag nicht umsetzen. Es ist ja nur ein Vorschlag.


s-amalgh
Aktiv
Dabei seit: 16.12.2020
Mitteilungen: 103
 Beitrag No.39, eingetragen 2021-05-12 17:40    [Diesen Beitrag zitieren]

du meintest vielleicht die Funktion Konditionszahl weil relativen_fehler hat nur for schleife
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
 


ich habe das jetzt wieder geändert. richtig jetzt?


zippy
Senior
Dabei seit: 24.10.2018
Mitteilungen: 2454
 Beitrag No.38, eingetragen 2021-05-12 17:33    [Diesen Beitrag zitieren]

2021-05-12 16:59 - s-amalgh in Beitrag No. 37 schreibt:
So meinst du das oder habe ich dich falsch verstanden?

Nein, so meinte ich das nicht. Deine Funktion relativen_fehler hat doch beispielsweise keine dieser beiden Eigenschaften:

2021-05-12 07:45 - zippy in Beitrag No. 36 schreibt:
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.


s-amalgh
Aktiv
Dabei seit: 16.12.2020
Mitteilungen: 103
 Beitrag No.37, eingetragen 2021-05-12 16:59    [Diesen Beitrag zitieren]

Ich habe jetzt meinen Code geändert
könntest du bitte einen Blick darauf werfen?
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
 



So meinst du das oder habe ich dich falsch verstanden?


zippy
Senior
Dabei seit: 24.10.2018
Mitteilungen: 2454
 Beitrag No.36, eingetragen 2021-05-12 07:45    [Diesen Beitrag zitieren]

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.


s-amalgh
Aktiv
Dabei seit: 16.12.2020
Mitteilungen: 103
 Beitrag No.35, eingetragen 2021-05-12 05:25    [Diesen Beitrag zitieren]

- 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!


Delastelle
Senior
Dabei seit: 17.11.2006
Mitteilungen: 1711
 Beitrag No.34, eingetragen 2021-05-12 00:52    [Diesen Beitrag zitieren]

Hallo,

ich habe bei Matlab-Funktionen bisher immer so gearbeitet
(Eventuell geht es auch anders):
Hauptprogramm.m
for i = 1:10
fib(i)
end
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 
Viele Grüße
Ronald


s-amalgh
Aktiv
Dabei seit: 16.12.2020
Mitteilungen: 103
 Beitrag No.33, eingetragen 2021-05-11 07:28    [Diesen Beitrag zitieren]

Entspricht mein Code der Aufgabenstellung oder fehlt noch was ?
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



und das ist das Plot :


s-amalgh
Aktiv
Dabei seit: 16.12.2020
Mitteilungen: 103
 Beitrag No.32, eingetragen 2021-05-11 02:18    [Diesen Beitrag zitieren]

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)) ?


zippy
Senior
Dabei seit: 24.10.2018
Mitteilungen: 2454
 Beitrag No.31, eingetragen 2021-05-11 01:37    [Diesen Beitrag zitieren]

2021-05-11 01:28 - s-amalgh in Beitrag No. 30 schreibt:
Soll ich die erste For -Schleife in meinem Code löschen und alles in einer For-schleife schreiben wie du gemacht hast oder nicht?

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.


s-amalgh
Aktiv
Dabei seit: 16.12.2020
Mitteilungen: 103
 Beitrag No.30, eingetragen 2021-05-11 01:28    [Diesen Beitrag zitieren]

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.]


Delastelle
Senior
Dabei seit: 17.11.2006
Mitteilungen: 1711
 Beitrag No.29, eingetragen 2021-05-11 01:20    [Diesen Beitrag zitieren]

Hallo,

eine Ergänzung:
ich kam bei A^35 auf
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

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


zippy
Senior
Dabei seit: 24.10.2018
Mitteilungen: 2454
 Beitrag No.28, eingetragen 2021-05-11 01:11    [Diesen Beitrag zitieren]

2021-05-11 00:30 - s-amalgh in Beitrag No. 26 schreibt:
Denkst du ist das richtig?

Nein, das sieht nicht richtig aus.

2021-05-11 00:32 - s-amalgh in Beitrag No. 27 schreibt:
Das ist mein Code

Du bist beim Aufruf von semilogy nicht diesem Hinweis gefolgt:

2021-05-10 17:59 - zippy in Beitrag No. 19 schreibt:
Schau in die Doku zu semilogy. Das "Plot Multiple Lines"-Beispiel passt zu deiner Aufgabe.

Wenn du semilogy so aufrufst, wie oben beschrieben...
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)

... sieht der Plot so aus:



s-amalgh
Aktiv
Dabei seit: 16.12.2020
Mitteilungen: 103
 Beitrag No.27, eingetragen 2021-05-11 00:32    [Diesen Beitrag zitieren]

Das ist mein Code :


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


s-amalgh
Aktiv
Dabei seit: 16.12.2020
Mitteilungen: 103
 Beitrag No.26, eingetragen 2021-05-11 00:30    [Diesen Beitrag zitieren]




Denkst du ist das richtig?


zippy
Senior
Dabei seit: 24.10.2018
Mitteilungen: 2454
 Beitrag No.25, eingetragen 2021-05-11 00:19    [Diesen Beitrag zitieren]

2021-05-11 00:06 - s-amalgh in Beitrag No. 24 schreibt:
wenn ja wie kann ich das machen?  

Völlig analog dazu, wie du es für die Konditionszahl im Startbeitrag gemacht hast.


s-amalgh
Aktiv
Dabei seit: 16.12.2020
Mitteilungen: 103
 Beitrag No.24, eingetragen 2021-05-11 00:06    [Diesen Beitrag zitieren]

"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?  


zippy
Senior
Dabei seit: 24.10.2018
Mitteilungen: 2454
 Beitrag No.23, eingetragen 2021-05-10 19:39    [Diesen Beitrag zitieren]

2021-05-10 18:56 - s-amalgh in Beitrag No. 22 schreibt:
soll k = 1,2,….. oder k = 1,2,……,35 ?

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$.


s-amalgh
Aktiv
Dabei seit: 16.12.2020
Mitteilungen: 103
 Beitrag No.22, eingetragen 2021-05-10 18:56    [Diesen Beitrag zitieren]

Eine Frage ist mir jetzt aufgefallen und zwar soll k = 1,2,….. oder k = 1,2,……,35 ?


zippy
Senior
Dabei seit: 24.10.2018
Mitteilungen: 2454
 Beitrag No.21, eingetragen 2021-05-10 18:44    [Diesen Beitrag zitieren]

2021-05-10 18:21 - s-amalgh in Beitrag No. 20 schreibt:
Was sollte auf der x-Achse sein und was sollte auf der y-Achse sein?

Machs wie in deinem Beitrag Nr. 4.


s-amalgh
Aktiv
Dabei seit: 16.12.2020
Mitteilungen: 103
 Beitrag No.20, eingetragen 2021-05-10 18:21    [Diesen Beitrag zitieren]

Was sollte auf der x-Achse sein und was sollte auf der y-Achse sein?


zippy
Senior
Dabei seit: 24.10.2018
Mitteilungen: 2454
 Beitrag No.19, eingetragen 2021-05-10 17:59    [Diesen Beitrag zitieren]

2021-05-10 17:50 - s-amalgh in Beitrag No. 18 schreibt:
wie kann ich die relativen Fehler mit dem Produkt in einem halblogarithmischen Plot darstellen ?

Schau in die Doku zu semilogy. Das "Plot Multiple Lines"-Beispiel passt zu deiner Aufgabe.


s-amalgh
Aktiv
Dabei seit: 16.12.2020
Mitteilungen: 103
 Beitrag No.18, eingetragen 2021-05-10 17:50    [Diesen Beitrag zitieren]

Danke :)
Letzte Frage: wie kann ich die relativen Fehler mit dem Produkt in einem halblogarithmischen Plot darstellen ?


zippy
Senior
Dabei seit: 24.10.2018
Mitteilungen: 2454
 Beitrag No.17, eingetragen 2021-05-10 17:43    [Diesen Beitrag zitieren]

Du musst dir nicht jeden noch so kleinen Schritt hier bestätigen lassen.

2021-05-10 17:04 - s-amalgh in Beitrag No. 16 schreibt:
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?

Diese Rechnung benötigst du erst in b).

2021-05-10 17:04 - s-amalgh in Beitrag No. 16 schreibt:
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

Ja, das würde ich auch unter dem relativen Fehler verstehen.

2021-05-10 17:04 - s-amalgh in Beitrag No. 16 schreibt:
produkt = c*eps

soll ich das Produkt so berechnen oder ist eps falsch?

Wenn du dir nicht sicher bist, solltest du die Doku zu eps anschauen.


s-amalgh
Aktiv
Dabei seit: 16.12.2020
Mitteilungen: 103
 Beitrag No.16, eingetragen 2021-05-10 17:04    [Diesen Beitrag zitieren]

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."

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?

Ja. Dass du die euklidische Norm verwenden sollst, steht in der Aufgabenstellung.
 

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

So ist es.

c = cond(A^k)
produkt = c*eps

soll ich das Produkt so berechnen oder ist eps falsch?



Danke im Voraus für deine Antwort! :)


zippy
Senior
Dabei seit: 24.10.2018
Mitteilungen: 2454
 Beitrag No.15, eingetragen 2021-05-10 16:41    [Diesen Beitrag zitieren]

2021-05-10 15:56 - s-amalgh in Beitrag No. 14 schreibt:
Weil bei b) steht dass ich die lineare Gleichungssystem mit “ mldivide”  lösen soll.

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."

2021-05-10 15:56 - s-amalgh in Beitrag No. 14 schreibt:
aber ich bin mir nicht sicher ob mein Plot richtig aussieht .

Er sieht erstmal plausibel aus. Wenn du dir nicht sicher bist, rechne einfach ein paar wenige Punkte von Hand nach.

2021-05-10 15:56 - s-amalgh in Beitrag No. 14 schreibt:
Wie vergleiche ich das? Mit norm( x - x^) oder wie meinst du das?

Ja. Dass du die euklidische Norm verwenden sollst, steht in der Aufgabenstellung.

2021-05-10 15:56 - s-amalgh in Beitrag No. 14 schreibt:
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?

So ist es.


s-amalgh
Aktiv
Dabei seit: 16.12.2020
Mitteilungen: 103
 Beitrag No.14, eingetragen 2021-05-10 15:56    [Diesen Beitrag zitieren]

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! :)


zippy
Senior
Dabei seit: 24.10.2018
Mitteilungen: 2454
 Beitrag No.13, eingetragen 2021-05-10 09:39    [Diesen Beitrag zitieren]

2021-05-10 02:56 - s-amalgh in Beitrag No. 12 schreibt:
bedeuten beide gleich?

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.


s-amalgh
Aktiv
Dabei seit: 16.12.2020
Mitteilungen: 103
 Beitrag No.12, eingetragen 2021-05-10 02:56    [Diesen Beitrag zitieren]

"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?


Delastelle
Senior
Dabei seit: 17.11.2006
Mitteilungen: 1711
 Beitrag No.11, eingetragen 2021-05-10 02:48    [Diesen Beitrag zitieren]

Hallo,

mir fällt da ein:
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
 
>>
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


s-amalgh
Aktiv
Dabei seit: 16.12.2020
Mitteilungen: 103
 Beitrag No.10, eingetragen 2021-05-10 02:30    [Diesen Beitrag zitieren]

"Funktion, welches die Gleichungssysteme in Abhängigkeit von k aufstellt "

bedeutet das dass die Funktion die Gleichungssysteme lösen soll oder wie?


Delastelle
Senior
Dabei seit: 17.11.2006
Mitteilungen: 1711
 Beitrag No.9, eingetragen 2021-05-10 02:26    [Diesen Beitrag zitieren]

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


s-amalgh
Aktiv
Dabei seit: 16.12.2020
Mitteilungen: 103
 Beitrag No.8, eingetragen 2021-05-10 02:21    [Diesen Beitrag zitieren]

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..


Delastelle
Senior
Dabei seit: 17.11.2006
Mitteilungen: 1711
 Beitrag No.7, eingetragen 2021-05-10 02:20    [Diesen Beitrag zitieren]

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


s-amalgh
Aktiv
Dabei seit: 16.12.2020
Mitteilungen: 103
 Beitrag No.6, eingetragen 2021-05-10 02:13    [Diesen Beitrag zitieren]

kann man also cond(A^k) nicht so schreiben?
was ist p ? ich habe nicht so gut verstanden


Delastelle
Senior
Dabei seit: 17.11.2006
Mitteilungen: 1711
 Beitrag No.5, eingetragen 2021-05-10 02:02    [Diesen Beitrag zitieren]

Hallo,

Zur Konditionszahl in Octave (kostenlos - ähnlich zu Matlab) fand ich foldendes:
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.
Eventuell sieht man auch etwas zur Kondition wenn man sich einmal eine höhere Potenz der Matrix ausdruckt(anzeigt)!

Viele Grüße
Ronald


s-amalgh
Aktiv
Dabei seit: 16.12.2020
Mitteilungen: 103
 Beitrag No.4, eingetragen 2021-05-09 02:22    [Diesen Beitrag zitieren]

mein Plot sieht so aus




Denkst du ist das richtig?


Delastelle
Senior
Dabei seit: 17.11.2006
Mitteilungen: 1711
 Beitrag No.3, eingetragen 2021-05-09 02:17    [Diesen Beitrag zitieren]

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...


s-amalgh
Aktiv
Dabei seit: 16.12.2020
Mitteilungen: 103
 Beitrag No.2, eingetragen 2021-05-09 02:13    [Diesen Beitrag zitieren]

Danke erstmal für deine Antwort!

ich weiß erstmal nicht ob ich richtig verstanden habe was die Aufgabe verlängt


Delastelle
Senior
Dabei seit: 17.11.2006
Mitteilungen: 1711
 Beitrag No.1, eingetragen 2021-05-09 01:59    [Diesen Beitrag zitieren]

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


s-amalgh
Aktiv
Dabei seit: 16.12.2020
Mitteilungen: 103
 Themenstart: 2021-05-07 17:03    [Diesen Beitrag zitieren]

Hallo zusammen, ich habe diese Aufgabe.




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?


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
 
 





Danke im Voraus! :)


 
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]