www.matheraum.de
Das Matheforum.
Das Matheforum des MatheRaum.

Für Schüler, Studenten, Lehrer, Mathematik-Interessierte.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Mathe
  Status Schulmathe
    Status Primarstufe
    Status Mathe Klassen 5-7
    Status Mathe Klassen 8-10
    Status Oberstufenmathe
    Status Mathe-Wettbewerbe
    Status Sonstiges
  Status Hochschulmathe
    Status Uni-Analysis
    Status Uni-Lin. Algebra
    Status Algebra+Zahlentheo.
    Status Diskrete Mathematik
    Status Fachdidaktik
    Status Finanz+Versicherung
    Status Logik+Mengenlehre
    Status Numerik
    Status Uni-Stochastik
    Status Topologie+Geometrie
    Status Uni-Sonstiges
  Status Mathe-Vorkurse
    Status Organisatorisches
    Status Schule
    Status Universität
  Status Mathe-Software
    Status Derive
    Status DynaGeo
    Status FunkyPlot
    Status GeoGebra
    Status LaTeX
    Status Maple
    Status MathCad
    Status Mathematica
    Status Matlab
    Status Maxima
    Status MuPad
    Status Taschenrechner

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
Mathe-Seiten:Weitere Fächer:

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

Jacobi-Verfahren in matlab: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 20:22 So 13.05.2012
Autor: Katthi

Hallo Leute,

ich stehe wieder vor einem Problem in matlab. Ich soll für das Jacobi-Verfahren ein Programm programmieren und habe keine Ahnung wie ich es ans laufen kriege.
Habe mir mittlerweile etwas überlegt, wie es gehen sollte (habe das auch so im Internet gefunden)

function[x] = jac(A,b,N,xold,nmax) % N sei Dimension von b,
                                                          nmax Anzahl der Iterationsschritte

for n = 1:nmax
            for i = 1:N
                  x(i) = (b(i) - A(i,1:i-1)*xold(1:i-1)
                              - A(i,i+1:N)*xold(i+1:N))/A(i,i);
            end
          for i = 1:N
               xold(i) = x(i);
          end
end
x = x'

wenn ich diese function file jetzt in einem script file aufrufen will, in dem ich meine Werte für N, nmax, xold etc. eingebe, kommt immer der Fehler "not enough input arguments"
leider hilft mir die Hilfe von matlab überhaupt nicht weiter.
Meine Matrix A und den Vektor b habe ich jeweils in einer function file gespeichert. Hat jemand eine Idee, wie ich das hinbekomme??

Viele Grüße und schonmal Danke für eure Überlegungen!!
Katthi

        
Bezug
Jacobi-Verfahren in matlab: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 21:00 So 13.05.2012
Autor: wieschoo

Hi,

Wie rufst du die Funktion auf?
Es liegt der Fehler wohlmöglich beim Funktionsaufruf.

Bezug
                
Bezug
Jacobi-Verfahren in matlab: Frage (überfällig)
Status: (Frage) überfällig Status 
Datum: 21:04 So 13.05.2012
Autor: Katthi

naja also ich wollte das in einem script file machen.
habe zuerste meine Werte eingegeben, die ich benötige und dann wollte ich auf der Grundlage dieser Werte dann die function file mit dem jacobi-verfahren abrufen, also den namen der function eingeben.
Aber ich habe die Matrix und den Vektor in eigenen m-files gespeichert, greift er darauf richtig zu? (das macht mir am meisten Probleme mit den ganzen function files immer)



Bezug
                        
Bezug
Jacobi-Verfahren in matlab: Fälligkeit abgelaufen
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 21:20 Do 17.05.2012
Autor: matux

$MATUXTEXT(ueberfaellige_frage)
Bezug
        
Bezug
Jacobi-Verfahren in matlab: Antwort
Status: (Antwort) fertig Status 
Datum: 22:39 So 13.05.2012
Autor: wieschoo

Ich habe das jetzt eben mal ausprobiert. Deine Fehler tritt ein, weil du wahrscheinlich überhaupt kein Argument an die Funktion gibst. Es reicht nicht die Variablen A,b,... im Workspace zu haben. Du musst sie der Funktion übergeben.

