WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Symbolic Math: mehrdimensionale Differentialgleichung lösen

 

Blaubaer

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.09.2008, 13:03     Titel: Symbolic Math: mehrdimensionale Differentialgleichung lösen
  Antworten mit Zitat      
Hallo!
Nachdem ich das ganze Netz danach abgesucht und nichts gefunden hab, hier meine Frage. Hoffentlich bin ich im richtigen Thread Smile
Also ich möchte eine Differentialgleichung lösen die ungefähr so aussieht:
'(DB)=[a1 0;a12 a2]*B+diag(B*transpose(B))*[1 0;beta12 0])' , 'B(0)=[0;0]'
Das Problem ist das dsolve anscheinend keine zweidim Fkt als Eingabe mag. Ich kann die Gleichung ja auch nicht splitten, da in der Gleichung ja B^2 vorkommt.
Es muss doch irgendeine Möglichkeit geben diese Gleichung zu lösen, oder?
Wäre super wenn jemand eine Idee hätte.
Vielen Dank schon mal!


Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 03.09.2008, 14:04     Titel:
  Antworten mit Zitat      
Hallo Blaubaer,

ja, Du bist richtig hier, herzlich Willkommen.

Prinzipiell kommt Matlab gut damit klar, wenn die gesuchte Funktion von mehreren Variablen (B1, B2) abhängig ist, und natürlich ist die Ableitung dann ein Gradient und hat auch zwei Einträge.

In der Hilfe findet sich ein Beispiel mit der "van der Pol equation". Da ist das genauso.

Wenn Du Probleme mit der Umsetzung hast, poste doch Deinen Code und eventuell auftretende Fehlermeldungen hier.

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Blaubaer

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.09.2008, 15:01     Titel:
  Antworten mit Zitat      
Hallo Bijick,

danke für deine schnelle Antwort. Eigentlich will die Lsg zu folgender DGL:
dsolve('(DB)=transpose([-a1 0;a12 a2])*B+diag(B*transpose(B))*[1 0;beta12 0]','B(0)=[0; 0]')
aber da bekomme ich die Fehlermeldung ??? Error using ==> dsolve at 300 at offset 50, `;` unexpected
Das bedeuted wohl das dsolve bereits mit Matrizen überfordert ist

Bei dem vereinfachten Problem
dsolve('(DB)=[a1 a2]+B','B=[1 1]')
bekome ich die Fehlermeldung
??? Error using ==> dsolve at 300
Error, (in PDEtools/NumerDenom) invalid input: PDEtools/NumerDenom expects its 1st argument, ee, to be of type algebraic, but received [-a1, -a2]

Ich habe wirklich schon sehr lange rumprobiert aber nichts funktioniert.

In meiner Matlab Hilfe finde ich leider auch kein Bsp für die Lsg einer DGL mit einer Fkt die ins 2-dimensionale abbildet.

Danke nochmal für Lsgvorschläge.

Blaubaer
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 03.09.2008, 15:43     Titel:
  Antworten mit Zitat      
Hallo Blaubär,

entschuldige, ich war bisher auf dem falschen Dampfer und dachte, dass Du eine DGL numerisch lösen willst. Du möchtest aber analytisch mithilfe der Symbolic Math Toolbox lösen, oder? Die habe ich hier nicht zur Verfügung, aber ich könnte morgen mal nachschauen. Vielleicht weiß auch jemand anderes Rat.

Falls ich richtig liege, werde ich das Thema dann in die Kategorie Toolboxen verschieben. Mein Fehler.

Bis morgen, herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Blaubaer

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.09.2008, 15:55     Titel:
  Antworten mit Zitat      
Hallo Bijick,

ja ich möchte die DGL numerisch lösen. Und da hat die Toolbox offensichtlich Probleme mit den Matrizen. Und viele andere Probleme.
Danke fürs Verschieben.

Es wäre echt super wenn jemand eine Idee zum Lösen dieser Gleichung hat.

Viele Grüße
Blaubaer

Edit: Das ist doch jetzt ein Tippfehler, oder?
Du meinst symbolisch? Sonst macht ja dsolve keinen Sinn.
Ich verschiebe mal...
mfg nschlange
Verschoben: 03.09.2008, 16:08 Uhr von nschlange
Von Programmierung nach Toolboxen
 
nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.318
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 03.09.2008, 16:16     Titel:
  Antworten mit Zitat      
Hi,

ich beziehe mich mal auf das vereinfachte Problem.
Kannst Du nicht einfach umschreiben:

in

mit B(1)=x und B(2)=y ?
Das sähe dann so aus:
Code:
sol=dsolve('Dx=a1+x','Dy=a2+y','x(0)=1','y(0)=1')

Oder meinst Du was anderes?
_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Blaubaer

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.09.2008, 17:00     Titel:
  Antworten mit Zitat      
Hallo nschlange,

ja, das war natürlich ein Tippfehler... Danke fürs verschieben und deine Antwort.
Bei dem einfachen Bsp kommt tatsächlich eine Lsg raus. Das Problem bei mir ist, das meine Fkt B ins 2Dimensionale abbildet B(t)=(B1(t),B2(t)) und in der Abbleitung von B1 dann B2 vorkommt. Wenn ich die DGL also umschreibe in zwei DGL würde der Befehl so ausschauen:
dsolve('(DB1)=delta1-a1*B1-0.5*B1^2+0.5*beta*B2^2','(DB2)=delta2-a12*B1-a2*B2')

