ode函数和outputfcn的同一时间步骤

1视图(最近30天)
Amavi Silva
Amavi Silva 2021年8月19日
在以下模型中,我需要知道模型参数“ k”的值以及“ y”。要找到K,我使用了“ outputfcn”。但是,在运行模型后,我获得了K数组(13)和“ Y”阵列(94)的不同长度。但是我需要知道的是,每次迭代用来计算每个“ y”值的值(或仅仅是两个数组的相似长度)。此外,与OutputFCN中调用的相同的“ x”相比,我看到ode函数中调用的“ x”(等效于时间)也具有不同的数组长度(94)(13)。我知道这背后的原因是,在每个集成时间步长而不是在ode函数的每个调用之后,outputfcn生成参数值。我以为我也许会通过将固定时间步骤划分到ODE函数来解决问题。但是问题仍然相同。无论如何,我是否可以修改脚本,其中outputfcn和ode函数都会使用相同的x'返回“ k”和'y'的相同数组长度?否则我还有其他方法可以得到我的预期结果吗? Any help is much appreciated.
谢谢!
全球的K_ALL KX
选项= odeset(“ reltol',1E-3,'outputfcn',@get_process,'Maxstep',100,“初始步骤”,1);
kx = [];%l和x值一起
k_all = [];百分比所有值
T0 = 0;
TF = 2000;
TSPAN = T0:0.005:TF;
[x,y] = ode45(@myode,tspan,1,options);
功能dydx = myode(x,y)
全球的Kx
k = x。^2 + y。^2;
kx = [k x];
dydx = x + k。*y;
结尾
功能[状态] = get_process(x,y,flag);
全球的kx k_all
k_all = [k_all;kx];
状态= 0;
结尾

答案(1)

艾伦·史蒂文斯(Alan Stevens)
您可以简单地计算
k = x。^2 + y。^2;
之后立马
[x,y] = ode45(@myode,tspan,1,options);
但是,您真的看过您的颂歌吗?实际上,你有
dy/dx = x + x。^2.*y + y。^3;
然后您从y = 1开始。
y迅速炸毁,X稍大于0.4后不会收敛,因此您不可能到达X = 2000。

社区寻宝

在Matlab Central中找到宝藏,发现社区如何为您提供帮助!

开始狩猎!