Statt jac() musst du jac(eye(5),ones(5,1),5,zeros(5,1),10) (natürlich mit deinen Werten) schreiben.

Das sagt aber auch die Fehlermeldung
"not enough input arguments"

Kann auch sein, dass du ein Argument übersehen hast.

Schreib einfach:
A=[ was auch immer];
b= ...
N=...
xold=...
nmax=...
jac(A,b,N,xold,nmax)

Bezug
                
Bezug
Jacobi-Verfahren in matlab: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 14:43 Mo 14.05.2012
Autor: Katthi

Heyhey,

erstmal danke für deine Hilfe, aber es funktioniert trotzdem nicht. ich gebe mal eben meine Aufgabenstellung vielleicht muss ich auch ganz anders an die Sache rangehen:

Schreiben Sie ein Programm, dass zur eingegebenen Matrix A und rechter Seite b die Lösung des linearen Gleichungssystems Ax = b mittels
(i) Gauß-Seidel-Verfahren
(ii) Jacobi-Verfahren
berechnet und bei dem das verwendete Verfahren vom Benutzer gewählt werden kann (der Benutzer soll dafür nicht auf den Programmcode zugreifen müssen).
Benutzen Sie dazu die Hilfsroutinen triu, tril und diag, die bereits in matlab
und octave implementiert sind.


Also das heißt ja, dass ich das Jacobi-Verfahren ja sowieso erstmal durch D, L und R ausdrücken muss, wobei A=D+L+R (D=diagonale, L=untere dreiecksmatrix ohne Diagonale und R= obere Dreiecksmatrix ohne Diagonale).
Aber wenn ich doch meine Jacobi und nachher das Gauß-Seidel-Verfahren als function haben will, dann steht da doch nicht in der function file selber die Matrix drin? Kann ich nicht für die Matrix A eine eigene function file machen, die dann auch A nennen, sodass sobald ich A eingebe der weiß, wie die Matrix A aussieht? (ich hoffe du weißt, was ich meine)

Und wie mache ich das denn, dass der Benutzer das auswählen kann? irgendwie müsste es dich gehen, dass ich das so programmiere, dass das Programm mich fragt, was ich machen möchte, so in der art, dass ich dann eingebe jac oder gs, je nachdem was ich will??

Viele Grüße
Katthi


Bezug
                        
Bezug
Jacobi-Verfahren in matlab: einfaches Beispiel
Status: (Antwort) fertig Status 
Datum: 16:01 Mo 14.05.2012
Autor: wieschoo

Ich hoffe auch, dass ich weiß, was du meinst.

analoge triviale Beispielaufgabe zum verdeutlichen:

Aufgabe
Schreiben Sie ein Programm, welches zwei Zahlen auf zwei Arten addiert.



Datei:main.m
% dieses M-File ruft eigene Funktionen auf
summand1 = input('erster Summand=');
summand2 = input('zweiter Summand=');
% erste Funktion "meineaddition1" aufrufen
meineaddition1(summand1,summand2)
% zweite Funktion "meineaddition2" aufrufen
meineaddition2(summand1,summand2)
-------------------------------------------------------
Datei:meineaddition1.m
function y=meineaddition1(a,b)
y=a+b;
end
-------------------------------------------------------
Datei:meineaddition2.m
function y=meineaddition1(a,b)
y=a+b+4-3-1;
end
-------------------------------------------------------


Zu deiner Aufgabe

Du kannst dir ein neues M-File (Blank M-File, Endung .m) anlegen mit folgendem Inhalt
"
meinA=[...];
meinb=[...];
meinN=[...];
meinxold=[...];
meinnmax=[...];
"
und speicherst dieses als "meinedaten.m" ab.
Tippst du dann "meinedaten" ins "Command Window" (da wo die Befehle hineinkommen), so werden die Matrix "meinA" und und die anderen Variablenerstellt.

Jetzt hast du ja dein "jac.m" (Function M-File). Somit kannst du deine Funktion jac wie folgt aufrufen:
"jac(meinA,meinb,meinN,meinxold,meinnmax)"

