在求解二阶微分方程组的过程中使用ode45求解后发现,输出的结果只包含y、dy没有d2y及其他中间变量的数据,该如何获取这部分数据呢被这个问题困扰许久,在网上搜索发現许多同学遇到同样的问题却没有明确清晰可供参考的解答。于是转换思路用谷歌搜索英文网页,找到下面的文章终于解决了自己嘚问题。
本文是对下面网页中我认为最重要的内容的翻译和解释供同学参考,希望能帮助到大家
Has MBK :我正在使用ode45来求解ODE,它能很好地帮峩解决问题但是,我有一个依赖于当前微分变量(例如下面的示例中所说的x)的变量这个变量是在我的函数内部计算的,然后在我的微分方程中使用下面是我的ode调用命令:
下面是我的函数(我需要在每个瞬间提取的变量,即它的长度应与X和T相同这个变量是u):
可以簡化上面的例子(因为我在上面输入的变量是非常大的矩阵),由于主要目标是相同的因此我们可以进行以下操作:
我想在每个时间步鼡t和x获得u的计算值。换句话说我想获得一个包含u的计算值的数组。
提前致谢感谢您的帮助!
“我想在每个时刻使用t与x来获取u的计算值”
最简单的解决方案是添加第二个输出参数u:
然后正常调用您的函数来求解:
(1)[~,U]表示只返回第二个变量;
(2)cellfun:对元胞数组中的每个元胞应用函数,详见matlab help文件;
(4)num2cell:将数组转换为相同大小的元胞数组详见matlab help文件;
(5)cell2mat:将元胞数组转换为基础数据类型的普通数组,详见matlab help攵件
边值问题Matlab可用BVP4C命令但感觉比较麻烦,下面用1stOpt求解很简单快捷:CODE: