【发布时间】:2017-06-08 23:07:22
【问题描述】:
我有一个微分方程,它是大约 30 个常数的函数。微分方程是 (N^2+1) 个方程组(其中 N 通常为 4)。求解这个系统会产生 N^2+1 个函数。
我经常想看看微分方程的解在函数上是如何依赖于常数的。例如,我可能想绘制一个输出函数的最大值,并查看当我线性增加一个输入常数时,该最大值如何随着微分方程的每个解而变化。
有没有特别干净的方法可以做到这一点?
现在,我将我的微分方程求解脚本变成了一个返回输出函数数组的大函数。 (一些输入是向量和矩阵)。例如:
for i = 1:N
[OutputArray1(i, :), OutputArray2(i, :), OutputArray3(i, :), OutputArray4(i, :), OutputArray5(i, :)] = DE_Simulation(Parameter1Array(i));
end
在这里我循环遍历函数。该函数求解一个微分方程,然后返回该输入参数的一组解函数,然后将每个函数作为一行附加到矩阵中。
我的方法存在一些问题:
如果我想查看不同参数的微分方程的解,我必须重新定义函数,使其成为其他 30 个参数之一的输入。为了代码的可读性,我看不到自己将所有输入参数显式地写为单独的输入。 (虽然我读过结构在这里可能会有所帮助,但我不确定如何实现。)
我通常会迷失在参数空间中,并且经常需要跨多个脚本更新相同的参数。我有一个运行微分方程求解函数的脚本,我有一个绘制一组模拟数据的第二个脚本。 (并且我会将局部变量保存到一个文件中,以便我可以显式加载它们以进行绘图,但我经常迷失在弄清楚哪个文件与哪组参数相关联)。不在函数输入中的其余参数在函数本身内部。我尝试将参数设为全局,但这样做会大大降低代码的速度。此外,一些输入是我想在运行求解器之前绘制和查看的数组。 (有些输入是时间相关的边界条件,我经常想先看看它们是什么样子的。)
我正在尝试找出一种让我跟踪所有内容的好方法。我试图想出一种聪明的方法来保存生成的图形,文件标签显示与该图形关联的所有参数。我可以将这样的文件保存为记事本文件,并在图的标题中列出一个通用的标记号,但我觉得这是一个尴尬的系统。这特别尴尬,因为很难看出一长串 30 多个参数的不同之处。
总的来说,我觉得我正在做的事情相当简单,但我觉得我没有一个好的编码方法,因此最终浪费了大量时间来节省几乎相同的功能和脚本来解决相当简单的任务。
【问题讨论】:
标签: matlab function numerical-methods differential-equations