matheraum.de
Raum für Mathematik
Offene Informations- und Nachhilfegemeinschaft

Für Schüler, Studenten, Lehrer, Mathematik-Interessierte.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Schulmathe
  Status Primarstufe
  Status Mathe Klassen 5-7
  Status Mathe Klassen 8-10
  Status Oberstufenmathe
    Status Schul-Analysis
    Status Lin. Algebra/Vektor
    Status Stochastik
    Status Abivorbereitung
  Status Mathe-Wettbewerbe
    Status Bundeswettb. Mathe
    Status Deutsche MO
    Status Internationale MO
    Status MO andere Länder
    Status Känguru
  Status Sonstiges

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
StartseiteMatheForenUni-NumerikAuszug MatLab Programm
Foren für weitere Schulfächer findest Du auf www.vorhilfe.de z.B. Philosophie • Religion • Kunst • Musik • Sport • Pädagogik
Forum "Uni-Numerik" - Auszug MatLab Programm
Auszug MatLab Programm < Numerik < Hochschule < Mathe < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Uni-Numerik"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Auszug MatLab Programm: Tipp
Status: (Frage) reagiert/warte auf Reaktion Status 
Datum: 23:08 Mi 29.10.2014
Autor: Thenotebook

Habe hier einen Auszug aus einem MatLab-Programm und brauche dringend Hilfe!

[mm] \sourceon [/mm] MatLab
%"Eingabe der Matrix A und Vektor b"
[m,n] = size(A); % A ist quadratisch, also m=n
D = zeros(n,n);
for i = 1:n
D(i,i) = A(i,i);
end
x= ones(n,1);
resnorm = norm(A*x-b);
x = x - inv(D)*(A*x-b);
resnorm = norm(A*x-b);
end

[mm] \sourceoff [/mm]

Meine Frage:
Welches Problem soll hier mit welchem Verfahren gelöst werden?
Und wieso macht das Programm nur einen Schritt, wenn A eine Diagonalmatrix ist?



Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.

        
Bezug
Auszug MatLab Programm: Antwort
Status: (Antwort) fertig Status 
Datum: 10:02 Do 30.10.2014
Autor: Marcel

Hallo,

> Habe hier einen Auszug aus einem MatLab-Programm und
> brauche dringend Hilfe!
>  
> [mm]\sourceon[/mm] MatLab
>  %"Eingabe der Matrix A und Vektor b"
>  [m,n] = size(A); % A ist quadratisch, also m=n
>  D = zeros(n,n);
>  for i = 1:n
>  D(i,i) = A(i,i);
>  end
>  x= ones(n,1);
>  resnorm = norm(A*x-b);
>  x = x - inv(D)*(A*x-b);
>  resnorm = norm(A*x-b);
>  end
>  
> [mm]\sourceoff[/mm]

der Code ist doch nun nicht wirklich schwer zu durchschauen. Schreib' Dir
doch mal in mathematischen Formeln hin, was da gemacht wird. Vieles
steht ja schon quasi im Code drin... Bei manchen Sachen solltest Du vielleicht
eine Hilfsvariable mitführen...
  

> Meine Frage:
>  Welches Problem soll hier mit welchem Verfahren gelöst
> werden?

Das weiß ich jetzt auch nicht - mir stellt sich an dieser Stelle die Frage, woher
Du den Code hast, wenn Du selbst nicht weiß, wofür er gut ist. Aber wenn
Du obiges befolgst und Dir klargemacht hast, was der Code macht (da werden
mit den Diagonalelementen einer Matrix eine $n [mm] \times [/mm] n$-Matrix gebildet,
diese invertiert (was nicht besonders schwer ist), ...), dann guckst Du halt
nach numerischen Verfahren, wo man sowas macht... Dazu hast Du sicher
ein Skript zum Reingucken!

>  Und wieso macht das Programm nur einen Schritt, wenn A
> eine Diagonalmatrix ist?

Dazu kann man vielleicht mehr sagen, wenn Du mal nachguckst:
Das letzte

    end

hat gar keinen Bezug - da fehlt wohl etwas. (Innerhalb des Programms
gibt es noch ein "for i=1:n, ..., end", das ist okay, aber das allerletze "end"
steht alleine!)

Gruß,
  Marcel

Bezug
                
Bezug
Auszug MatLab Programm: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 11:40 Do 30.10.2014
Autor: Thenotebook

