1

我有以下 ODE:

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

ode45用来解决它。我的解决方案是作为 dim(kx 1) 的向量给出的(通常是 k = 41,由 给出tspan)。

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

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)中的解决方案非常相似的解决方案。如何解决离散 ode 应用ode45?可以使用ode45吗?否则我可以使用Runge-Kutta,但我想公平地比较这两种方法,这意味着我必须以同样的方式解决它们。

4

1 回答 1

4

您可以使用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);

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

于 2013-11-01T18:33:16.413 回答