如果妳用過simulink裏的ode45配置,我覺得妳就會發現高贊就是在扯淡,妳給的時間序列只是采樣點,根本不是設置步長用的。我最近偷懶不想用simulink就研究了下ode45的函數配置項,在matlab幫助裏搜壹下“Summary of ODE Options”,裏面詳細羅列了各種ode函數有的參數,最大步長想必也猜的出來,就是“MaxStep”,用法也在ode45函數的幫助裏寫了,我簡單舉個例子:
tspan?=?1:1e-3:30;xini?=?[?1?1?1]';
options?=?odeset('MaxStep',?1e-2,?'RelTol',1e-2,'AbsTol',1e-4);
[~,?results]?=?ode45(@(t,x)?myodefunc(t,?x,?user_args?),?tspan,?xini,?options);
是的,就是通過odeset函數設置,options參數寫入。設置的細節請參考Matlab幫助。
我看還有同學在糾結ode45的固定步長設置方法,提壹句:首先,ode45 是壹個變步長函數,不可能設置為定步長的。其次,需要定步長的ode函數可以在Matlab幫助裏搜壹下“Solvers for Real-Time Simulation”,裏面詳細介紹了壹些定步長的ode函數。但要註意Matlab本身是沒有這些函數的,需要用simulink仿真才能配置。
如果實在不想用simulink,那自己手寫壹個函數也行(雖然我沒寫過),定步長的ode函數裏常用的是ode4,也就是四階龍格庫塔算法,可以參考這個博客:susanliuliu28-四階龍格庫塔