Im letzten Teil fehlte wirklich etwas:

x= ones(n,1);
resnorm = norm(A*x-b);
while resnorm > 10^-6
x = x - inv(D)*(A*x-b);
resnorm = norm(A*x-b);
end


Habe den Ausschnitt aus einer Altklausur...

Ist es einfach nur ein iteratives Verfahren (Jacobi oder Gauss-Seidel) zur Lösung des linearen Gleichungssystems Ax = b?
Ich war wohl gestern Abend zu müde, um das wirklich zu durchschauen.
Bin nicht wirklich fit in MatLab.

Und wieso es nur einen Schritt macht, wenn es eine Diagonalmatrix ist, müsste dann sein, weil es nach nur einem Schritt schon gelöst ist und resnorm=0.



Bezug
                        
Bezug
Auszug MatLab Programm: Antwort
Status: (Antwort) fertig Status 
Datum: 14:28 Do 30.10.2014
Autor: Marcel

Hallo,

> Im letzten Teil fehlte wirklich etwas:
>  
> x= ones(n,1);
> resnorm = norm(A*x-b);
> while resnorm > 10^-6
>  x = x - inv(D)*(A*x-b);
> resnorm = norm(A*x-b);
> end
>
>
> Habe den Ausschnitt aus einer Altklausur...
>  
> Ist es einfach nur ein iteratives Verfahren (Jacobi oder
> Gauss-Seidel) zur Lösung des linearen Gleichungssystems Ax
> = b?
>  Ich war wohl gestern Abend zu müde, um das wirklich zu
> durchschauen.
>  Bin nicht wirklich fit in MatLab.

Du kannst aber auf Matlab zugreifen? Ansonsten installiere Dir Octave,
die Befehle sind oft gleich bis ähnlich. Dann kannst Du entweder durch
eintippen eines Befehls rausfinden, was er macht, oder Du benutzt "help".
Bsp: help ones.
Ich sag' Dir jetzt mal, was da gemacht wird:
  

> Und wieso es nur einen Schritt macht, wenn es eine
> Diagonalmatrix ist, müsste dann sein, weil es nach nur
> einem Schritt schon gelöst ist und resnorm=0.

> [mm]\sourceon[/mm] MatLab
>  %"Eingabe der Matrix A und Vektor b"

Die Matrix A und den Vektor b solltest Du definieren, oder halt das Ganze
als Funktion schreiben

function Loese_irgendwas(A,b);
(Wichtig: Speichere das Programm als Loese_irgendwas.m ab!)

>  [m,n] = size(A); % A ist quadratisch, also m=n

m ist die Zeilenzahl, n ist die Spaltenzahl. (Man könnte auch m=size(A,1) und
n=size(A,2) schreiben).
Wenn A quadratisch sein muss, sollte man hier eigentlich eine Fehlermeldung
ausgeben, wenn eine fehlerhafte Eingabe stattfindet. Ebenso kann man
dann testen, ob length(b) zu m passt. (b muss so viele Komponenten haben,
wie A Zeilen hat - beachte: mit x aus [mm] $\IR^{n \times 1}$ [/mm] wird $A*x [mm] \in \IR^{m \times 1}$ [/mm] sein!)

>  D = zeros(n,n);

D ist die (quadratische) [mm] $n\times [/mm] n$-Nullmatrix.

>  for i = 1:n
>  D(i,i) = A(i,i);
>  end

D wird nun zu einer Diagonalmatrix gebaut - die Diagonalelemente von
D sind genau die von A.

> x= ones(n,1);

x ist ein $n [mm] \times [/mm] 1$-Spaltenvektor mit lauter 1en:

    [mm] $x=\vektor{1\\1\\.\\.\\.\\1} \in \IR^{n \times 1}$ [/mm]

> resnorm = norm(A*x-b);

Hier wird die euklidische Norm von $A*x-b [mm] \in \IR^{n \times 1}$ [/mm] berechnet und das
Ergebnis dann an resnorm zugewiesen!

> while resnorm > 10^-6

Solange [mm] $Ax-b\,$ [/mm] noch "von der Norm her zu groß ist" (Schwellwert [mm] $10^{-6}$ [/mm] - da
wird man durchaus noch ein wenig dran spielen können - beachte, dass es
aber eine Maschinengenauigkeit gibt):

