如何在不使用嵌套函数的情况下求解 ODE?
题
我需要使用 MATLAB 的 ODE 求解器求解一些微分方程。虽然微分方程本身相当简单,但它们取决于很多“常数”。这些常量不是通用的,需要由调用者提供。
这种类型的 ODE 示例如下:
dx/dt = -j * (k + x) ./ (l + x)
其中 j、k 和 l 是常数,x 是变量。
到目前为止,我解决这些问题的方法是使用一个函数,该函数接受所有初始值和所有常量值(大约有 10 个)作为参数,然后调用一个内部“step”函数,该函数接受MATLAB 对其 ODE 求解器期望的形式的向量。所以...
function [outputVector] = someFunction(x, y, j, k, l, m, n, o)
function [output] = someFunctionStep(t, inputVector)
x = inputVector(1);
y = inputVector(2);
dx = -j .* (k + x) ./ (l + x);
dy = -m .* (n + y) ./ (o + y);
output = [dx;dy]
end
outputVector = ode15s(@someFunctionStep, [0, endTime], [x,y]);
end
然而,随着变量数量和代码大小的增加,这变得越来越不优雅,并导致代码几乎难以阅读。因此,我想做的是将每个系统的阶跃函数移至其自己的文件中,而不必 a)将常量传递给输入向量中的阶跃函数或 b)使用全局变量。有没有合理的方法可以做到这一点,或者我应该忍住并编写丑陋的代码?
其他提示
我看不出你的代码,如写的,可以工作,因为从来没有人要求或指向someFunctionStep。如果是这样的第一输入至ode15s?
在任何情况下,可以单独写someFunctionStep函数,它varargin或输入。然后创建一个常量的匿名函数。传递到ode15s。
- 洛伦
不隶属于 StackOverflow