使用时间步长相关的变量在Matlab中使用ODE45求解。

时间:2015-02-19 21:33:48

标签: matlab ode

我一直在解决一组非常简单的ODE,对于特定情况,它会产生我期望的结果。所需的输出是“人口”的图表,它只是对ODE结果输出的操纵。

问题是我有一些变量 del ,随着时间的推移,它必须慢慢增加(减慢为 del_increment / time_increment<< Omega ^ 2 ,其中Omega设置为1)。我可以愉快地产生我所谓的'静态'情况,我在ode45之外有一个for循环递增del,但这实际上只是一段时间内静态del值的解决方案。

我很难看到我如何在函数中使ODE45增加del值[在max和min之间],因为我有del对时间的微小变化的限制。这将显示一个图,显示零人口的小振荡和逐渐增加到人口= 1,而不是我当前的每个特定 del 值的多个图。

我已经给出了我在下面写的内容,我希望这种解释是有道理的。

del=-10:0.1:10; %start at large minus, with some small increment 
Omega=1;

tmax=10; %integration time

for ret=1:length(del)

 y=[0 0 1];  % starting conditions


 [t,y]=ode45(@(t,y) psfour(t,y,del(ret)),[0 tmax],y);


 plot(t,y(:,1))    % plot of one of the solutions 
 axis([0 max(t) -1 1])


 p_11=0.5*(1+y(:,3)); %calculation of the population of an energy level

 figure(2)
 plot(t,p_11)
 axis([0 max(t) 0 1])
 pause(0.05)  % asthetic pause so I can see results 
end

和我的功能

function dydt = react(t,y,del)

dydt = zeros(size(y));

Omega=1;
A = y(1); 
B = y(2); 
C = y(3);



dydt(1) = del*B;
dydt(2) = -del*A + Omega*C;
dydt(3) = -Omega*B;

% del=del + Omega*t;

end

0 个答案:

没有答案