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

Ode45: Dgl*Vektor lösen

 

sutoppu
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 26.04.11
Wohnort: KÖLN
Version: ---
     Beitrag Verfasst am: 01.05.2011, 18:19     Titel: Ode45: Dgl*Vektor lösen
  Antworten mit Zitat      
Hallo!

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)

[~,~,~,f] = windkessel_f();
R0=0.08;
Cs=2.75;
Rs=1.0;
a=0.0007;
b=5;
c=1.6;
d=1;
out = [(-(((Rs+R0)/(R0*Rs*Cs)))*y(1))+(1/(R0*Cs))*(a*((y(2)-b)^2)+((c*y(2)-d)*f)); (1/R0)*y(1)-((1/R0)*((a*(y(2)-b).^2)+((c*y(2)-d)).*f))];
-----------------------------------------------------------
 


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
Private Nachricht senden Benutzer-Profile anzeigen


sutoppu
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 26.04.11
Wohnort: KÖLN
Version: ---
     Beitrag Verfasst am: 01.05.2011, 18:38     Titel:
  Antworten mit Zitat      
So, ich habe jetzt selbst schon erkannt, dass die Parameter da schon so hingehören Smile
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?
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: 01.05.2011, 18:46     Titel: Re: Ode45: initial conditions vector?
  Antworten mit Zitat      
Hallo sutoppu,

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.

Wieso ist "out" so groß?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 26.04.11
Wohnort: KÖLN
Version: ---
     Beitrag Verfasst am: 01.05.2011, 18:54     Titel:
  Antworten mit Zitat      
Hallo Jan,

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.

Gruß, Sutoppu
Private Nachricht senden Benutzer-Profile anzeigen
 
sutoppu
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 26.04.11
Wohnort: KÖLN
Version: ---
     Beitrag Verfasst am: 01.05.2011, 19:42     Titel:
  Antworten mit Zitat      
Wenn ich f durch 1 ersetzte, dann funktioniert es. Das ist ja schonmal gut. Jetzt muss ich nur wissen, wie ich f in meine dgl einbauen kann...

f sieht bei mir so aus:
Code:

%Parameter
t_p = 0.3;
t_r = 0.175;
t_c = 0.15;
alpha = 1.44;
t_b = t_p.*(1-((t_r./t_c).^(alpha./(alpha-1))).*(((exp(-(t_p./t_r).^(alpha)))./(1-exp(-(t_p./t_c)).^(alpha))).^(1/(alpha-1))));
h = 0.0001;
t_end=1;
N = t_end/h;

%Funktion f, bestehend aus g1 und g2, jeweils mit Nenner normalisiert

f = zeros(N+1,1);
t = zeros(N+1,1);

i=1;
while t(i) < t_end;
    g1(i+1)=(1-exp(-(t(i)./t_c).^(alpha)));
    g2(i+1) = (g1(i+1).*(exp(-((t(i)-t_b)/t_r).^(alpha))));
    nenner (i+1) = ((1-exp(-(t_p/t_c).^(alpha)))*((exp(-(t_p-t_b)/t_r).^(alpha))));
    f1(i+1)=g1(i+1)/(nenner(i+1));
    f2(i+1)=g2(i+1)/(nenner(i+1));
   
    if t(i)<= t_b;
       f(i+1)= f1(i+1);
     else
        f(i+1)=f2(i+1);
     
     end;
    t(i+1) = t(i)+h;
    i=i+1;
end;


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?
Private Nachricht senden Benutzer-Profile anzeigen
 
sutoppu
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 26.04.11
Wohnort: KÖLN
Version: ---
     Beitrag Verfasst am: 02.05.2011, 09:19     Titel:
  Antworten mit Zitat      
Guten morgen!

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;

R0=0.08;
Cs=2.75;
Rs=1.0;
a=0.0007;
b=5;
c=1.6;
d=1;
out = [(-(((Rs+R0)/(R0*Rs*Cs)))*y(1))+(1/(R0*Cs))*(a*((y(2)-b)^2)+((c*y(2)-d).*f(i))); (1/R0)*y(1)-((1/R0)*((a*(y(2)-b).^2)+((c*y(2)-d)).*f(i)))];
  i=i+1;
end;

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 Sad

Kann mir bitte jemand helfen?
Private Nachricht senden Benutzer-Profile anzeigen
 
sutoppu
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 26.04.11
Wohnort: KÖLN
Version: ---
     Beitrag Verfasst am: 02.05.2011, 11:54     Titel:
  Antworten mit Zitat      
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 Sad
Private Nachricht senden Benutzer-Profile anzeigen
 
sutoppu
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 26.04.11
Wohnort: KÖLN
Version: ---
     Beitrag Verfasst am: 02.05.2011, 15:13     Titel:
  Antworten mit Zitat      
Hat funktioniert Smile
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.