我在函数文件calculate_a1
中保存了相当冗长的方程组。我需要这个系统中的一个参数根据时间改变。我创建了第二个函数a1
,它在我的每个401时间点生成一个参数 tResult = [];
xResult = [];
tStep = linspace(0,400,401);
y0 = [IC];
alpha = calculate_a1();
for index = 2:numel(tStep)
% Integrate:
a1 = alpha(1,index);
t = tStep(index-1:index);
sol = ode45(@system3,t,y0,a1)
% Collect the results:
tResult = cat(1, tResult, t);
xResult = cat(1, xResult, x);
% Final value of x is initial value for next step:
y0 = x(end, :);
end
的向量。
sol
在a1
行之前,这很好用,但我很难用ode45
导出system3
,以便可以用它来解决ShellExecute(0, L"open", L"http://E:/path/to/file.txt", 0, 0, 1);
。任何帮助将不胜感激。
答案 0 :(得分:1)
那不行。 ode45
需要在更多时间点评估此参数。首先,您给出的时间列表仅确定输出,其值是从位于动态调节的采样时间点的内部采样内插的。第二,每个内部时间步骤包括在时间步的不同部分对ODE函数进行5次评估。
您可以做的最好的事情是将calculate_a1
后面的函数作为参数,这样在ODE函数的每次评估中都可以计算出对应于这个确切时间的正确a1
。
插值不是一个好主意,因为在节点处,步长调节器将“感觉”有限的平滑度作为系统的刚度,从而调节步长,这大大增加了计算时间和浮点误差的累积