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

DgL 2.ter Ordnung numerisch Lösen

 

ringo star
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 17.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.11.2015, 14:18     Titel: DgL 2.ter Ordnung numerisch Lösen
  Antworten mit Zitat      
Hallo zusammen,
ich bin ein absoluter neuling was Matlap angeht. Nun habe ich jedoch von der Uni eine Aufgabe bekommen, die mich zur folgende DGL gebracht hat. Diese soll ich numerisch lösen und komme nicht weiter.
Die differentialgleichung lautet:

α''(t) + sin (α(t)) * g/l = ( â/2*(1-cos⁡( Ω*t)) *cos⁡(α(t)))/l

Dabei sind g, l , â und Ω bekannt. Berachtet soll das Intervall [0,T/2] und den Randbedingungen α(0)=α''(0)=α'(0)=α'(T/2)=α(T/2)=0

Ich habe versucht dich gleicung mit der ode funktion zu lösen, bekomme dort jedoch immer ein error.

Es wäre super wenn mir jemand helfen könnte. Wie gesagt absolutes Neuland für mich und ich bin daher für jede Hilfe Dankbar.

Gruß
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 17.11.2015, 14:24     Titel:
  Antworten mit Zitat      
Zitat:
Ich habe versucht dich gleicung mit der ode funktion zu lösen, bekomme dort jedoch immer ein error.

dann poste bitte den code und den fehler. es ist sehr schwer zu erraten was du falsch machst. viel einfacher ist es wenn du es uns zeigst. die wahrsager kugel hat immer schlechten empfang bei regen Smile
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
ringo star
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 17.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.11.2015, 15:07     Titel:
  Antworten mit Zitat      
Das stimmt wohl. Also ich habe folgendes Eingegeben (iwie muss ich das am ende noch in ein Programm packen wo ich g und l eingebe und per button alles ausrechne Laughing ):

Code:

l = 2
g = 9.81
s = 20
b= l/g
T=4*pi*sqrt(b)
amax = (s*g)/(8*pi^2*l)
O = (2*pi)/T
[t,a]=ode45(@(t,a)(amax*0.5*(1- cos(0*t))*cos(a)*- sin(a)*g)*(1/l),[0,(T/2)],0);
plot(t,a)
 


Nach neuem Eingeben erhalte ich zwar keine Fehlermeldung mehr, jedoch ist a immer 0 und das kann eigentlich nicht sein Confused

Edit: Ok ich hab einen Fehler gefunden!! Enn mal Zeichen war zuviel. Jetzt ist a nicht mehr Null. Jedoch kann die Ausgegebenen Lösung nicht korrekt sein. Denn an der Stelle T/2 sollte a = 0 sein und das ist es nicht. Oder muss ich die DGL zunächst mittels Vektor in eine DGL erster Ordnung übertragen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 17.11.2015, 15:56     Titel:
  Antworten mit Zitat      
Zitat:
der muss ich die DGL zunächst mittels Vektor in eine DGL erster Ordnung übertragen?

ja
Code:
l = 2 ;
g = 9.81;
s = 20 ;
b= l/g ;
T=4*pi*sqrt(b) ;
amax = (s*g)/(8*pi^2*l);
O = (2*pi)/T ;
[t,a]=ode45(@(t,a) testfun(t,a,l,g,amax,O),[0,T/2],[0 0]);
plot(t,a)
 

Code:
function da=testfun(t,a,l,g,amax,O)

da=zeros(2,1);
da(1)=a(2);
da(2)=(amax*0.5*(1- cos(O*t)).*cos(a(1))- sin(a(1))*g)/l;
end

_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
ringo star
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 17.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.11.2015, 16:09     Titel:
  Antworten mit Zitat      
Ok ich hatte das so als Vektor geschrieben, bekomme da aber nur 0en raus:

Code:
[t,a]=ode45(@(t,a)[a(2);(amax*0.5*(1- cos(0*t))*cos(a(1))- sin(a(1))*g)*(1/l)],[0,(T/2)],[0;0]);

plot (t,a(:,1),'k',t,a(:,2),'b')