Das liefert mir dann den Fehler
??? Error using ==> maple at 129
Error, invalid input: rhs received [B2(t) =&where(_a,{[diff(_b(_a),_a)*_b(_a)+1/2*(a12^2*beta*_a^2+2*a12^2*delta1+2*_b(_a)*delta2+2*a12*a2*_b(_a)+2*_b(_a)*a12*a1-_b(_a)^2+2*delta2*a2*_a-2*_b(_a)*a2*_a-2*delta2*a12*a1-delta2^2+2*a2*_a*a12*a1-a2^2*_a^2)/a12
= 0, _a = B2(t), _b(_a) = diff(B2(t),t), B2(t) = _a, t = Int(1/_b(_a),_a)+C1]}), B1(t) = (-diff(B2(t),t)+delta2-a2*B2(t))/a12],
which is not valid for its 1st argument, expr

Confused Was hat das zu bedeuten, kommt dsolve mit den Gleichungen nicht zurecht oder hab ich irgendeinen blöden Fehler drin?

Grüße
Blaubaer
 
nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.318
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 03.09.2008, 18:07     Titel:
  Antworten mit Zitat      
Hi,

das ist doch zwei gekoppelte DGLs, oder?
Keine Ahnung, ob man sowas symbolisch lösen kann.
Von Hand würde man glaube ich versuchen, die zu entkoppeln.
Da muss ich aber auch erstmal in die Bücher gucken.
_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.318
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 04.09.2008, 07:54     Titel:
  Antworten mit Zitat      
Moins,

wenn man zusätzlich Anfangsbedingungen angibt kommt zwar keine Fehlermeldung, aber auch keine Lösung:Sad
Code:
dsolve('DB1=delta1-a1*B1-0.5*B1^2+0.5*beta*B2^2','DB2=delta2-a12*B1-a2*B2','B1(0)=1','B2(0)=1')

_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Blaubaer

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.09.2008, 09:09     Titel:
  Antworten mit Zitat      
Morgen!
Ja, das habe ich auch schon ausprobiert. Bei meinen Anfangsbed B1(0)=0 und B2(0)=0 kommt eben auch keine Lsg. Aber wenn es schon ohne Nebenbed einen Fehler gibt....
Diese DGL scheint aber schon lösbar zu sein, weil sie eine von vielen in einem Paper ist. Und mit den gefundenen Lösungen wird später noch kräftig rumgerechnet. Zitat zu meinem Problem:
"These ODEs, which can be solved easily through numerical integration start-
ing from the initial conditions A(0)=0 and B(0) =0_{1xN}.

Das einzige was mir jetzt noch einfällt ist zu versuchen die DGL zu 'entkoppeln'.

Andere Lösungsvorschläge wären echt super.
Danke für deine Mühe nschlange!

Blaubaer
 
nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.318
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 04.09.2008, 09:15     Titel:
  Antworten mit Zitat      
Blaubaer hat Folgendes geschrieben:

"These ODEs, which can be solved easily through numerical integration start-
ing from the initial conditions A(0)=0 and B(0) =0_{1xN}.


Hm, dann versuch doch lieber sie numerisch zu lösen.
Siehe Bijicks ersten Tipp.
_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 04.09.2008, 09:49     Titel:
  Antworten mit Zitat      
Hallo Blaubaer,

ich hab' jetzt noch mal Maple direkt gefüttert mit

Zitat:
ics := B1(0) = 0, B2(0) = 0
ode1 := B1(x) = delta1 - a1 B1(x) - 0.5 B1(x)^2 + 0.5 beta B2(x)^2
ode2 := B2(x) = delta2 - a12 B1(x) - a2 B2(x)
s = dsolve([ode1, ode2, ics])


Aber da gibt es auch keine Lösung. (Ebensowenig ohne Anfangsbedingungen.)

Und im paper steht dann ja auch wieder "numerical integration". Heißt das nicht, dass die auch keine analytische Lösung gefunden haben? Oder ist sie angegeben, damit mit ihr weiter "rumgerechnet" werden kann?

Soweit meine Erkenntnisse.
Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Blaubaer

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.09.2008, 18:18     Titel:
  Antworten mit Zitat      
Hallo!

Also eigentlich würde ich schon gerne damit rumrechnen. Ich brauche B im Kalman Filter und einige andere Fkten sind von B abh. Aber da offensichtlich keine analytische Lsg existiert, bleibt mir nur die numerische Lsg.
Allerdings ist mir nicht ganz klar warum die Formulierung hinter dem % eine andere Lsg gibt als die gesplittete Formulierung? Da sollte doch eigentlich dasselbe rauskommen!

function solution = DEsolve ()
a1=0.5;
a2=0.4;
a12=0.1;
delta1=0.9;
delta2=0.8;
beta=0.4;

function dB = funcB(t,B)
dB=zeros(2,1);
%dB=[delta1;delta2]-transpose([a1 0;a12 a2])*B-0.5*(B(1)^2*[1;0]+B(2)^2*[beta;0])
dB(1)=delta1-a1*B(1)-a12*B(1)-0.5*(B(1))^2-0.5*beta*(B(2))^2;
dB(2)=delta2-a2*B(2);
end

ode45(@funcB, [0 5],[0 0])

end

Danke euch beiden!

Viele Grüße
Blaubaer
 
Blaubaer

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.09.2008, 07:20     Titel:
  Antworten mit Zitat      
Hallo,

hab den Fehler gefunden: B(2)*a12
Schönes WoEnde noch!

Grüße
Blaubaer
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.