Verzweifelt versuche ich folgendes Problem zu lösen:
Ich habe eine Aufgabenstellung, die von 2 DGLs beschrieben wird. ( wenn die Lösung der einen DGL null wird, dann , wird auf die andere DGL umgeschaltet und umgekehrt )
Dieses Umschalten kriege ich mit der "Events"-Funktion hin, denke ich.
Ich bekomme auch eine Lösung, die ich plotten kann.
Allerdings bekomme ich nach dem Ende des Rechenvorgangs folgende fehlermeldung:
Zitat:
When the first argument to ode113 is a function handle, the tspan and y0 arguments must be
supplied.
warum kommt Matlab mit der Fehlermeldung, dass ich die Zeitspanne und die Anfangsbedingungen angeben muss, denn die sind doch angegeben ?! (mit t0, tmax, y0)
Ich schätze, der Fehler taucht auf, wenn zur 2. DGL gewechselt wird, doch dafür habe ich doch die notwendigen Parameter auch nach der 1. DGL initilisiert .....
Wie gesagt, ich bekomme ja trotzdem eine Lösung, allerdings eine Lösung mit Fehlermeldung ist nicht, dass , was man unbedingt will...
dadurch, dass ich doch y0= ye und to=te nach dem ersten solver setze wird doch der letzte erreichte Zustand an den nächsten Solver übergeben..oder nicht ?
So weiß ihc nicht, warum denn beim 2. Solver die fehlermeldung erscheint, dass ich tspan und y0 angeben muss...
t0=0;% untere Zeitschranke
y0=inc;% y0=Anfangsbedingungen
options=odeset('RelTol',1e-6,'Events',@events);% Optionen für den solver, insbesondere die Übergabe der Eventfunktion
[t1 y1 te1 ye1]=ode113(@ode_oneblock__case_1,[t0 tmax],y0,options,p); % Lösen der 1. DGL , bis y null wird
y0=ye1;% Werte von y und y_punkt sind die neuen Startbedingungen
t0=te1;% Zeit, wo y null wird, ist die neue untere Zeitschranke subplot(1,3,1); % PLotten der Ergebnisse hold on;
plot(t1,y1);
title('solution');
xlabel('time');
ylabel('angle/angular velocity');
legend('theta','thetaprime');
subplot(1,3,2);
hold on;
plot(y1(:,1),y1(:,2));
title('phase-plane');
xlabel('angle');
ylabel('angular velocity');
subplot(1,3,3);
hold on;
e=0.5*(Is+m*R^2)*y1(:,2).^2+m*g*R*cos(alpha-y1(:,1));
plot(t1,e);
xlabel('time');
ylabel('total energy');
title('total energy');
[t2 y2 te2 ye2]=ode113(@ode_oneblock_case_2,[t0 tmax],y0,options,p); % Lösen der 2. DGL mit neuen Startbedingunen
y0=ye2;% Werte von y und y_punkt sind die neuen Startbedingungen
t0=te2;% Zeit, wo y null wird, ist die neue untere Zeitschranke subplot(1,3,1);%Plotten der Ergebnisse
hold on;
plot(t2,y2);
title('solution');
xlabel('time');
ylabel('angle/angular velocity');
legend('theta','thetaprime');
subplot(1,3,2);
hold on;
plot(y2(:,1),y2(:,2));
title('phase-plane');
xlabel('angle');
ylabel('angular velocity');
subplot(1,3,3);
hold on;
e=0.5*(Is+m*R^2)*y2(:,2).^2+m*g*R*cos(alpha+y2(:,1));
plot(t2,e);
ylim([-10*e(1,:)10*e(1,:)]);
xlabel('time');
ylabel('total energy');
title('total energy');
%Jetzt sollte die Schleife wieder von vorne beginnen,
%das heißt die erste DGL wird mit den neuen Startbedingungen gelöst und
%neue Werte werden den Plots hinzugefügt
function[value,isterminal,direction] = events(t,y,p)%Definition des Events, d.h. wenn y ==0, wird die Integration gestoppt
value = y(1);
isterminal = 1;
direction = 0;
function dy=ode_oneblock__case_1(t,y,p); %Definition der 1. DGL , als Parameter wird, Zeit, y und zusätzloche Parameter (Konstanten)übergeben
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.