我有一个使用许多功能的ODE。我希望导出这些“辅助”函数,以便我可以将它们与ODE的自变量进行图形化。
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无法在合理的时间内计算出答案。
EDIT1:我使用的代码是由Polymath生成的。我使用了我的问题的基本版本,以便Polymath可以执行该程序,因为只有在Polymath代码成功运行后它才会提供Matlab代码。导出后,输入了完整的方程组。
答案 0 :(得分:0)
处理此问题的最简单,也可能是最快的方法是在 ode45
返回W
和X
后重新评估您的函数。如果函数是矢量化的,那将很容易。否则,只需使用从for
到1
迭代的简单length(W)
循环。
或者,您可以使用output function将每次迭代的值保存到文件或global
,或者最有效地保存子函数(又名nested function)与外部函数共享范围的变量(例如,请参阅here)。有关如何使用输出函数的示例,请参阅我的this answer。
答案 1 :(得分:0)
我找到了一个相当快速且无痛的解决方案。 我只是在ode函数中添加了一个包含代码的文本文件。
编辑:我无法评论,因为我在SE的这个分支上有足够的代表。 我的解决方案是添加以下代码:main_loop
正上方
fid = fopen('abc1.txt', 'at');
fprintf(fid, '%f\n', T);
fclose(fid);
在ode函数结束时。这被证明是一种临时解决方案。我已经打开了另一个关于我收到的输出的问题。