当函数作为离散值给出时求解ODE -matlab- [英] Solving an ODE when the function is given as discrete values -matlab-

查看:97
本文介绍了当函数作为离散值给出时求解ODE -matlab-的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下ODE:

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

我正在使用ode45来解决它.我的解以dim(k x 1)的向量给出(通常k = 41,由tspan给出).

I am using ode45 to solve it. My solution is given as a vector of dim(k x 1) (usually k = 41, which is given by the tspan).

另一方面,我制作了一个与(1)近似的模型,但是为了比较第二个模型的准确性,我想通过.我的问题是第二个颂歌被赋予了离散性:

On the other hand, I have made a model that approximates the model from (1), but in order to compare how accurate this second model is, I want to solve it (solve the second ODE) by means of ode45. My problem is that this second ode is given discrete:

x_dot = f(x) % (Equation 2)

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

f is discrete and not a continuous function like in (1). The values I have for f are:

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,但是我想公平地比较这两种方法,这意味着我必须以相同的方式来解决它们.

What I want now is to solve this second ode using ode45. Hopefully I will get a solution very similar that the one from (1). How can I solve a discrete ode applying ode45? Is it possible to use ode45? Otherwise I can use Runge-Kutta but I want to be fair comparing the two methods, which means that I have to solve them by the same way.

推荐答案

您可以使用 interp1 创建内插的查找表函数:

You can use interp1 to create an interpolated lookup table function:

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:

Then you should be able to use ode45 as normal:

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

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

Note that you did not specify what values of of x your function (fx here) is evaluated over so I chose zero to ten. You'll also not want to use the copy-and-pasted values from the command window of course because they only have four decimal places of accuracy. Also, note that because ode45 required the inputs t and then x, I created a separate anonymous function using f, but f can created with an unused t input if desired.

这篇关于当函数作为离散值给出时求解ODE -matlab-的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