>  x = x - inv(D)*(A*x-b);

Berechne [mm] $x-D^{-1}*(Ax-b)$ [/mm] und weise diesen Wert (Vektor) [mm] $x\,$ [/mm] zu.

> resnorm = norm(A*x-b);

resnorm wird entsprechend des neuen x aktualisiert.

> end
> [mm]\sourceoff[/mm]Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)



Wenn Du jetzt raussuchst, zu welchem Verfahren das passen könnte,
noch ein Hinweis:
Mit
    
    x=ones(n,1)

wird

    $A*x$

einen $m \times 1$ (hier ist aber eh m=n) Spaltenvektor bauen, wo in jeder
Komponente die entsprechende Zeilensumme von A steht.

D.h. ist $A=(a_{i,j})_{\substack{i=1,...,m\\j=1,...,n}$, so ist mit obigem x dann

    v:=Ax

gegeben durch

    $v=\vektor{\sum_{i=1}^n a_{\red{1},i}\\\sum_{i=1}^n a_{\red{2},i}\\.\\.\\.\\\sum_{i=1}^n a_{\red{m},i}}$

Bsp.:

    $A=\pmat{1, & 2, & 3 \\ 4, & 5, & 6}*\vektor{1\\1\\1}=\pmat{1+2+3\\4+5+6}=\vektor{6\\15}$

Und das rausfinden, welches Verfahren das ist/sein könnte, überlasse ich
weiterhin Dir. Denn irgendwas sollst Du auch tun. ^^

Gruß,
  Marcel

Bezug
                                
Bezug
Auszug MatLab Programm: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 15:58 Do 30.10.2014
Autor: Thenotebook

Was das "Programm tut" war mir klar. Auch ohne Eingabe in MatLab.

Es müsste das Jacobi-Verfahren sein.
Aber ich hatte dafür schon mal einen Code geschrieben und der sah eben ganz anders aus als dieser und war FÜR MICH um einiges übersichtlicher. Das liegt wohl im Auge des Betrachters.

Aber vor meiner Klausur werde ich mir nochmal die iterativen Verfahren anschauen müssen...

Bezug
                                        
Bezug
Auszug MatLab Programm: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 17:22 Do 30.10.2014
Autor: Marcel

Hallo,

> Was das "Programm tut" war mir klar. Auch ohne Eingabe in
> MatLab.

was denn nun? Vorhin hattest Du mir noch gesagt:

> Bin nicht wirklich fit in MatLab.

    
Das war Deine Reaktion auf meinen Hinweis, dass das Programm nicht
wirklich schwer zu durchschauen ist... Also: [haee]

> Es müsste das Jacobi-Verfahren sein.

[]http://de.wikipedia.org/wiki/Jacobi-Verfahren#Beschreibung_in_Matrixschreibweise

Und ja, ich denke das auch:

    []http://www.ma.tum.de/foswiki/pub/Ferienkurse/WiSe1011/MatLab/handouts4.pdf

>  Aber ich hatte dafür schon mal einen Code geschrieben und
> der sah eben ganz anders aus als dieser und war FÜR MICH
> um einiges übersichtlicher. Das liegt wohl im Auge des
> Betrachters.

Wenn Du einen eigenen Code hast, den Du besser verstehst, und sofern
beide Codes *stets* i.W. das gleiche Ergebnis liefern, ist es für Dich immer
am Sinnvollsten, Deinen zu verstehen.
Ausnahme: Wenn der andere Code wesentlich schneller läuft.
  

> Aber vor meiner Klausur werde ich mir nochmal die
> iterativen Verfahren anschauen müssen...

Wann schreibst Du die Klausur?

Und ja: Das Wichtigste ist, zu verstehen, wieso etwas funktioniert, denn
wenn man das verstanden hat, dann ist das Umsetzen nur noch eine
*Zeit-Sache*!

P.S. Ich bin mir allerdings nicht 100% sicher, ob da das Jacobi-Verfahren
richtig programmiert ist. Das muss ich mir nochmal in Ruhe angucken,
wenn ich die Zeit und Lust dafür finde. Oder es ist doch was anderes...

P.P.S. Ich habe mal gerade nochmal nachgeguckt, das Ganze sollte zum
Jacobi-Verfahren passen.

Gruß,
  Marcel

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Uni-Numerik"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.schulmatheforum.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]