Du würdest also 3 Dateien benötigen:
- jac.m  (für Jacobi-Vefahren)
- gsv.m  (für Gauß-Seidel-Verfahren, kann natürlich auch anderen Namen haben)
- meineDaten.m

Dein Problem ist, dass du bestimmt irgendwo mal die Matrix A erstellt hast, die Funktion die Matrix A aber explizit beim Aufruf benötigt.

Falls es wirklich nicht geht, schreib mach ich dir ein Zip-Archiv.

Bezug
                                
Bezug
Jacobi-Verfahren in matlab: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 16:18 Mo 14.05.2012
Autor: Katthi

oka, also die files habe ich erstellt und die Variablen wurden erstellt, somit wird das Programm jetzt doch immer, sobald ich meinA eingebe auch die Matrix ausgeben, solange ich im selbern Ordner bleibe oder?

Gut nur es scheint, als hätte ich einen Fehler bei meinem verfahren. Ich soll ja diese Hilfsroutinen verwenden, die mir obere und untere Dreiecksmatrizen von meiner Matrix A geben. in der Vorlesung haben wir das Verfahren also jeweils komponentenweise und in Matrixform (mit D L R) aufgestellt und in einer Übung haben wir die Äquivalenz gezeigt. Aber wenn ich jetzt diese Form mit den Matrizen benutze finde ich keinen Bezug mehr zu N (also der DImension meiner Matrix oder meines Vektors).
Wollte das ganze ersteinmal an einer 3x3 Matrix testen, die ich in einem Buch habe, wo auch die Iterationsschritte aufgelistet sind. Wenn ich das Verfahren aber starte gibt der mir die falschen Werte und alle 3mal aus, ich denke das liegt daran, dass ich N = 3 gewählt habe?
also es sieht so bei mir aus:

meineDaten.m :

meinA= [ 4 , -1 , 1; -2 , 5 , 1; 1, -2, 5] ;
meinb= [5; 11; 12] ;
meinN= 3 ;
meinxold= [0;0;0] ;
meinxmax= 5 ;


jac.m:

function jac(A,b,N,xold,nmax)

for n = 1:nmax
for i = 1:N
xnew = -inv(diag(diag(A)))*(tril(A)+triu(A)-diag(diag(A)))*xold...
    + inv(diag(diag(A)))*b
end
for i = 1:N
xold = xnew;
end
end
xnew

Vielen vielen Dank, dass du mir hilfst!!!!

Bezug
                                        
Bezug
Jacobi-Verfahren in matlab: Antwort
Status: (Antwort) fertig Status 
Datum: 16:48 Mo 14.05.2012
Autor: wieschoo

Die Variablen bleiben solange bestehen, bis du das Programm beendest oder die Variablen löschst bzw. überschreibst.

Grundsätzlich sollte man statt inv(A)*b lieber [mm] A\b [/mm] schreiben. Das ist schneller und genauer (steht übrigens auch als Warnung da, das sind die orangfarbenen Streifen rechts).


----------------------------
Ich habe mal mir erlaubt dein jac.m abzuändern. Insbesondere muss man nicht mehr die Zeilenanzahl übergeben:

function x=jac(A,b,x,max_iteration)
[zeilen,spalten]=size(A);   % Zeilen- und Spaltenanzahl ermitteln
%% in Komponenten aufspalten
D = diag(diag(A));               % Diagonale von A in D abspeichern
L = tril(A)-D;       % unteren linken Teil der Matrix A ab nach L
R = triu(A)-D;       % oberen rechten Teil der Matrix A ab nach R

for iter = 1:max_iteration
        x=D\(b-(L+R)*x)
end
end

Bezug
                                                
Bezug
Jacobi-Verfahren in matlab: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 17:05 Mo 14.05.2012
Autor: Katthi

Jaaaa es funktioniert =) Sind die richtigen Ergebnisse für die Iterationsschritte =) Hu schonmal das geschafft.
Für das Gauß-Seidel-Verfahren muss ich dann ja bloß noch die passende Gleichung einsetzen für x, oder?

