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. Ordnung plotten

 

juuuwe
Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 24.06.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.07.2009, 13:48     Titel: DGL 2. Ordnung plotten
  Antworten mit Zitat      
heiho... ich hab mal versucht folgendes Beispiel, das ich im netz gefunden habe nachzuvollziehen:
gegeben ist eine DGL 2. Ordnung: y'' + y' + 16y = sin(2t) mit y(0) = 1, y'(0) = 0 als Anfangsbedingungen.
Dieses wird in ein System von DGLs 1. Ordnung gebracht, indem y(1)=y gesetzt wird und y(2)=y'.
Das Programm soll nun folgendermaßen ausshen:
Code:
function ysys2=schwingung(t,y)
% Eingabe: t - Zeit, y - Vektor mit den Werten y(1) (für y1) und y(2) (für y2)
% Ausgabe: ysys2 - Spaltenvektor mit den Werten für y(1)' und y(2)'.
ysys2=[y(2);-y(2)-16*y(1)+sin(2*t)];
tspan=[0 20];
y0=[1;0];
[t,ywerte]=ode45('schwingung',tspan,y0);
plot(t,ywerte(:,1),'r:'),axis([0 20 -1 1])
end

Ich weis jetzt allerdings nicht, in welcher Form ich t und y einzugeben hab. t müsste an sichdoch bloß irgend ne zeit sein (z.B. t=1) und y soll laut kommentar ein vektor mit den werten y(1) und y(2) sein (also doch z.B. y=[1 0]).
Wenn ich das ganze nun laufen lassen möchte kommt folgende Meldung:
Zitat:
??? Maximum recursion limit of 100 reached. Use set(0,'RecursionLimit',N)
to change the limit. Be aware that exceeding your available stack space can
crash MATLAB and/or your computer.

Error in ==> ode45 at 7
% to f(t,y). Each row in the solution array YOUT corresponds to a time

Kann mir vielleicht jemand nen tipp geben, was ich anders machen müsste, damit der spaß funktioniert?
Danke im Voraus,

juuuwe
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: 31.07.2009, 17:43     Titel:
  Antworten mit Zitat      
Hallo,

das Problem besteht darin, dass ...
die Funktion schwingung die Funktion ode45 aufruft,
die zur Simulation die Funktion schwingung aufruft,
die die Funktion ode45 aufruft,
die zur Simulation die Funktion schwingung aufruft,
die die Funktion ode45 aufruft, ...

Also eine wunderbare Endlosschleife, die MATLAB netterweise stoppt.

Probiers mal so:

Dies als Funktion abspeichern

Code:
function ysys2=schwingung(t,y)
% Eingabe: t - Zeit, y - Vektor mit den Werten y(1) (für y1) und y(2) (für y2)
% Ausgabe: ysys2 - Spaltenvektor mit den Werten für y(1)' und y(2)'.
ysys2=[y(2);-y(2)-16*y(1)+sin(2*t)];


und diesen Code dann als Skript ausführen
Code:
tspan=[0 20];
y0=[1;0];
[t,ywerte]=ode45('schwingung',tspan,y0);
plot(t,ywerte(:,1),'r:'),axis([0 20 -1 1])
end


Habs nicht ausprobiert, sollte aber gehen.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 24.06.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.07.2009, 18:03     Titel:
  Antworten mit Zitat      
funktioniert...lieben dank

gruß, juuuwe
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.01.2010, 21:50     Titel: Noch ne Frage
  Antworten mit Zitat      
Ich hab das gleiche Problem und bei mir funktioniert das leider nicht.
los = ode45('schwingung',...
oder
los = ode45(@schwingung,...

bringt immer ein Problem mit den Variablen x oder t ...

Arbeite mit R2007

Bitte helft mir - bin am verzweifeln
 
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.01.2010, 22:26     Titel:
  Antworten mit Zitat      
Hallo,

die erste Zeile der Funktion schwingung muss in etwa so aussehen:

Code:
function dxdt = name(t, x)


Sprich, t muss übergeben werden, auch wenn du es nicht brauchst.
Um dir mehr zu helfen, müsstest du mehr Informationen (genaue Fehlermeldung; Code-Teil, in dem sie auftritt) zur Verfügung stellen.

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.