【问题标题】:Solving ODE in MATLAB with a function that its numerical value can be evaluated everywhere在 MATLAB 中用一个可以在任何地方计算其数值的函数来求解 ODE
【发布时间】:2015-06-02 13:05:09
【问题描述】:

例如,如果我有以下 ODE: y''+y=0

在 Matlab 中我可以假设 y(1)=y 和 y(2)=y',那么

dy(1)=y(2)

dy(2)=-y(1)

现在,如果我有 y''+f(x)*y=0 形式的 ODE,其中 f(x) 是一个函数,我可以在任何地方计算它的数值,但你没有解析形式,不能将 f(x) 拟合到某个函数。那么我的问题是,如果我想将 f(x) 的值放入 ODE 中,如何在 MATLAB 中对这个 ODE 进行数值求解,例如,

f(x)=0.1 当 x

当 x>=0.5 时 f(x)=1.0

这个 ODE 可能不切实际,但它给出了我面临的问题的一个想法。请不要分段解决。那可行吗?还是我必须自己编写 ODE 求解器?

提前感谢您的意见。

【问题讨论】:

标签: matlab solver ode


【解决方案1】:

您可以应用相同的技巧。调用 y → y(1) 和 y' → y(2)。那么

d/dx y(1) = y(2)

d/dx y(2) = - f(x) * y(1)

实现一个函数

function dy = myodefun(x, y)
dy = zeros(2, 1);
dy(1) = y(2);
dy(2) = - f(x) * y(1);

或明确地用于您的示例

function dy = myodefun(x, y)
dy = zeros(2, 1);
dy(1) = y(2);
dy(2) = - (0.1 + (x >= 0.5) * 0.9) * y(1);

并将其交给标准求解器,例如ode45.

【讨论】:

  • 谢谢 A. Donda。但是 f(x) 是一个包含 1000 个数据点的向量吗?在我提供的示例中 f(x) 仍然可以写成函数,但是如果 f(x) 不能显式表示为函数怎么办?
  • 你应该在问题中提到这一点。他们用你写的方式看起来你确实有一个f(x)的实现。
【解决方案2】:

我自己找到了这个问题的解决方案:

http://www.mathworks.com/help/matlab/ref/ode45.html?searchHighlight=interpolate

必须使用插值。但似乎是一种可行的方式。

欢迎任何其他方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-09
    • 2019-07-14
    • 2016-02-17
    • 1970-01-01
    • 2019-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多