【问题标题】:Solving an ODE when the function is given as discrete values -matlab-当函数作为离散值给出时求解 ODE -matlab-
【发布时间】:2013-11-12 23:44:22
【问题描述】:

我有以下 ODE:

x_dot = 3*x.^0.5-2*x.^1.5  % (Equation 1)

我正在使用ode45 来解决它。我的解决方案是一个 dim(k x 1) 的向量(通常是 k = 41,由tspan 给出)。

另一方面,我已经制作了一个与 (1) 中的模型近似的模型,但是为了比较第二个模型的准确度,我想通过 @987654324 求解它(求解第二个 ODE) @。我的问题是这第二首颂歌是离散的:

x_dot = f(x) % (Equation 2)

f 是离散的,而不是像 (1) 中的连续函数。我对f 的值是:

0.5644
0.6473
0.7258
0.7999
0.8697
0.9353
0.9967
1.0540
1.1072
1.1564
1.2016
1.2429
1.2803
1.3138
1.3435
1.3695
1.3917
1.4102
1.4250
1.4362
1.4438
1.4477
1.4482
1.4450
1.4384
1.4283
1.4147
1.3977
1.3773
1.3535
1.3263
1.2957
1.2618
1.2246
1.1841
1.1403
1.0932
1.0429
0.9893
0.9325
0.8725

我现在想要的是使用ode45 解决第二个颂歌。希望我能得到一个与(1)中的解决方案非常相似的解决方案。如何解决应用ode45 的离散颂歌?是否可以使用ode45?否则我可以使用Runge-Kutta,但我想公平地比较这两种方法,这意味着我必须以相同的方式解决它们。

【问题讨论】:

    标签: matlab ode numerical-integration


    【解决方案1】:

    您可以使用interp1 创建一个插值查找表函数:

    fx = [0.5644 0.6473 0.7258 0.7999 0.8697 0.9353 0.9967 1.0540 1.1072 1.1564 ...
          1.2016 1.2429 1.2803 1.3138 1.3435 1.3695 1.3917 1.4102 1.4250 1.4362 ...
          1.4438 1.4477 1.4482 1.4450 1.4384 1.4283 1.4147 1.3977 1.3773 1.3535 ...
          1.3263 1.2957 1.2618 1.2246 1.1841 1.1403 1.0932 1.0429 0.9893 0.9325 0.8725];
    x = 0:0.25:10
    f = @(xq)interp1(x,fx,xq);
    

    那么你应该可以正常使用ode45了:

    tspan = [0 1];
    x0 = 2;
    xout = ode45(@(t,x)f(x),tspan,x0);
    

    请注意,您没有指定您的函数(此处为fx)的 x 的哪些值被评估,因此我选择了零到十。当然,您也不想使用命令窗口中的复制粘贴值,因为它们只有四位小数的准确性。另外请注意,因为ode45 需要输入t,然后是x,所以我使用f 创建了一个单独的匿名函数,但如果需要,可以使用未使用的t 输入创建f

    【讨论】:

    • 嗨,horchler,非常感谢您的回答!我会试试看的!
    • 你好,霍克勒。您的建议非常有效!我的近似解很有希望!我的主管会很高兴的。再次感谢您!
    • 我的问题现在如下:对于我的 x 值(对于 fx 函数),我一直在使用 x(t) 具有的相同域,x(t) 是解决方案(在 ode45 之后)我的第一个方程(1.-)。我现在更改了 tspan 和 x0 以查看我的模型与第一个 ODE 的解的近似程度,对于某些 tspan 和 x0 我有很好的结果,但对于其他我从 interp1 获得 NAN。我知道 x(t) 的域在 tspan 和 x0 变化时会相应变化。我正在将此更改应用于我的 x 值,但我仍然为 interp1 获取 NAN。你明白我的问题@horchler 吗?提前致谢!
    • @SergioSarmiento:请查看interp1 的帮助。默认情况下,外推值返回 NaN 值,即您的输入 xp 小于 min(x) 或大于 max(x)。您要么需要在更广泛的 x 范围内为 fx 生成新值,要么您可以考虑在 interp1 中使用 'extrap' 选项(请注意,外推不会很准确x) 的范围。
    • 很抱歉打扰您,但我有一个基于去年的这个问题的问题。在您的回答中,您为我提供了如何将离散函数发送到 ode45 的解决方案。我现在拥有的是(5x5)颂歌系统。如果你看到你的答案,这将意味着我有:fx1,fx2,fx3,fx4,fx5x1,x2,x3,x4,x5。哪些是函数值和评估函数的点。我的问题:我怎样才能通过 ode45 解决这个系统?我无法插入每个方程并发送到 ode45。我必须将它作为一个系统来解决,但我不知道该怎么做......
    猜你喜欢
    • 1970-01-01
    • 2019-07-14
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    • 2020-08-03
    • 1970-01-01
    相关资源
    最近更新 更多