Aber jetzt soll ich das auf zwei gegebene Matrizen anwenden. Hierbei sind dann nicht die Anzahl der Iterationsschritte angegeben, sondern ein Abbruchfehler, benötige ich dafür dann noch eine while-schleife?
Und eine Matrix ist m-dimensional, mit 3 verschiedenen m Werten. aber wie erstelle ich eine mxm-Matrix (Einträge auf Diagonale und den beiden Nebendiagonalen, der Rest ist Null). ich meine, wenn ich m gegeben habe, dann kann ich die ja manuell erstellen bei überschaubarem m, aber bei m=100 wird dies etwas mühsam?! :D
und dann ist da noch diese Möglichkeit des Wählens des Verfahrens. kann man da soetwas machen, dass ich gefragt werde, welches ich verwenden will, so dass ich auch Anfrage dann zB jac oder gsv eingebe oder muss man das einfach wie in deinem Beispiel als script-file machen, in dem dann beide Verfahren abgerufen werden?

(oh ich hoffe, du bist nicht "bös", dass ich jetzt mit noch mehr um die Ecke komme...)



Bezug
                                                        
Bezug
Jacobi-Verfahren in matlab: Antwort
Status: (Antwort) fertig Status 
Datum: 17:31 Mo 14.05.2012
Autor: wieschoo


> Jaaaa es funktioniert =) Sind die richtigen Ergebnisse für
> die Iterationsschritte =) Hu schonmal das geschafft.

Huch. Glück gehabt.

>  Für das Gauß-Seidel-Verfahren muss ich dann ja bloß
> noch die passende Gleichung einsetzen für x, oder?

Ja. Im Prinzip brauchst du nur [mm] $x^{(k+1)} =-(D+L)^{-1}U x^{(k)} [/mm] + [mm] (D+L)^{-1} [/mm] b$ einzusetzen. Mach dir aber ein extra Function-File für das GaußSeidelVerfahren.

>  
> Aber jetzt soll ich das auf zwei gegebene Matrizen
> anwenden. Hierbei sind dann nicht die Anzahl der
> Iterationsschritte angegeben, sondern ein Abbruchfehler,
> benötige ich dafür dann noch eine while-schleife?

ja. Statt dem for iter=1:maxiter müsste while ..... do  stehen. Gibt dir eine Genauigkeit "epsilon = 10*EPS"; vor. Dann musst du nur noch die Differenz zwischen xalt und xneu ermitteln:

all(abs(xalt-xneu))<epsilon % sind alle Differenzen aller |Einträge| < epsilon

> Und eine Matrix ist m-dimensional, mit 3 verschiedenen m
> Werten. aber wie erstelle ich eine mxm-Matrix (Einträge
> auf Diagonale und den beiden Nebendiagonalen, der Rest ist
> Null). ich meine, wenn ich m gegeben habe, dann kann ich
> die ja manuell erstellen bei überschaubarem m, aber bei
> m=100 wird dies etwas mühsam?! :D

Wie sollen die Matrizen aussehen?

hauptdiagonale=1:10
unterediagonale = 1:9
oberediagonale = 11:19
diag(hauptdiagonale)+diag(unterediagonale,-1)+diag(oberediagonale,1)

>  und dann ist da noch diese Möglichkeit des Wählens des
> Verfahrens. kann man da soetwas machen, dass ich gefragt
> werde, welches ich verwenden will, so dass ich auch Anfrage
> dann zB jac oder gsv eingebe oder muss man das einfach wie

Du kannst folgendes machen
disp('Welches Verfahren')
disp('Jacobi       (1)')
disp('Gauss-Seidel (2)')

wahl = input('Nummer eingeben:');
if wahl == 1
  jac(....)
else
  gausseidel(...)

> in deinem Beispiel als script-file machen, in dem dann
> beide Verfahren abgerufen werden?
>  
> (oh ich hoffe, du bist nicht "bös", dass ich jetzt mit
> noch mehr um die Ecke komme...)
>  
>  


Bezug
                                                                
Bezug
Jacobi-Verfahren in matlab: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 17:45 Mo 14.05.2012
Autor: Katthi

ich habe für die Abbruchbedingung ein epsilon gegeben,
und zwar soll ich soweit iterieren lassen bis die 2-Norm von r < = 10^(-5) ist, wobei r= b- A*x ist.
aber wenn ich das mit while eingebe, gibt der mir nur
ans = [0;0;0] aus. das kann ja irgendwie nicht sein? oder muss ich dann in der while schleife sagen: while norm(r) >= epsilon ??

