Excel Matlab:从ODE45导出变量

Excel Matlab:从ODE45导出变量,excel,matlab,Excel,Matlab,我有一个使用很多函数的ODE。我希望导出这些“helper”函数,以便将它们与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 =

我有一个使用很多函数的ODE。我希望导出这些“helper”函数,以便将它们与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还是非常陌生。我通常使用博学,但对于这个ODE系统,博学无法在合理的时间内计算出答案


EDIT1:我使用的代码是由Polymath生成的。我使用了我的问题的一个基本版本,这样Polymath就可以超越这个程序,因为它只在Polymath代码成功运行后给出Matlab代码。导出后,输入完整的方程组。

处理此问题的最简单、可能也是最快的方法是在
ode45
返回
W
X
后重新评估函数。如果函数是矢量化的,那就很容易了。否则,只需使用一个简单的
for
循环,从
1
迭代到
length(W)


或者,您可以使用将每次迭代的值保存到文件中,或者使用
全局
,或者最有效的是,使用与外部函数共享作用域的子函数(也称为)变量(例如,请参见)。有关如何使用输出函数的示例,请参见我的。

处理此问题的最简单且可能最快的方法是在
ode45
返回
W
X
后重新评估函数。如果函数是矢量化的,那就很容易了。否则,只需使用一个简单的
for
循环,从
1
迭代到
length(W)


或者,您可以使用将每次迭代的值保存到文件中,或者使用
全局
,或者最有效的是,使用与外部函数共享作用域的子函数(也称为)变量(例如,请参见)。有关如何使用输出函数的示例,请参见我的一位同事。

我找到了一个相当快速且无痛的解决方案。 我只是在ode函数中附加了一个文本文件和代码

编辑:我无法发表评论,因为我在SE的这个分支上有足够的代表。 我的解决方案是添加以下代码:

fid = fopen('abc1.txt', 'at');
fprintf(fid, '%f\n', T);
fclose(fid);
正上方

dYfuncvecdW = [dFAdW; dFBdW; dFCdW; dFDdW; dydW]; 

在ode函数的末尾。这证明是一个暂时的解决办法。关于我收到的输出,我又提出了一个问题。

我找到了一个相当快速、无痛的解决方案。 我只是在ode函数中附加了一个文本文件和代码

编辑:我无法发表评论,因为我在SE的这个分支上有足够的代表。 我的解决方案是添加以下代码:

fid = fopen('abc1.txt', 'at');
fprintf(fid, '%f\n', T);
fclose(fid);
正上方

dYfuncvecdW = [dFAdW; dFBdW; dFCdW; dFDdW; dydW]; 

在ode函数的末尾。这证明是一个暂时的解决办法。我对收到的输出提出了另一个问题。

我不能只是重新评估函数,因为它非常复杂,将来会变得更加复杂。如果我使用重新评估方法,我将有200多个方程对大量点进行重新评估。我使用Matlab来加速计算,因为Polymath非常慢(50分钟的运行时间)。关于输出函数方法:我不知道如何使用它,你链接我的帖子远远超出了我的Matlab知识。我发现:我可以使用ODE函数中的disp(var)将变量的值输出到工作区。我如何将它们连续保存到文件中?(追加文件)@22134484:如果您在为您的案例实现输出函数时遇到问题,您可以更新您的问题,以指示您尝试了什么以及什么不起作用。或者,你可以问一个关于输出函数的新问题,说明你尝试了什么,并详细说明了什么不起作用。我不能只是重新评估函数,因为它非常复杂,将来会变得更复杂。如果我使用重新评估方法,我将有200多个方程对大量点进行重新评估。我使用Matlab来加速计算,因为Polymath非常慢(50分钟的运行时间)。关于输出函数方法:我不知道如何使用它,你链接我的帖子远远超出了我的Matlab知识。我发现:我可以使用ODE函数中的disp(var)将变量的值输出到工作区。我如何将它们连续保存到文件中?(追加文件)@22134484:如果您在为您的案例实现输出函数时遇到问题,您可以更新您的问题,以指示您尝试了什么以及什么不起作用。或者,你可以问一个新问题,特别是关于输出函数的问题,显示你尝试了什么,并详细说明了什么不起作用。很高兴你找到了解决方案。然而,这个答案严重缺乏细节——只不过是一个评论而已。您应该更新它以更具体地显示您所做的工作,包括代码。此外,从ODE函数中保存到输出文件可能会导致额外的无效/不一致数据。ODE函数可以在每个时间步长上计算多次(例如,在无效步长的情况下)。正如我在回答中提到的,使用输出函数可以避免这种情况。成功执行步骤后,每个时间步只调用一次输出函数。很高兴您找到了解决方案。然而,这个答案严重缺乏细节——只不过是一个评论而已。您应该更新它以更具体地显示您所做的工作,包括代码。此外,从ODE函数中保存到输出文件可能会导致额外的无效/不一致数据。ODE函数可以在每个时间步长上计算多次(例如,在无效步长的情况下)。正如我在回答中提到的,使用输出函数可以避免这种情况。成功执行步骤后,每个时间步仅调用一次输出函数。