我想为参数的多个值求解 ODE,p最重要的是,保存所有不同值的所有解决方案。
到目前为止,我一直在使用这个:
p = -200:+1:300;
time = 0:.01:10;
y0 = [0 0 0 0 0 0 0 0];
y = NaN(length(time),length(y0),length(p));
for i=1:length(p)
[t,y(:,:,i)] = ode45(@myode,time,y0,[],p(i));
end
但它有t预定义的,这是不应该的。
我认为的一个问题是,我无法将y所有时间t的所有值和所有值存储p在矩阵中,因为我无法t在循环之前使用该变量。如果我改用变量time,我将无法利用ODE45使用自己的dt区间的积分,这取决于它将遇到的非线性。
我能想到的一个潜在解决方案如下:
p = -200:+1:300;
time = [0 10];
y0 = [0 0 0 0 0 0 0 0];
y = NaN(1,length(y0),length(p));
for i=1:length(p)
[t,x] = ode45(@ode,time,y0,[],p(i));
y(1:length(t),:,i) = x(:,:);
end
在这种情况下,它设法存储所有值,但是,集成步骤从一个循环变为另一个循环。因此,对于最短 的情况length(t),由于它们都共存于同一个矩阵中,因此剩余的矩阵位置为0。我知道我可能需要使用插值来查找已自动替换为0.
我在循环中使用以下行,但它不起作用:
y(1:length(t),:,i) = interp1(x,time)
因为我想使用 进行插值tspan,但没有成功。我猜我在插值上做错了什么。
我真的很感激任何建议!