Und das mit der Matrix verstehe ich nicht genau, wie du das meinst mit den Diagonalen.. also ich habe auf der Diagonalen als ersten und letzten Eintrag eine 2 und dazwischen alles 4. und auf den Nebendiagonalen überall -1 .
dann soll ich für beide Verfahren für m = 10, 20 , 100 approximieren lassen. (wo dann auch wieder das Problem auftritt, wie ich das m variieren kann ohne copy paste)


Bezug
                                                                        
Bezug
Jacobi-Verfahren in matlab: Antwort
Status: (Antwort) fertig Status 
Datum: 17:58 Mo 14.05.2012
Autor: wieschoo


> ich habe für die Abbruchbedingung ein epsilon gegeben,
> und zwar soll ich soweit iterieren lassen bis die 2-Norm
> von r < = 10^(-5) ist, wobei r= b- A*x ist.
>  aber wenn ich das mit while eingebe, gibt der mir nur
> ans = [0;0;0] aus. das kann ja irgendwie nicht sein? oder
> muss ich dann in der while schleife sagen: while norm(r) >=
> epsilon ??

JA! while norm(r) >= epsilon
Solange die Genauigkeit noch nicht erreicht ist, soll das Programm doch iterieren. Vergiss auch nicht das r vor der Schleife zu belegen.

>  
> Und das mit der Matrix verstehe ich nicht genau, wie du das
> meinst mit den Diagonalen.. also ich habe auf der
> Diagonalen als ersten und letzten Eintrag eine 2 und
> dazwischen alles 4. und auf den Nebendiagonalen überall -1

Das ist doch genau das. Probier mal:
m= 10;
hauptdiagonale=4*ones(1,m); hauptdiagonale(1)=2;hauptdiagonale(m)=2;
unterediagonale = (-1)*ones(1,m-1)
oberediagonale = (-1)*ones(1,m-1)
diag(hauptdiagonale)+diag(unterediagonale,-1)+diag(oberediagonale,1)

> .
> dann soll ich für beide Verfahren für m = 10, 20 , 100
> approximieren lassen. (wo dann auch wieder das Problem
> auftritt, wie ich das m variieren kann ohne copy paste)
>  


Bezug
                                                                                
Bezug
Jacobi-Verfahren in matlab: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 18:07 Mo 14.05.2012
Autor: Katthi

wenn ich das mit dem epsilon mache, dann geht der aber voll ab und rechnet ewig grad. sehe nur noch wie der Balken so tickert...
Ich habe übrigens auch keinen Startwert gegeben, nimmt man dann prinzipiell immer den Nullvektor?
und ich habe gerade gesehen, dass man bei der 2 norm dann normest nehmen muss oder ist das egal?

Das mit der Matrix probiere ich gleich, wenn der jemals aufhört :D

Aber das mit dem Auswählen klappt auch! =)

Bezug
                                                                                        
Bezug
Jacobi-Verfahren in matlab: Antwort
Status: (Antwort) fertig Status 
Datum: 18:18 Mo 14.05.2012
Autor: wieschoo


> wenn ich das mit dem epsilon mache, dann geht der aber voll
> ab und rechnet ewig grad. sehe nur noch wie der Balken so
> tickert...

Drück mal Strg+C. Da ist dann wohl ein Fehler drin. Normalerweise geht das recht flott.

> Ich habe übrigens auch keinen Startwert gegeben, nimmt man
> dann prinzipiell immer den Nullvektor?

Wenn du das Ergebnis kennst, dann kannst du ja gleich das Ergebnis einsetzen.

Aber ihr hattet garantiert das starke Zeilensummenkriterium, Spaltensummenkriterium, Quadratsummenkriterium
und die Aussage, sofern eines dieser Kriterien erfüllt ist der Startvektor beliebig gewählt werden kann.

> und ich habe gerade gesehen, dass man bei der 2 norm dann
> normest nehmen muss oder ist das egal?

http://www.mathworks.de/help/techdoc/ref/norm.html

