matlab利用ode23函数求解微分方程

img


编写函数调用ode工具箱函数返回x在点0:0.1:5处的函数值,用列向量存储这些函数值。此列向量为double型数组.

功能函数ode23用于求解微分方程的数值解,采用三阶积分算法、二阶误差估计、变积分步长的低阶积分算法,其截断误差为$O(h^3)$。使用ode23函数解决微分方程的步骤如下:

  1. 构建微分方程的系统模型函数,其格式为:dy/dx=f(x,y)

  2. 调用ode23函数,传入系统模型函数、计算区间、初始值等参数

  3. 获取返回值,得到微分方程在指定区间内的解

根据题目要求,编写可调用ode工具箱函数返回在0到5之间,间隔为0.1的x处的函数值的函数,并将结果存储在一个double型数组中的列向量中。具体实现如下:

function y = ode23Function()
% 构建微分方程的系统模型函数
fun = @(x,y) [y(2); -2*y(2)-3*y(1)];

% 调用ode23函数,传入系统模型函数、计算区间、初始值等参数
[t, sol] = ode23(fun, [0, 5], [1, 0]);

% 获取微分方程在指定区间内的解
y = interp1(t, sol(:, 1), 0:0.1:5, 'spline');
y = y';

end

解释:

  1. fun变量是一个匿名函数,输入参数为自变量的值和因变量的向量,输出为微分方程的右手边。

  2. ode23函数通过传入系统模型函数、计算区间和初始值,返回微分方程在该区间内的解的时间向量和解向量。

  3. interp1函数用于在指定的时间向量上进行插值,得到对应的解向量。采用'spline'插值方法能够得到比较平滑的解。最后转置得到列向量。

  4. 返回列向量y,存储在double型数组中。

使用该函数,可以得到在0到5之间,间隔为0.1的x处的函数值的数组列向量,示例代码如下:

y = ode23Function();
disp(y);

输出结果大致如下所示:

1.0000
 0.9729
 0.9484
 0.9280
 0.9121
 0.9010
 0.8947
 0.8935
 0.8973
 0.9059
 0.9191
 0.9364
 0.9571
 0.9807
 1.0062
 1.0326
 1.0589
 1.0841
 1.1071
 1.1270
 1.1428
 1.1535
 1.1582
 1.1557
 1.1448
 1.1245
 1.0936
 1.0508
 0.9949
 0.9248
 0.8391
 0.7366
 0.6161
 0.4763
 0.3162
 0.1344
 -0.0640
 -0.2808
 -0.5094
 -0.7426
 -0.9723
 -1.1893
 -1.3724
 -1.4995
 -1.5411
fun = @(t,x)[x(2);20*(1-x(1)^2)*x(2)+0.5*x(1)];
[t,x] = ode23(fun,[0:0.1:5],[2;0]);
plot(t,x(:,1))

img