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

在Matlab中使用ODE45求解,变量与时间步长相关。,matlab,ode,Matlab,Ode,我一直在解决一组非常简单的ODE,对于特定的情况,它会产生我所期望的结果。所需的输出是“总体”图,它只是对ODE输出的结果进行操作 问题是,我有一些变量del,它必须随着时间的推移缓慢递增,以del_增量/time_增量的顺序。导数函数有当前时间作为输入,它是反应t,y,del中的t。因此,只需将其用作每一步的时间值,并在导数函数中为del生成一个简单的函数。它起作用了!我一定是在放屁。谢谢你的帮助大卫:我不知道你的最终目标是什么,但是你想用ode45做什么可能是个坏主意。对于给定的时间步,可能

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


问题是,我有一些变量del,它必须随着时间的推移缓慢递增,以del_增量/time_增量的顺序。导数函数有当前时间作为输入,它是反应t,y,del中的t。因此,只需将其用作每一步的时间值,并在导数函数中为del生成一个简单的函数。它起作用了!我一定是在放屁。谢谢你的帮助大卫:我不知道你的最终目标是什么,但是你想用ode45做什么可能是个坏主意。对于给定的时间步,可能会多次调用集成函数react,例如,对于失败的步骤。就我记忆所及,传递到react的t值甚至不能保证单调增加。您应该实现自己的固定步长Runge-Kutta方案来实现您的建议。或者您自己的自适应方案,您可以在其中可靠地访问步长。然而,我想有另一种解决问题的正确方法可以避免所有这些。
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