我有以下ODE:
x_dot = 3*x.^0.5-2*x.^1.5 % (Equation 1)
我正在使用ode45
来解决它。我的解决方案是作为dim(k x 1)的向量给出的(通常k = 41,由tspan
给出)。
另一方面,我制作了一个近似于(1)模型的模型,但是为了比较第二个模型的准确度,我想通过{{来解决它(解决第二个ODE)。 1}}。我的问题是这第二首颂歌是离散的:
ode45
x_dot = f(x) % (Equation 2)
是离散的,而不是像(1)中那样的连续函数。我对f
的值是:
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
来解决第二个颂歌。希望我能得到一个与(1)中的解决方案非常相似的解决方案。如何解决应用ode45
的离散颂歌?是否可以使用ode45
?否则我可以使用ode45
但我想公平地比较这两种方法,这意味着我必须以同样的方式解决它们。
答案 0 :(得分: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
,因此我选择了0到10。您当然也不想使用命令窗口中的复制粘贴值,因为它们只有四位小数的精度。另请注意,由于ode45
需要输入t
,然后x
,我使用f
创建了一个单独的匿名函数,但f
可以使用未使用的如果需要,可以输入t
。