matlab,Euler法求解微分方程问题

img


利用Euler法求解该微分方程,并将求解结果与matlab的ode23函数求解结果对比

使用Euler法求解微分方程的代码如下:

function [T,Y] = euler_method(f, tspan, y0, N)
h = (tspan(2)-tspan(1))/N; 
T = tspan(1):h:tspan(2); 
Y = zeros(1,N+1); 
Y(1) = y0; 
for i=1:N
    Y(i+1) = Y(i) + h*f(T(i), Y(i)); 
end
end

其中,f为微分方程的函数句柄,tspan为时间范围,y0为初始值,N为步数。

比较Euler法和ode23函数的求解结果可以使用以下代码:

% 定义微分方程和初值
fun = @(t,y) 4*exp(0.8*t)-0.5*y;
y0 = 2;

% Euler法求解
N = 100;
[T_euler, Y_euler] = euler_method(fun, [0,10], y0, N);

% ode23函数求解
[T_ode23, Y_ode23] = ode23(fun, [0,10], y0);

% 绘制图像
figure
plot(T_euler, Y_euler, 'r', T_ode23, Y_ode23, 'b--')
legend('Euler法', 'ode23函数')

运行代码后,可以得到Euler法和ode23函数求解结果的比较图像。

% 定义微分方程和初值
fun = @(t,y) 4*exp(0.8*t)-0.5*y;
y0 = 2;
 
% Euler法求解
N = 100;
[T_euler, Y_euler] = euler_method(fun, [0,10], y0, N);
 
% ode23函数求解
[T_ode23, Y_ode23] = ode23(fun, [0,10], y0);
 
% 绘制图像
figure
plot(T_euler, Y_euler, 'r', T_ode23, Y_ode23, 'b--')
legend('Euler法', 'ode23函数')