欧拉法解常微分方程之欧阳科创编.docx
《欧拉法解常微分方程之欧阳科创编.docx》由会员分享,可在线阅读,更多相关《欧拉法解常微分方程之欧阳科创编.docx(13页珍藏版)》请在冰豆网上搜索。
欧拉法解常微分方程之欧阳科创编
时间:
2021.02.05
创作:
欧阳科
数学与计算科学学院
实验报告
实验项目名称Eular方法求解一阶常微分方程数值解
所属课程名称偏微分方程数值解
实验类型验证性
实验日期2015-3-26
班级
学号
姓名
成绩
一、实验概述:
【实验目的】
熟练掌握应用显性Eular法和隐式Eular法求解一般一阶常微分方程的近似数值解。
【实验原理】
虽然求解常微分方程有各种各样的解析方法,但解析方法只能用来求解一些特殊类型的方程。
求解从实际问题当中归结出来的微分方程主要靠数值解法。
欧拉方法是一类重要的数值解法。
这类方法回避解y(x)的函数表达式,而是寻求它在一系列离散节点上的近似值,相邻的两个节点的间距称作步长。
假定步长为定数。
欧拉方法是一类离散化方法,这类方法将寻求解y(x)的分析问题转化为计算离散值值的代数问题,从而使问题获得了实质性的简化。
然而随之带来的困难是,由于数据量往往很大,差分方法所归结出的可能是个大规模的代数方程组。
【实验环境】
1.硬件环境
2.2.软件环境
MATLAB7.0
二、实验内容:
【实验过程】(实验步骤)
(一)实验任务
描述某种化学反应过程的方程,利用显性和隐形Eualar方法求解下列一阶线性微分方程组的近似数值解:
(二)求解过程
Eular方法:
一阶线性微分方程初值问题
(1)
方程离散化:
差分和差商
(2)
通过初始值
,依据递推公式
(2)逐步算出
就为显性的Eular方法。
隐形Eular方法:
(3)
公式(3)即为隐式Eular公式。
(三)程序算法
1.利用显式Eular法方求解
利用MATLAB进行求解,编写脚本文件如下:
文件名:
hql.m
%显性Eular方法
f0=1;g0=0;z0=0
delta=0.01;
time=1;
t=0:
delta:
time;
f=zeros(size(t));
g=zeros(size(t));
z=zeros(size(t));
f1=zeros(size(t));
g1=zeros(size(t));
z1=zeros(size(t));
f
(1)=f0;
g
(1)=g0;
z
(1)=z0;
fori=2:
length(t)
f1(i-1)=-0.04*f(i-1)+10000*f(i-1)*g(i-1);
f(i)=f(i-1)+f1(i-1)*delta;
g1(i-1)=0.04*f(i-1)-10000*f(i-1)*g(i-1)-3*10^7*g(i-1)^2;
g(i)=g(i-1)+g1(i-1)*delta;
z1(i-1)=3*10^7*g(i-1)^2;
z(i)=z(i-1)+z(i-1)*delta;
Fun=f+g+z
end
figure
plot(t,f,'o');
xlabel('t');
ylabel('y1');
title('t-y1变化图')
figure
plot(t,g,'o');
xlabel('t');
ylabel('y2');
title('t-y2变化图')
figure
plot(t,z,'o');
xlabel('t');
ylabel('y3');
title('t-y3变化图')
figure
plot(t,Fun);
xlabel('t');
ylabel('y1+y2+y3');
title('t-y1+y2+y3变化图')
【实验结论】
A步长h=0.001时进行数据测试。
结果如下:
迭代第一次时,
结果与方程描述内容相符。
迭代第二次时,
结果与方程描述内容基本相符。
迭代三次时,
结果与方程描述内容基本相符。
迭代1000次时,
模拟结果已经严重脱离事实,故当选择delta为0.001时,该迭代方法不收敛。
时间与个变量直接的变化关系如图所示:
从上述图形可以明显看出,在迭代的不断进行时,各变量与时间的变化越来越大,且严重脱离了方程所描述的现实意义。
B.当选择h=0.00000001时,模拟结果如下:
迭代第一次,
与A中结果相同。
迭代第二次,
跌二次迭代结果明显优于一中。
跌三次迭代结果,
并未产生误差。
地1000次迭代结果,
结果明显是收敛的。
时间与个变量直接的变化关系如图所示:
从图中能够清晰看出,当h=0.00000001时,模拟结果与方程所表示的显示意义相吻合。
说明了显性Eualr方法的收敛性是与步长的选择是相关。
这就对我们们选择步长造成了困难,由于选择的步长不合适有可能得出错误的结论。
【实验小结】(收获体会)
1、软件使用
在写MATLAB语言的时候要深刻理解题的意图,整理好思绪再做题目,在我运算的过程中,h取值取得越小、越细微,曲线逼近的越好。
2、欧拉法的缺点
简单地取切线的端点作为下一步的起点进行计算,当步数增多时,误差会因积累而越来越大。
因此欧拉格式一般不用于实际计算。
3、实验感想
在这次上机实验中,我掌握了解决常微分方程的基本方法,同时学会使用计算机软件对两种不同方法得到的结果进行判断,对我们以后对数据进行分析很有帮助。
三、指导教师评语及成绩:
评语
评语等级
优
良
中
及格
不及格
1.实验报告按时完成,字迹清楚,文字叙述流畅,逻辑性强
2.实验方案设计合理
3.实验过程(实验步骤详细,记录完整,数据合理,分析透彻)
4实验结论正确.
成绩:
指导教师签名:
批阅日期:
附录:
源程序
程序1:
%显性Eular方法
f0=1;g0=0;z0=0
delta=0.00000001;
time=0.00001;
t=0:
delta:
time;
f=zeros(size(t));
g=zeros(size(t));
z=zeros(size(t));
f1=zeros(size(t));
g1=zeros(size(t));
z1=zeros(size(t));
f
(1)=f0;
g
(1)=g0;
z
(1)=z0;
fori=2:
length(t)
f1(i-1)=-0.04*f(i-1)+10000*f(i-1)*g(i-1);
f(i)=f(i-1)+f1(i-1)*delta;
g1(i-1)=0.04*f(i-1)-10000*f(i-1)*g(i-1)-3*10^7*g(i-1)^2;
g(i)=g(i-1)+g1(i-1)*delta;
z1(i-1)=3*10^7*g(i-1)^2;
z(i)=z(i-1)+z(i-1)*delta;
Fun=f+g+z
end
figure
plot(t,f,'o');
xlabel('t');
ylabel('y1');
title('t-y1变化图')
figure
plot(t,g,'o');
xlabel('t');
ylabel('y2');
title('t-y2变化图')
figure
plot(t,z,'o');
xlabel('t');
ylabel('y3');
title('t-y3变化图')
figure
plot(t,Fun);
xlabel('t');
ylabel('y1+y2+y3');
title('t-y1+y2+y3变化图')
时间:
2021.02.05
创作:
欧阳科