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

Second-Order Differential Equations

 

Wurschtl
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 19.12.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.02.2011, 16:30     Titel: Second-Order Differential Equations
  Antworten mit Zitat      
Folgende Aufgabe

Write a MATLAB code that solves the following second-order differential equation, using a built-in function ode45(...) over the integration interval 1 <= t <= 2

y''=ycos(2t), y(1)=0, y'(1)=2

Firstly, transform the given equation into a system of two first-order differential equations as described above. Secondly, create a vector-function vecFun=@(t,x)... that contains these first-order differential equations. Then solve the initial value problem using the function ode45(...). The first input argument of ode45(...) should be a vector-function vecFun. Assign the first return value of the function ode45(...) to a variable "time" and the second one to a variable "result".

Hints: A vector function that contains two first-order differential equations should have the following form vecFun=@(t,x)[right part of equation 1; right part of equation 2], where the parameter x is a vector of unknowns x=(x1,x2). The second argument of the function ode45(...) should be an integration interval and the last argument should be a vector of initial values for x1 and x2.


y0=1;
y1=2;
tspan=[1 2];
ODEfun0 = @(t,y0)(y0.*cos(2*t));
ODEfun1 = @(t,y1)(y1.*cos(2*t));
vecFun=@(t,x)[ODEfun0 ODEfun1]
[time,result] = ode45(vecFun,tspan,y)

Nach der letzten Zeile gibts drei Fehler.
Leider sollen wir es ja so machen. Nur mit vecFun gehts net. Habe ich nen Tippfehler, einen im Ansatz oder komplett falsch?
Wäre um Hilfe echt dankbar.

P.s. Screenshoot macht mir auch n paar Probleme
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.02.2011, 18:54     Titel:
  Antworten mit Zitat      
Hallo,

zunächst muss die Differentialgleichung 2. Ordnung in ein System von Differentialgleichungen 1. Ordnung umgeschrieben werden. Üblicherweise setzt man u = x' und stellt dann die DGLen für u und x auf.

Generell stecken in den Fehlermeldungen die wichtigsten Informationen, ihr solltet diese also immer genau ansehen und ggf. hier posten. Z.B. kann MATLAB die Variable y nicht kennen, weil ihr nur y1 und y2 definiert habt.

So gehts besser:
Code:
y0=[0; 2];
tspan=[1 2];
vecFun=@(t,x)[ODE1; ODE2];
[time,result] = ode45(vecFun,tspan,y0);


Dabei solltet ihr die im 1. Schritt gefundenen Differentialgleichungen direkt für ODE1 bzw. ODE2 eintragen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Wurschtl
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 19.12.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.02.2011, 21:05     Titel:
  Antworten mit Zitat      
Sehe ich das grad richtig, dass gemeint ist, ich soll ycos(2t) 2 mal ableiten?
Wenn ja bin ich echt saudoof


hab etz folgends


ODEfun = @(t,y)(y.*cos(2*t));
tspan=[1 2];
y=[1 2];
[time1,result1] = ode45(ODEfun,tspan,y);
[time,result] = ode45(ODEfun,tspan,[time1,result1])

Es kommt was raus, aber irgendwie soll ich ja mit vecFun arbeiten.
Soll ich da etz die Ergebnisse, also time 1+2 und result 1+2 in ne Matrix packen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.02.2011, 21:25     Titel:
  Antworten mit Zitat      
Hallo,

nein, sollst du nicht.
Du sollst deine Differentialgleichung 2. Ordnung in ein System erster Ordnung umwandeln. Mit zweimal ableiten hat das nichts zu tun.

Den Ansatz hatte ich ja schon geliefert: u = x'. Wenn allgemein x'' = f (t, x, x'), dann folgt
x' = u (nach Definition)
u' (= x'') = f(t, x, u)

... für den Rest siehe oben.

Mehr Details sollte es in Vorlesungsskript /-notizen geben.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Wurschtl
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 19.12.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.02.2011, 13:39     Titel:
  Antworten mit Zitat      
also ich habe mich etz durchgewelzt, aber nichts gefunden, was ich verstehe.

also

tspan=[1 2]

y''=y*cos(2t) y(0)=1, y'(1)=2;

x1(0)=1

x2(1)=2

x1'=x2

also x=[x1 x2]

ode45(f..x1)=result1
ode(45f...x2)=result2

vecFun=@(t,x)[result1 ; result2]
ODEfun=ode45(vecFun,tspan,x)


lieg ich da ungefähr richtig oder eher net?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.02.2011, 20:54     Titel:
  Antworten mit Zitat      
Hallo,

die Vorlesung kann wohl auch ich nicht ersetzen.

Ich hatte dir eigentlich eine Schritt-für-Schritt Anleitung gegeben, an der du dich durch das Problem hangeln kannst, aber du scheinst mir eher von der Lösung wegzulaufen als zu ihr hin. Setze u = y'. Dann wird aus:

y''=y*cos(2t) y(1)=0, y'(1)=2;

das System
y' = u, y(1) = 0;
u' = y*cos(2t), u(1) = 2;

oder mit y(1) und y(2)
y(1)' = y(2); y(1) (1)= 0;
y(2)' = y(1)*cos(2*t); y(2) (1)= 2;

Angewendet auf meinen ersten Vorschlag ergibt das:
Code:
y0=[0; 2];
tspan=[1 2];
vecFun=@(t,y)[y(2); y(1)*cos(2*t)];
[time,result] = ode45(vecFun,tspan,y0);  


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Wurschtl
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 19.12.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.02.2011, 12:03     Titel:
  Antworten mit Zitat      
y=[0 ;2];
tspan=[1 2];
y(1)=0, yonce(1)=2;
ytwo=y*cos(tspan.*2);
vecFun=@(t,y)[y(2); y(1)*cos(2*t)];
[time,result] = ode45(vecFun,tspan,y);



Das ist etz meine Lösung. Stimmt das so?
Zumindest kommt kein Fehler mehr Smile

Und Sorry dass ich so schwer von Begriff war. Nur leider kommt die Vorlesung meist nach der Hausaufgabe

mit dem Befehl:

Entnehmen sie die notwendigen Informationen der help Funktion....

Manchmal bekommen wir auch "Vorschläge" für die Algorithmen, aber der Dozent war diesen Donnerstag leider nicht da. Also der Rechenweg wurde uns diesmal nicht erklärt.

Ich weiß nicht ob es hilft, aber im Jahrgang vor uns haben 90% die erste, 70% die Zweite Klausur NICHT bestanden.
Die dritte Klausur war dann nur noch für einen nicht machbar.

Also die Vorlesungen, Hausaufgaben und Klausuren, naja ich erspare euch meine Meinung.....

Trotzdem Danke für die geduldige Hilfe
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.02.2011, 13:53     Titel:
  Antworten mit Zitat      
Hallo,

das sollte stimmen, ist ja auch im wesentlichen die von mir vorgeschlagene Lösung. Mir ist allerdings schleierhaft, wofür du yonce und ytwo berechnest - sie werden ja später nicht mehr verwendet. y(1) = 0 ist auch überflüssig, da y(1) schon 0 ist. Und dann sind wir wieder bei meinem Code, nur dass ich y0 statt y verwendet habe Wink

Mal aus Neugierde: was studierst du?

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Wurschtl
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 19.12.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.02.2011, 16:08     Titel:
  Antworten mit Zitat      
stimmt....
also ich studiere Chemie-Bio-Ingenieurwesen in Erlangen.
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.