gpt4 book ai didi

matlab - 如何在不使用嵌套函数的情况下求解 ODE?

转载 作者:太空宇宙 更新时间:2023-11-03 20:17:10 29 4
gpt4 key购买 nike

我有一些微分方程需要使用 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。

--洛伦

关于matlab - 如何在不使用嵌套函数的情况下求解 ODE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1572268/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com