Matlab中无时间跨度的Matlab集成

2024-09-30 02:36:05 发布

您现在位置:Python中文网/ 问答频道 /正文

Scipy集成允许我们一次一个自适应的时间步进行ode集成,并对它做些什么。但是,matlabode需要我们指定一个timespan,并确定其中的自适应时间步,但不能在其中执行操作。你知道吗

来自scipy

ODE.set_initial_value(y0, tlist[0])
numoftimes = len(tlist)
for ii in range(1, numoftimes):
    # while loop up to tlist[ii]
    while ODE.t < tlist[ii]:
        t_prev = ODE.t
        y_prev = ODE.y            
        # integrate up to tlist[ii], one step at a time.
        ODE.integrate(tlist[ii], step=1)
        #do something to the output
        ...

但是,在matlab中,我没有做到这一点,主要是step=1在matlabode套件中不可用。你知道吗

尝试是使tspan在matlabode套件中变得非常小。但这是不适应性的。在某些区域,原始的ode timestep非常大(非僵硬),但在某些区域,ode timestep非常小(僵硬)。你知道吗

tlist = [0 tf]    
numoftimes = len(tlist)
for ii = 1:numoftimes
     # while loop up to tlist(ii)
     while t_prev < tlist(ii)
            t_prev = T(end,:)
            y_prev = Y(end,:)           
            # integrate up to tlist(ii), one step at a time.
            t    = [t_prev,t_prev+0.0000000000001];
            [T, Y] = ode45(dydt, t, y);
            #do something to the output
            ...
     end
end

这是不好的,因为我有,即使ode45集成只有一个步骤 1强制时间步长为固定间隔 2由于在某些非刚性区域,“原始自适应”时间步长不需要那么小。你知道吗

如何使用matlab ode套件解决此问题?你知道吗


Tags: to套件step时间endiiodeintegrate

热门问题