Algo. Zeilensummenkriterium < Lin. Gleich.-systeme < Numerik < Hochschule < Mathe < Vorhilfe
|
Aufgabe | Gegeben ist eine [m]n \times n[/m] Matrix [m]A[/m].
Formulieren Sie einen Algorithmus (sodass man daraus direkt ein Programm in einer Programmiersprache erstellen könnte) mit der folgenden Anforderung: Eingabe ist [m]A[/m] .
Ausgabe ist: "Zeilensummenkriterium erfüllt mit [m]\lambda = ... [/m]" oder "Zeilensummenkriterium nicht erfüllt mit [m]\lambda = ...[/m]".
Anstelle von [m]...[/m] ist natürlich der berechnete Wert auszugeben. |
Hallo zusammen.
Das Zeilensummenkriterium lautet ja wie folgt:
[m] \summe_{i=1, j \not= i}^{n} \left| a_{ij} \right| < \left| a_{ii} \right| [/m]
Hier mein Vorschlag:
Eingabeparameter ist die Matrix A.
Prüfe ob Matrix A quadratisch ist (z.B. in MATLAB)
[n m] = size(A)
if (n == m)
fahre fort...
else
Fehlerausgabe und Abbruch
for i = 1:n
for j = i+1:n
if [mm] (sum(abs(a_{ij})) [/mm] < [mm] sum(abs(a_{ii}))
[/mm]
disp('Zeilensummenkriterium erfüllt mit [m]\lambda[/m] = [mm] max(abs(a_{ij}/a_{ii})
[/mm]
else
disp('Zeilensummenkriterium nicht erfüllt mit [m]\lambda[/m] = [mm] max(abs(a_{ij}/a_{ii})
[/mm]
in Worten:
Prüfe ob die eingegebene Matrix A quadratisch ja;
Wenn ja, dann fahre fort
Wenn nein, dann Abbruch
Äußere Schleife für Zeilen (for i = 1:n) // innere Schleife für Spalten (for j = i+1:n)
Zeilensummenkriterium:
Die zeilenweise Summe der Absolutbeträge (ausgenommen Diagonalelement) müssen kleiner sein als der Absolutbetrag des Diagonalenelements.
Wenn das zutrifft, dann bestimme das betragsmäßig größte Element aus den Brüchen und lege es in [mm] \lambda [/mm] ab
(Zähler: zeilenweise Summe der Beträge der Matrixelemente (außer Diagonalelement) / Nenner: Beträge der Diagonalenelemente)
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 15:40 So 06.07.2014 | Autor: | DieAcht |
Hallo,
> Gegeben ist eine [m]n \times n[/m] Matrix [m]A[/m].
>
> Formulieren Sie einen Algorithmus (sodass man daraus direkt
> ein Programm in einer Programmiersprache erstellen könnte)
> mit der folgenden Anforderung: Eingabe ist [m]A[/m] .
>
> Ausgabe ist: "Zeilensummenkriterium erfüllt mit [m]\lambda = ... [/m]"
> oder "Zeilensummenkriterium nicht erfüllt mit [m]\lambda = ...[/m]".
>
> Anstelle von [m]...[/m] ist natürlich der berechnete Wert
> auszugeben.
> Hallo zusammen.
>
> Das Zeilensummenkriterium lautet ja wie folgt:
>
> [m]\summe_{i=1, j \not= i}^{n} \left| a_{ij} \right| < \left| a_{ii} \right|[/m]
>
>
> Hier mein Vorschlag:
>
> Eingabeparameter ist die Matrix A.
>
> Prüfe ob Matrix A quadratisch ist (z.B. in MATLAB)
> [n m] = size(A)
>
> if (n == m)
> fahre fort...
> else
> Fehlerausgabe und Abbruch
Man merkt, dass du wohl noch nie programmiert hast. Pseudocode:
1: | IF n!=m
| 2: | Fehlermeldung
| 3: | ELSE
| 4: | Algorithmus
|
Außerdem ist nach Voraussetzung eine quadratische Matrix
gegeben, sodass du dir das auch sparen kannst.
> for i = 1:n
> for j = i+1:n
Du gehst hier nur die Elemente rechts von der Diagonale durch.
Du musst immer alle durchgehen und die Elemente nur dann
addieren, wenn [mm] i\not=j [/mm] ist.
> if [mm](sum(abs(a_{ij}))[/mm] < [mm]sum(abs(a_{ii}))[/mm]
Das versteht doch niemand und vor Allem ist es falsch.
Was soll die sum(abs(a_{ii})) sein? [mm] |a_{ii}| [/mm] ist doch fest!
Lies oben nochmal dein Zeilensummenkriterium.
> disp('Zeilensummenkriterium erfüllt mit
> [m]\lambda[/m] = [mm]max(abs(a_{ij}/a_{ii})[/mm]
> else
> disp('Zeilensummenkriterium nicht erfüllt mit
> [m]\lambda[/m] = [mm]max(abs(a_{ij}/a_{ii})[/mm]
Soll das ein Mischmasch von Pseudocode und Matlab sein?
Es sieht wirklich sehr schlimm aus so. Ich empfehle dir
wirklich das selbst zu programmieren, damit du auch ein
Gefühl dafür bekommst.
Gruß
DieAcht
|
|
|
|
|
Das Problem ist, es gibt wirklich keine Vorgabe, wie das Ganze dargestellt bzw. gelöst werden soll. Das war jetzt nur ein Vorschlag meinerseits.
Wie würdest Du machen?! Ich habe mich jetzt nochmal damit beschäftigt, komme aber nicht drauf...?!
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 16:08 So 06.07.2014 | Autor: | DieAcht |
> Das Problem ist, es gibt wirklich keine Vorgabe, wie das
> Ganze dargestellt bzw. gelöst werden soll. Das war jetzt
> nur ein Vorschlag meinerseits.
Ihr sollt einen Pseudocode schreiben.
> Wie würdest Du machen?! Ich habe mich jetzt nochmal damit
> beschäftigt, komme aber nicht drauf...?!
Ich schätze, dass das eine Übung zum Programmieren sein soll,
sodass wohl zwei Schleifen erwartet werden. Ansonsten geht
das natürlich mit geschickter Benutzung der Norm ganz einfach.
1) Alle Elemente durchgehen und für [mm] i\not=j [/mm] addieren wir sum=sum+abs(a_{i,j}).
2) Falls sum>=abs(a_{ii}) Fehlermeldung und Abbruch.
3) Falls die Schleife durchgeht, dann haben wir gewonnen.
|
|
|
|