>  
> Das mit der Matrix probiere ich gleich, wenn der jemals
> aufhört :D
>  
> Aber das mit dem Auswählen klappt auch! =)  


Bezug
                                                                                                
Bezug
Jacobi-Verfahren in matlab: Frage (reagiert)
Status: (Frage) reagiert/warte auf Reaktion Status 
Datum: 18:23 Mo 14.05.2012
Autor: Katthi

So schaut das jetzt bei mir aus:
kann ja nur irgendwie mit dem while zusammenhängen, weil vorher ging es ja...


function x=jac(A,b,x,epsilon)
[n,n]=size(A);   % Zeilen- und Spaltenanzahl ermitteln
%% in Komponenten aufspalten
D = diag(diag(A));               % Diagonale von A in D abspeichern
L = tril(A)-D;       % unteren linken Teil der Matrix A ab nach L
R = triu(A)-D;       % oberen rechten Teil der Matrix A ab nach R

r = b - A*x ;

while (normest(r) >= epsilon )
  
        x = [mm] D\(b-(L+R)*x) [/mm]
end
end

Ja das hatten wir in der Vorlesung =) Blöde Frage....



Bezug
                                                                                                        
Bezug
Jacobi-Verfahren in matlab: Antwort
Status: (Antwort) fertig Status 
Datum: 19:06 Mo 14.05.2012
Autor: wieschoo

Ich schrieb schon, dass du lieber norm(X,2) verwenden solltest. Du musst dich auch in der Hilfe bei Matlab einlesen, wenn etwas nicht sofort klappt.
Siehe meine andere Antwort:
https://matheraum.de/read?i=888856

Bezug
                                                                                                                
Bezug
Jacobi-Verfahren in matlab: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 19:16 Mo 14.05.2012
Autor: Katthi

ja, das hatte ich auch schon geändert jetzt, aber trotzdem rattert der wieder los.... aber es steht auch immer das gleiche x da. also der approximiert nicht.
Auch wenn ich mit einem anderen Vektor starte.... :/

Bezug
                                                                                                                        
Bezug
Jacobi-Verfahren in matlab: Antwort
Status: (Antwort) fertig Status 
Datum: 19:22 Mo 14.05.2012
Autor: wieschoo

Scherzkeks ;-)

Da fehlt das r = b - A*x ; nach x=D\(b-(L+R)*x); in der Schleife.

Bezug
                                                                                                                                
Bezug
Jacobi-Verfahren in matlab: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 19:25 Mo 14.05.2012
Autor: Katthi

oh man ich dachte das muss davor, damit der überhaupt weiß, was das r denn sein soll... :D
Wahnsinnsvielen Dank =)=)=)=)=)

Bezug
                                                                                                                                        
Bezug
Jacobi-Verfahren in matlab: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 20:10 Mo 14.05.2012
Autor: Katthi

Noch eine letzte Frage,
ich würde jetzt gerne alles so zusammenfügen, dass man nur noch Auswählen muss, was mann haben möchte.
Also auch, wenn ich das mit der Matrix mit den verschiedenen Größen machen will.
habe das dann jetzt so versucht, aber dann gibt der mir immer einen Fehler. Wenn ich die Matrizen einzeln aufrufe klappt das, nur sobald ich in dem großen Befehl drin bin, kann er mir das jacobiverfahren oder gsv nicht auswerfen.

disp('Welches Verfahren')
disp('Jacobi (i)      (1)')
disp('Jacobi (ii)      (2)')
disp('Gauss-Seidel (i) (3)')
disp('Gauss-Seidel (ii) (4)')

wahl = input('Nummer eingeben:');
if wahl == 1
  jac(neuA,neub,neuxold,neunmax)
end
if wahl == 2
  disp('m=10    (1)')
  disp('m=20    (2)')
  disp('m=100   (3)')
  
  wahl = input('Nummer eingeben:');
  if wahl == 1
      m= 10;
      matrix1(m);
      jac(matrix1 , b2, xold2, epsilon)
  end
  if wahl == 2
      m = 20;
      matrix1(m);
      jac(matrix1, b2, xold2, epsilon)
  end
  if wahl == 3
      m= 100;
      matrix1(m);
      jac(matrix1, b2, xold2, epsilon)
  end
