Diskussion:MINRES-Verfahren

aus Wikipedia, der freien Enzyklopädie

konkretes Beispiel

Ein konkretes Beispiel, etwa mit einer 3x3-Matix, wäre hilfreich. Insbesondere ist für mich die Berechnung der alpha- und beta-Werte unklar. --tsor (Diskussion) 12:33, 29. Mär. 2012 (CEST)

Hmm, ich weiß nicht, in wie weit eine 3x3-Matrix als Beispiel helfen würde. Es ist ja kein direkter Löser, sondern ein iterativer, der einen linearen Operator auf iterierte Vektoren, so anwendet, dass in jedem Schritt das Residuum minimiert wird. Warum gerade diese alpha/beta-Werte zusammen mit den Abstiegsrichtungen das Residuum minimieren, ist natürlich nicht so einfach zu verstehen, aber die komplette Herleitung gehört wohl auch kaum hierher. In den angegebenen Quellen steht es natürlich. --Stweller (Diskussion) 06:24, 5. Apr. 2012 (CEST)

Völliger Quatsch

Der vorgestellte Algorithmus ist keine Implementierung von MINRES, zumindest kein Algorithmus welcher die Norm des Residuums für beliebige symmetrische (reguläre) Matrizen minimiert. Zwar wird ein Lanczos-Prozess durchgeführt, aber die Auswahl des Skalars $\alpha$ realisiert nicht das Minimum über dem Krylow-Raum. Dazu müssten die Suchrichtungen konjugiert bzgl. der Matriz sein, was hier nicht der Fall ist. --131.220.132.179 19:05, 8. Feb. 2013 (CET)

Nachtrag: Eine korrekte Fassung des Algorithmus findet sich in der PhD-Thesis von Sou-Cheng Choi von 2006, "ITERATIVE METHODS FOR SINGULAR LINEAR EQUATIONS AND LEAST-SQUARES PROBLEMS", Table 2.11. Dort wird auch deutlich, dass zur Berechnung der Lösung eine fortlaufende QR-Zerlegung notwendig ist, und eben nicht so ein Quatsch wie in diesem Artikel. --131.220.132.179 19:12, 8. Feb. 2013 (CET)

Sofern ich das beurteilen kann - und ich arbeite mit diesem Verfahren und schreibe Veröffentlichungen darüber - funktioniert die hier angegebene Modified-Gram-Schmidt-Variante und ist durchaus so üblich. Zur Notation (untenstehende Bemerkung): Ob man jetzt die Vektoren z statt s und d statt p nennt, oder v und u benutzt, halte ich für den Informationsgehalt nicht wichtig. (nicht signierter Beitrag von 84.62.86.86 (Diskussion) 10:27, 28. Aug. 2015 (CEST))

Der Verfahren scheint eine Variante von "Conjugate Residual", der mathematisch das selben Ergebnis als MINRES gibt. Ich habe es auf Octave getestet, und es scheint sehr gut zu funktionieren. Der Titel des Artikels sollte vielleicht mehr "Conjugate Residual" sein... (nicht signierter Beitrag von 138.231.127.2 (Diskussion) 15:12, 3. Okt. 2016 (CEST))

Wie wäre es mit einer Herleitung

Hier findet man eine : http://lp.uni-goettingen.de/get/text/2022 übrigens auch mit der literaturüblichen Benennung. und hier ist dann die Offenbarung des "Tricks": http://books.google.de/books?id=Y3VdWoQgIMgC&pg=PA239&lpg=PA239&dq=minres+herleitung&source=bl&ots=AcMPZr9Haq&sig=ktWoBeB2LAyzY2p_kSwws1TLt8U&hl=de&sa=X&ei=AOSDUvuKCZHAswbdnoDwCQ&ved=0CDYQ6AEwAQ#v=onepage&q=minres%20herleitung&f=false (nicht signierter Beitrag von 188.101.6.184 (Diskussion) 22:21, 13. Nov. 2013 (CET))

Residuum als neue Ansatzrichtung ist robuster

Hallo zusammen,

ich möchte einen anderen Vorschlag für die Implementation machen. Es ist so, dass die Kurzterm-Orthogonalisierung auch dann greift, wenn in jeder Iteration das aktuelle Residuum als neue Korrekturrichtung für die Näherungslösung x benutzt wird. D.h. p0 = r anstatt p0 = s1. Dieser Ansatz stellt sich als robuster heraus, weil kein Rundungsfehler-verursachter Wiederanstieg des Residuums auftritt; bei dem bisherigen Implementationsvorschlag jedoch schon.

Mein Vorschlag findet sich unten und kann natürlich 1:1 verwendet werden.

function [x,r] = MINRES(A,b,x0,m)

   if(x0 == 0)
       x   = 0*b;
   else
       x   = x0;
   end
       
   r   = b - A * x;
   
   n   = size(A,1);
   U   = zeros(n,2);
   V   = U;
   
   V_all = [];
   
   ITER    = 0;
   NORM    = norm(r);
   
   for i=1:m
      
       v       = A * r;
       
       gamm    = V' * v;
       v       = v - V * gamm;
       u       = r - U * gamm;
       
       len     = norm(v);
       v       = v / len;
       u       = u / len;
       
       chi     = v'*r;
       r       = r - chi * v;
       x       = x + chi * u;
       
       U       = [U(:,2),u];
       V       = [V(:,2),v];
       
       V_all   = [V_all,v];
       
       ITER    = [ ITER , i        ];
       NORM    = [ NORM , norm(b-A*x)  ];
       
   end
   cond_V_all = cond(V_all)
   
   
   semilogy(ITER,NORM/norm(b));

end (nicht signierter Beitrag von 92.72.193.170 (Diskussion) 19:57, 3. Sep. 2015 (CEST))

Gibt es dafür auch eine Quelle? Der gegenwärtige Artikel ist ein Kuddelmuddel aus verschiedenen Algorithmen ohne Quellenangaben. Ohne Literaturangaben wird as hier nix. --87.177.155.28 14:58, 1. Sep. 2020 (CEST)