Matlab:从ODE45导出variables
我有一个使用许多函数的ODE。 我希望导出这些“帮手”function,以便我可以将它们与ODE的自variables进行比较。
function dFfuncvecdW = ODE(W,Ffuncvec); X = Ffuncvec(1); y = Ffuncvec(2); #lots of code R = ... #R is a function of X,W and y. #and a few other functions that are a function of X,W and y. dXdW = ... #some formula dydW = ... #some formula dFfuncvecdW = [dXdW; dydW]; end
我用这个函数调用这个函数
Wspan = [0 8000.] X0 = [0; 1.] [W,X] = ode45(@ODE, Wspan, X0);
我可以很容易地输出X或W到一个Excel文件:
xlswrite(filename,X,'Conversion','A1');
但我需要的是将“R”和许多其他函数的值保存到Excel文件。
我怎么做?
对于Matlab我还是很新的。 我通常使用Polymath,但是对于这个ODE系统,Polymath无法在合理的时间内计算出答案。
编辑1:我使用的代码是由Polymath生成的。 我使用了我的问题的一个基本版本,以便Polymath可以超越程序,因为一旦Polymath代码成功运行,它只会提供Matlab代码。 输出后,input完整的方程组。
最简单也可能是最快的方法是在 ode45
返回W
和X
之后重新评估你的函数。 如果这些function是vector化的,那将很容易。 否则,只需使用从1
到length(W)
迭代的简单for
循环。
或者,您可以使用输出函数将每次迭代中的值保存到文件或global
或最有效的子函数(又名嵌套函数 )variables,该variables与外部函数共享作用域(请参见例)。 有关如何使用输出函数的示例,请参阅我的答案 。
我find了一个相当快速和无痛的解决scheme来回答我的问题。 我只是在ode函数中附加了一个带有代码的文本文件。
编辑:我无法发表评论,因为我在SE的这个分支上有足够的代表。 我的解决scheme是添加下面的代码:
fid = fopen('abc1.txt', 'at'); fprintf(fid, '%f\n', T); fclose(fid);
正上方
dYfuncvecdW = [dFAdW; dFBdW; dFCdW; dFDdW; dydW];
在ode函数的末尾。 这被certificate是一个临时解决scheme。 我已经打开了关于我收到的输出的另一个问题。