Matlab:使用ode45导出更改变量以在单独的函数文件中解决ODE

时间:2016-01-05 14:38:18

标签: matlab ode numerical-integration

我在函数文件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); 。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

那不行。 ode45需要在更多时间点评估此参数。首先,您给出的时间列表仅确定输出,其值是从位于动态调节的采样时间点的内部采样内插的。第二,每个内部时间步骤包括在时间步的不同部分对ODE函数进行5次评估。

您可以做的最好的事情是将calculate_a1后面的函数作为参数,这样在ODE函数的每次评估中都可以计算出对应于这个确切时间的正确a1

插值不是一个好主意,因为在节点处,步长调节器将“感觉”有限的平滑度作为系统的刚度,从而调节步长,这大大增加了计算时间和浮点误差的累积