end
if wahl == 3
  gsv(A1, b1, xold, epsilon)
end
if wahl == 4
  % müsste entsprechend wie bei wahl 2 sein
end

Bezug
                                                                                                                                                
Bezug
Jacobi-Verfahren in matlab: Antwort
Status: (Antwort) fertig Status 
Datum: 20:22 Mo 14.05.2012
Autor: wieschoo

Du müsstest auch noch sicherstellen, dass dein Vektor b die richtige Größe hat. Wobei ich das jedoch insgesamt eher so machen würde
-------------------------------------------------------
disp('Welches Verfahren')
disp('Jacobi (1)')
disp('Gauss-Seidel (2)')

verfahren = input('Nummer eingeben:');

disp('Welche Matrixgroesse')
disp('Standard (1)')
disp('manuell (2)')

groesse = input('Nummer eingeben:');

%% Parameter einstellen
if groesse == 1
  m = deineStandardgroesse;
  A = standardA;
  b = standardb;
  x = standardx;
else
  m = input('Zeilenanzahl eingeben:');
  A = matrix1(m);
  b = ______________________
  x = zeros(m,1);
end

%% Verfahren drüber jagen
if verfahren == 1
  jac(A, b, x, epsilon)
end
if verfahren == 2
  gsv(A, b, x, epsilon)
end
-------------------------------------------------------
http://pastebin.de/26204

Bezug
                                                                                                                                                        
Bezug
Jacobi-Verfahren in matlab: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 20:33 Mo 14.05.2012
Autor: Katthi

das ist wirklich wesentlich übersichtlicher =) Stimmt.
Aber ich musste die matrix1.m als function machen und das macht mir Probleme, weil er mir da jetzt sagt "too many input arguments", aber ich gebe ihm doch das m vor, woraus er dann die Matrix basteln soll.
Rufe ich matrix1 auf, dann kommt die mit dem gewünschten m, aber so klappt es nicht.
habe die so gemacht, wie du gezeigt hast, nur als function:

function B = matrix1(m)
hauptdiagonale = 4*ones(1,m); hauptdiagonale(1)=2;hauptdiagonale(m)=2;
unterediagonale = (-1)*ones(1,m-1)
oberediagonale = (-1)*ones(1,m-1)
diag(hauptdiagonale)+diag(unterediagonale,-1)+diag(oberediagonale,1)

wo liegt der Fehler, dass er das in dem verfahren nicht ausführen kann?? :/

Bezug
                                                                                                                                                                
Bezug
Jacobi-Verfahren in matlab: Antwort
Status: (Antwort) fertig Status 
Datum: 20:52 Mo 14.05.2012
Autor: wieschoo


> das ist wirklich wesentlich übersichtlicher =) Stimmt.
>  Aber ich musste die matrix1.m als function machen und das
> macht mir Probleme, weil er mir da jetzt sagt "too many
> input arguments",

Zeilennummer. Ist das wirklich die Funktion?

> aber ich gebe ihm doch das m vor, woraus
> er dann die Matrix basteln soll.
>  Rufe ich matrix1 auf, dann kommt die mit dem gewünschten
> m, aber so klappt es nicht.
>  habe die so gemacht, wie du gezeigt hast, nur als
> function:
>  
> function B = matrix1(m)
>  hauptdiagonale = 4*ones(1,m);
> hauptdiagonale(1)=2;hauptdiagonale(m)=2;
>  unterediagonale = (-1)*ones(1,m-1)
>  oberediagonale = (-1)*ones(1,m-1)
>  

B=diag(hauptdiagonale)+diag(unterediagonale,-1)+diag(oberediagonale,1)
end
Rückgabewert ist B. Dann muss auch B beschrieben werden.

>
> wo liegt der Fehler, dass er das in dem verfahren nicht
> ausführen kann?? :/


Bezug
                                                                                                                                                                        
Bezug
Jacobi-Verfahren in matlab: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 21:00 Mo 14.05.2012
Autor: Katthi

Jetzt klappt alles!!
Vielen vielen Dank =)

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


^ Seitenanfang ^
www.matheforum.net
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]