解决函数被赋予离散的ODE系统(matlab)

时间:2014-10-07 08:28:32

标签: matlab function ode

这次我的问题是基于我几个月前提出的一个老问题(见HERE)如果你不想回答我的第一个问题,我可以简单介绍一下这个问题。问题

在我的第一个问题中,我有两个向量,第一个fx包含函数值

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

x = 0:0.25:10

这个离散函数fx ode ,我需要通过matlab中的 ode45 解决它。但 ode45 并不采用离散函数,因此解决方法是插入这两个向量。然后我可以有一个函数句柄,我可以发送 ode45 ,像这样:

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

我现在的问题

这次我没有一个代表一个 ode 的等式,我有一个 odes 的系统,但是,就像之前的函数是离散的一样。这意味着我有:

fx1 = [....function values...]
x1 = [...the points where the function fx1 was evaluated...]

fx2 = [....function values...]
x2 = [...the points where the function fx2 was evaluated...]

fx3 = [....function values...]
x3 = [...the points where the function fx3 was evaluated...] 

我需要能够用 ode45 解决这个颂歌系统。但我不能简单地插入每个方程并将其发送到ode45,这将是错误的。我需要将孔系统发送到ode45。

我尝试了不同的东西,但是我的编程技巧不长,我可以解决这个问题,这就是我要求帮助的原因!

我的猜测解决方案

我相信如果我使用for-loop只生成一个包含系统的3个插值方程的函数句柄,我可以将这个函数句柄发送到ode45。这听起来像是一个不错的选择吗?

PS:如果需要,我很乐意发布向量fx1,fx2,fx3,x1,x2,x3的值(!)

1 个答案:

答案 0 :(得分:2)

定义此函数并将其保存在function_helper.m

function result = function_helper(f1, x1, f2, x2, f3, x3, xq)
    result = [
        interp1(x1, f1, xq(1))
        interp1(x2, f2, xq(2))
        interp1(x3, f3, xq(3))
    ];
end

然后像这样集成

f = @(t,xq) function_helper(f1, x1, f2, x2, f3, x3, xq);
tspan = [0 1];
x0 = 1;
xout = ode45(f, tspan, x0);