【数值分析实验】(八)常微分方程的数值解法(含matlab代码)

1 背景简介

        科学技术中很多问题都可用常微分方程的定解问题来描述,主要有初值问题和边值问题两大类。常微分方程式描述连续变化的数学语言,微分方程的求解时确定满足给定方程的可微函数,要找出这类问题的解析解往往非常困难,甚至是不可能的。研究一阶常微分方程初值问题的数值解法是本实验的主要目的,在未知函数解析表达式的情况下,采用近似计算未知函数在其定义域中的某些离散点上的函数值。

2 案例设计

在这里插入图片描述

3 数学模型

在这里插入图片描述

3.1 欧拉法

3.1.1 算法过程

在这里插入图片描述

3.1.2 代码

%% 设置参数
% 输入步长
h = 0.05;
% 输入x上下界
xa = 0; xb = 1;
% 设置函数及y0值
x = xa:h:xb;
f = @(x,y)(3*y/(1+x));
yn = zeros(1, length(x));
yn(1) = 1;
%% 利用欧拉法求解初值问题
for i = 1:(length(x)-1)
    yn(i+1) = yn(i) + h * f(x(i),yn(i));
end
yn % 输出结果

3.1.3 计算结果

在这里插入图片描述

3.2 改进欧拉法

3.2.1 算法过程

在这里插入图片描述

3.2.2 代码

%% 设置参数
% 输入步长
h = 0.1;
% 输入x上下界
xa = 0; xb = 1;
% 设置函数及y0值
x = xa:h:xb;
f = @(x,y)(3*y/(1+x));
yn = zeros(1, length(x));
yn(1) = 1;
%% 利用改进欧拉法求解初值问题
for i = 1:(length(x)-1)
    p = yn(i) + h * f(x(i),yn(i));
    c = yn(i) + h * f(x(i+1),p);
    yn(i+1) = (1/2) * (p+c);
end
yn % 输出结果

3.2.3 计算结果

在这里插入图片描述

3.3 四阶龙格-库塔方法

3.3.1 算法过程

在这里插入图片描述

3.3.2 代码

%% 设置参数
% 输入步长
h = 0.2;
% 输入x上下界
xa = 0; xb = 1;
% 设置函数及y0值
x = xa:h:xb;
f = @(x,y)(3*y/(1+x));
yn = zeros(1, length(x));
yn(1) = 1;
%% 利用四阶龙格-库塔求解初值问题
for i=1:(length(x) - 1) 
     K1 = f(x(i), yn(i));
     K2 = f(x(i)+ 0.5 * h, yn(i) + 0.5 * h * K1);
     K3 = f((x(i) + 0.5 * h), (yn(i) + 0.5 * h * K2));
     K4 = f((x(i) + h), (yn(i) + K3 * h));
     yn(i+1) = yn(i) + (1/6) * (K1 + 2 * K2 + 2 * K3 + K4) * h;
end
yn % 输出结果

3.3.3 计算结果

在这里插入图片描述

4 分析与讨论

        对比三种方法,在相同步长的情况下,欧拉法每步只计算一个函数值,改进的欧拉法每步计算两个函数值,四阶龙格-库塔方法每步需计算四个函数值,即四阶龙格-库塔方法的计算量约为欧拉法的4倍,是改进欧拉法的2倍。为了比较计算精度,可以将欧拉法的步长取h,改进欧拉法取2h,四阶龙格-库塔方法取4h,这样求解同一初值问题时,它们的计算量相当,可以比较它们的计算结果,看出它们的精度差异。实验结果表明,四阶龙格-库塔十分接近精确解,其次是改进欧拉法,最后是欧拉法。
在这里插入图片描述

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值