我是第一次使用 MATLAB。我在 MATLAB 中有一个 t vs f 的二维数组。这个二维数组对应一个函数,比如 f(t)。我正在使用 ode45 求解一组微分方程,而 f(t) 是其中一个系数,即我有一组 x'(t)=f(t)x(t) 形式的方程或其变体。我该如何进行?
我需要一种方法将我的 t 与 f 数组转换为可在 ode45 方法中使用的函数。据推测,转换将进行一些线性插值并给我最佳拟合曲线的方程。
或者,如果有另一种方法,我全神贯注!
谢谢!
我是第一次使用 MATLAB。我在 MATLAB 中有一个 t vs f 的二维数组。这个二维数组对应一个函数,比如 f(t)。我正在使用 ode45 求解一组微分方程,而 f(t) 是其中一个系数,即我有一组 x'(t)=f(t)x(t) 形式的方程或其变体。我该如何进行?
我需要一种方法将我的 t 与 f 数组转换为可在 ode45 方法中使用的函数。据推测,转换将进行一些线性插值并给我最佳拟合曲线的方程。
或者,如果有另一种方法,我全神贯注!
谢谢!
这是一个将函数作为参数传递到 ODE 右侧的简单示例。在同一目录下创建文件并运行 main
主文件
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