Ich versuche gerade ein System von Dgln mit Ode45 zu lösen. Ich hab mir eine Einführung durchgelesen und danach folgendes geschrieben:
Code:
--------------------------------------------------------
[t,y] = ode45('windode',[0,1],[62,125]);
plot(t,y);
--------------------------------------------------------
function out = windode(t,y)
dann bekomme ich als Fehler:
??? Error using ==> odearguments at 116
WINDODE returns a vector of length 20004, but the length of initial conditions vector is 2. The vector returned by WINDODE and the initial conditions vector must have the same number of elements.
Ich kann damit jetzt leider nicht ganz so viel anfangen... hat da jmdn ne ahnung? Ist es überhaupt richtig, dass ich die Parameter in windode.m definiere oder muss ich das machen, bevor ich ode45 aufrufe??
Zuletzt bearbeitet von sutoppu am 01.05.2011, 20:00, insgesamt einmal bearbeitet
So, ich habe jetzt selbst schon erkannt, dass die Parameter da schon so hingehören
aber, f ist kein einzelner Parameter der Übergeben wird, sondern ursprünglich eine Funkton, die ich alle 0.0001 Punkte in ein Array übetragen habe. Kann ich das dann einfach so multiplizieren? kann der Fehler daher kommen?
Die Fehlermeldung besagt, das "out" ein Vektor der Länge 20004 ist. Eigentlich ist aber zu erwarten, dass ein [1 x 2] Vektor zurückgegeben wird, da auch die Anfangsbedingungen diese Dimension haben.
ich wüsste auch nicht warum, es könnte halt nur an f liegen... f ist 1002x1 groß. Ich weiss aber auch nicht, wie ode45 auf f zugreift oder wie ich f da anders unterbringen könnte.
F ist eine Funktion, die aus zwei Funktionen (g1 und g2) besteht, die jeweils normalisiert sind.
Jetzt möchte ich f in meine dgl einbinden... hat da jmdn ne idee?
Es ist alles sehr merkwürdig.... mittlerweile tritt der fehler nicht mehr auf, obwohl ich zum letzten Versuch von gestern Abend nichts geändert habe...
Code:
--------------------------------------
y0=[72;125];
t=[0; 1];
[t,y]=ode45(@windode,t,y0);
--------------------------------------
function out = windode(t,y) [t,f1,f2,f61] = windkessel_f();
i=1;
f=zeros(61,1);
s=zeros(61,1);
while i<62;
jetzt bekomme ich eine Lösung, aber die hat wenig mit der 'echten' Lösung zu tun... i habe ich eingebunden, weil ich dachte, dass ich irgendwie auf f zugreifen muss... aber das klappt so wohl nicht
Das kann irgendwie alles nicht sein... Y ist 101x2 und t ist 1x10002... müssten die nicht dieselbe länge haben? So schwer kann das doch nicht sein, oder? Ich sehs wohl einfach nur nicht
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
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.