Matlab: Lineares Gleichungssystem lösen |
19.08.2012, 18:55 | mattti | Auf diesen Beitrag antworten » | ||||||||||
Matlab: Lineares Gleichungssystem lösen Hallo, ich beschäftige mich gerade mit Matlab und komme leider nicht weiter. Im Prinzip will ich ein lineares Gleichungssystem lösen. Gegeben ist eine Rekursion: B(t,r)= 1/6*(1+B(t,0)+B(t,r+1)+B(t,r+2)+B(t,r+3)+B(t,r+4)+B(t,r+5)) und B(t,r)=1 falls r>=t Das Ziel ist es jetzt B(t,0),B(t,1) explizit zu berechnen. Meine Ideen: Ich habe mir überlegt das erstmal für den Fall t=2 zu probieren. Dazu habe ich mir eine Matrixgleichung der Form Ax=b überlegt. Es hat folgende Form: A=( 1 ,B(2,0) ,B(2,1) ,B(2,2) ,B(2,3) ,B(2,4) ,B(2,5); 1 ,B(2,0) ,B(2,2) ,B(2,3) ,B(2,4) ,B(2,5) ,B(2,6); 1 , 1 , 1 , 1 , 1 , 1 , 1 ; 1 , 1 , 1 , 1 , 1 , 1 , 1 ; 1 , 1 , 1 , 1 , 1 , 1 , 1 ; 1 , 1 , 1 , 1 , 1 , 1 , 1 ; 1 , 1 , 1 , 1 , 1 , 1 , 1 ; ) und x= [1/6;1/6;...;1/6] ein Spaltenvektor der Länge 2+5=7. Meine rechte Seite ist b=[B(2,0);B(2,1);B(2,2);B(2,3);B(2,4);B(2,5);B(2,6)] Das Ziel ist es also den Vektor b zu bestimmen. Ich möchte das so nicht explizit eintippen, weil ich ja später die Möglichkeit haben will den Wert für t zu variieren. ich habe mir folgendes überlegt: for r=1:t+5 y=ones(1,t+5); x=1/6 *y A= zeros(t+5) for j=1:t+5 & j=1:t+5; if j==1 A(i,j)=A(i,j)+1 elseif i>t A(i,j)=A(i,j)+1 elseif j==2 A(i,j)=B(t,0) else A(i,j)=B(t,r+ end end grrrrr....also irgendwie wird das nichts... Es wäre toll wenn mir jemand helfen könnte... Viele Grüße |
||||||||||||
19.08.2012, 20:59 | Airblader | Auf diesen Beitrag antworten » | ||||||||||
Erstmal bitte einen syntaktisch korrekten Code posten -- und zwar in den entsprechenden Code-Umgebungen und vernünftig formatiert. Dass dein Code überhaupt ohne Fehlermeldung läuft halte ich jedoch für schlicht unmöglich. Da ist von einem 'i' die Rede, das nie deklariert wird, und wie eine Zeile sinnvollerweise auf "B(t,r+" enden soll ist auch irgendwie ein Rätsel. air |
||||||||||||
19.08.2012, 21:44 | mattti | Auf diesen Beitrag antworten » | ||||||||||
Es tut mir leid, dass ich es nicht schaffe einen funktionierenden Code zu schreiben, deshalb habe ich ja um Hilfe gebeten. Der von mir geschriebene Code ist nur ein Gedankenansatz, der an der Stelle B(t,r+ einfach nicht weiter kommt. Ich habe diesen Code natürlich auch nicht zum laufen bekommen... |
||||||||||||
19.08.2012, 23:35 | Airblader | Auf diesen Beitrag antworten » | ||||||||||
Edit: Da sich der Fragesteller nicht mehr zu Wort meldet, habe ich jegliche Hilfestellung hier bis auf Weiteres entfernt. air |
||||||||||||
21.08.2012, 20:18 | Airblader | Auf diesen Beitrag antworten » | ||||||||||
Scheinbar mal wieder in gleich zwei Threads völlig umsonst die Mühe gemacht, zu helfen. Bei der Rate, die bei programmier-bezogenen Threads zumindest gefühlsmäßig besteht, ist es echt kein Wunder, dass einem die Lust daran vergeht. |
||||||||||||
21.08.2012, 21:28 | mattti | Auf diesen Beitrag antworten » | ||||||||||
Also ich wusste nicht, dass ich gezwungen bin mich augenblicklich mit den Antworten zu beschäftigen und alles direkt zu verstehen, weil mir sonst jegliche Hilfe wieder weggenommen wird.... Sehr schade! |
||||||||||||
Anzeige | ||||||||||||
|
||||||||||||
21.08.2012, 21:32 | Airblader | Auf diesen Beitrag antworten » | ||||||||||
Bist du auch nicht, aber ich warte hier auf eine Rückmeldung. Ein "Ich schau mir das mal an" würde der Kommunikation dienen -- und inzwischen sind immerhin zwei Tage vergangen. Dazu kommt die Tatsache, dass du zuvor nichtmal auf meinen Hinweis hin deine Frage vernünftig formatiert hast. Da du dich jetzt wieder gemeldet hast, stelle ich den wesentlichen Teil der Antwort wieder ein und bitte letztmalig darum, deine Beiträge lesbar zu verfassen und die Kommunikation insofern aufrechtzuerhalten, dass ich hier nicht "im Regen stehe".
air |
||||||||||||
21.08.2012, 23:02 | mattti | Auf diesen Beitrag antworten » | ||||||||||
hy air, erstmal danke für deine Hilfe. Ich habe gerade versucht deine ersten beiden Gleichungen nachzuvollziehen. Hast du bei der Zweiten einfach Werte für \ betrachtest. Theoretisch müsste die Gleichung ja allgemein für gelten. Kannst du mir bitte auch erklären wozu du überhaupt umgeformt hast? das benutzt du doch dann gar nicht mehr, oder? |
||||||||||||
21.08.2012, 23:06 | mattti | Auf diesen Beitrag antworten » | ||||||||||
uuuppps bei "undefined control sequence" soll stehen : . |
||||||||||||
21.08.2012, 23:40 | Airblader | Auf diesen Beitrag antworten » | ||||||||||
Ich betrachte es nur für , weil nur für diese Werte in der Rekursionsgleichung diese Summe entsteht. Schauen wir uns einfach mal an: Der Grund hierfür ist, dass für in der Rekursionsgleichung nur noch eine "abgeschnittene" geometrische Summe steht, die es nun eben zu berechnen gilt. Wenn man diese Rechnungen selbst durchführt und dann hinschaut, sieht man, dass man im Wesentlichen zu berechnen hat (sieht schlimmer aus als es ist, es sind ja nur fünf Summanden!), wenn man haben will. Mit bekannten Standardtricks sollte das kein Problem sein. Dann bekommt man nämlich Du hast übrigens korrekt bemerkt, dass die eine Umformung völlig unnötig war. Ich hatte erst anders angefangen und dabei schon geschrieben. Wie gesagt: Trial & Error. Woher kommt die Aufgabe eigentlich? Ist sie ausschließlich dafür konzipiert, mit Matlab gelöst zu werden? Wir gehen dem Ganzen im Moment weitestgehend ja doch händisch auf die Spur. Sofern das denn auch alles stimmt (ich finde keinen Fehler, nur mein Bauchgefühl meldet sich angesichts der Zahlen...), wird eine Implementierung halt danach super-einfach. Möglicherweise lässt sich das Ganze ja aber auch von Anfang an numerisch lösen (nur mit einem stupiden rekursive-Funktion-Ansatz geht es eben leider nicht). Wie gesagt, keine Gewähr -- du solltest alles, was ich dir sage, wirklich genau anschauen und dir überlegen, ob du es überhaupt so lösen willst/sollst. air |
||||||||||||
21.08.2012, 23:52 | mattti | Auf diesen Beitrag antworten » | ||||||||||
Wow, danke! naja, ich habe ein gewisses Matlab-Defizit und ich bin im Internet auf diese Formel gestoßen, sie beschreibt ein Würfelspiel. Da stand halt, dass man das mit ner Matrixgleichung lösen kann und da dacht ich Matrix=Matlab-das wär doch ne gute Übung. Ich werde alles nochmal nachrechnen und mich dann nochmal melden. Gute Nacht |
||||||||||||
22.08.2012, 00:23 | Airblader | Auf diesen Beitrag antworten » | ||||||||||
Dann dachten die offenbar an eine andere Lösung. Zum Matlab üben ist der Weg, den ich eingeschlagen habe, sicher nicht geeignet. Ich glaube übrigens, dass deine ursprüngliche Matrix nicht stimmt. Sollte die zweite Spalte nicht durchgehend aus B(2, 0) bestehen? Was beschreibt die Rekursion denn? Sollten meine Ergebnisse unsinnige Zahlen ergeben, wüsste ich schonmal, dass irgendwo ein Fehler ist. air |
||||||||||||
22.08.2012, 05:24 | Airblader | Auf diesen Beitrag antworten » | ||||||||||
Ich gebe einfach mal zwei Beispiele, dann kannst du mir ja sagen, ob diese Zahlen sinnvoll sind: und und und air |
||||||||||||
22.08.2012, 16:34 | mattti | Auf diesen Beitrag antworten » | ||||||||||
Hy air, also ich hab mal deine Rekursion für i=t=50 ausgerechnet und habe etwas negatives rausbekommen, was nicht sein kann. Dann habe ich ein bischen rumprobiert und herausbekommen, dass ich für jedes t eine Matrixgleichung aufstellen kann. für t=1 und erhält man folgende Gleichungen: (wie du schon ausgerechnet hattest) Es ergibt sich als Matrixgleichung der Form Ax=b: Macht man das für t=3, so sind x und b abgesehen von der dimension äqivalent zu bilden. Für A ergibt sich : Also kann man eine allgemeine Bildungsvorschrift entwerfen. Ich habe mich mal an matlab versucht, aber es funktioniert nicht:
So, ich hoffe die Formatierung funktioniert. Also das Programm sollte eigentlich so funktionieren, dass ich ihm eine Zahl t übergebe und er mir dann s´die zugehörige Matrix ausgibt. LATEX CODE korrigiert, bitte zukünftig die Vorschaufunktion verwenden |
||||||||||||
22.08.2012, 17:46 | mattti | Auf diesen Beitrag antworten » | ||||||||||
Danke für deine Korrektur, ich hab das Programm jetzt hinbekommen Danke auch für deine Hilfestellungen! |
||||||||||||
22.08.2012, 18:27 | Airblader | Auf diesen Beitrag antworten » | ||||||||||
Hi, kannst du das Programm (und vielleicht den Link zur Problemstellung) vielleicht noch einstellen? Wäre für mich auch interessant, das nochmal anzuschauen. Wo bei mir der Fehler ist (negativ wirds übrigens ab t=15) schaue ich, falls ich die Zeit finde, auch nochmal. Aber schön, dass du es hinbekommen hast. air |
||||||||||||
05.09.2012, 16:14 | mattti | Auf diesen Beitrag antworten » | ||||||||||
Hi air, Hier ist das Programm :
Jetzt muss man MatrixRec(t)\Unbekannt(t) eingeben und Matlab gibt den gesuchten Vektor aus . Die zugrundeliegende Formel ist ja : Initialisierung: Leider betrachtet mein Programm nur den Fall . und ich habe keine Ahnung wie ich es anpassen kann. Vielleicht hast du eine Idee? |
|
Verwandte Themen
Die Beliebtesten » |
|
Die Größten » |
|
Die Neuesten » |