Wie gebe ich den Ihren Code ein? Ich weiß ist eine Dumme frage. Habe die Funktion in ein .m File abgelegt und dann
Code:
l = 2 ;
g = 9.81;
s = 20 ;
b= l/g ;
T=4*pi*sqrt(b) ;
amax = (s*g)/(8*pi^2*l);
O = (2*pi)/T ;
[t,a]=ode45(@(t,a) testfun(t,a,l,g,amax,O),[0,T/2],[0 0]);
plot(t,a)


in das Command Window. Erhalten dann jedoch folgeden Fehler:

??? Undefined function or method 'testfun' for input arguments of type 'double'.

Error in ==> @(t,a)testfun(t,a,l,g,amax,O)


Error in ==> odearguments at 111
f0 = feval(ode,t0,y0,args{:}); % ODE15I sets args{1} to yp0.

Error in ==> ode45 at 173
[neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs, odeFcn, .
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 17.11.2015, 16:14     Titel:
  Antworten mit Zitat      
Zitat:
Habe die Funktion in ein .m File abgelegt und dann

heist das mfile denn testfun und befindet sich im aktuellen ordner?
deine lösung ist auch richtung wenn du O statt 0 verwendest.... das ist übrigens der grund warum ich o nicht als variablennamen verwenden würde.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
ringo star
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 17.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.11.2015, 09:58     Titel:
  Antworten mit Zitat      
Vielen Dank für die Hilfe. Hat geklappt! Top Forum hier Exclamation Exclamation Exclamation Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
ringo star
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 17.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2015, 15:41     Titel:
  Antworten mit Zitat      
Hallo ich bins nochmal, wollte jetzt nicht extra ein neues Thema öffnen.

Ich habe noch ein kleines weiteres problem.
Für die gesamte Lösung meines mathematischen Problems habe ich zwei DGLs die aufeinenader Folgen. Gebe ich beide ODE45 befehle ein, erweitert Matlap jedoch nicht meine T-Variable,sondern überschreibt einfach die alten T-Werte. Gibt es eine Möglichkeit dies zu verhindern, sodass ich eine MAtrix am Ende habe, die alle meine T-werte umfasst?!

Code:
[t,a]=ode45(@(t,a)[a(2);(amax*0.5*(1- cos(O*t))*cos(a(1))- sin(a(1))*g)*(1/l)],[0,T],[0;0]);
[t,a]=ode45(@(t,a)[a(2);(amax*0.5*(-1+cos(O*t))*cos(a(1))- sin(a(1))*g)*(1/l)],[T,(2*T)],[0;0]);

plot (t,a(:,1),'k',t,a(:,2),'b')
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.500
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.12.2015, 17:39     Titel:
  Antworten mit Zitat      
Hallo,

im zweiten Befehl andere Variablennamen verwenden, und dann mit [ ] verketten.
Bitte den Status von "beantwortet" abändern, wenn du noch Fragen hast. Sonst besteht die Gefahr, dass niemand mehr in das Thema schaut.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
ringo star
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 17.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.12.2015, 16:19     Titel:
  Antworten mit Zitat      
Wie funktioniert diese verkettung? wenn ich jetzt beispielsweise bei der zweien DGL die variablen t1 und a1 nennen würde?
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 02.12.2015, 16:37     Titel:
  Antworten mit Zitat      
Hallo ringo star,
Code:
[t1, a1] = ode45(...);
[t2, a2] = ode45(...);

t = [t1; t2]
a = [a1; a2];

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
ringo star
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 17.11.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.12.2015, 15:49     Titel:
  Antworten mit Zitat      
Vielen Dank.

Als letzte Frage (hoffentlich Wink ) gibt es eine möglichkeit oder eine Funktion die ein genaueres Ergebnis liefert als die ode45? EIne möglichkeit wie ich mein Ergebnis genauer mache wäre auch super
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.500
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.12.2015, 15:50     Titel:
  Antworten mit Zitat      
Hallo,

du kannst mit odeset die relative und absolute Toleranz einstellen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
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 - 2025 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.