在MATLAB中从2D数组创建函数(用于ode45)

时间:2012-12-29 17:11:07

标签: function matlab interpolation

我是第一次使用MATLAB用户。我在MATLAB中有一个2d的t vs f数组。这个2d数组对应一个函数,比如f(t)。我使用ode45来求解一组微分方程,f(t)是系数之一,即我有一组x'(t)= f(t)x(t)形式的方程或其变形。我该怎么办?

我需要一种方法将我的t vs f数组转换为可以在ode45方法中使用的函数。据推测,转换将进行一些线性插值,并给出最佳拟合曲线的等式。

或者,如果有另一种方法,我全都听见了!

谢谢!

1 个答案:

答案 0 :(得分:1)

这是一个简单的例子,它将函数作为参数传递给ODE的右侧。在同一目录中创建文件并运行main

<强>的main.m

t = 0:0.2:10; f = sin(t);
fun = @(xc) interp1(t, f, xc);

x0=0.5
% solve diff(x, t)=sin(t)  
% pass function as parameter                           
[tsol, xsol] = ode45(@(t, x) diff_rhs(t, x, fun),[0.0 8.0], 0.5);

% we solve equation dx/dt = sin(x), x(0)=x0
% exact solution is x(t) = - cos(t) + x(0) + 1
plot(tsol, xsol, 'x');
hold on
plot(tsol, -cos(tsol) + x0 + 1, '-');
legend('numerical', 'exact');

<强> diff_rhs.m

function dx = diff_rhs(t, x, fun)
  dx = fun(t);
end

文档中的参考文献:interp1anonymous Functions