常微分课程实习.docx
- 文档编号:9108196
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:21
- 大小:74.17KB
常微分课程实习.docx
《常微分课程实习.docx》由会员分享,可在线阅读,更多相关《常微分课程实习.docx(21页珍藏版)》请在冰豆网上搜索。
常微分课程实习
福建农林大学计算机与信息学院
(数学类课程)
课程实习报告
课程名称:
常微分方程课程实习
实习题目:
求初值问题
在区间[0,2]内的数值解
姓名:
系:
计算机与信息学院数学系
专业:
信息与计算科学
年级:
2008
学号:
指导教师:
陈永雪
职称:
讲师
2009年12月1日
福建农林大学计算机与信息学院数学系
课程实习报告结果评定
评语:
成绩:
指导教师签字:
评定日期:
目录
1.实习目的和任务1
2.实习要求1
3.实习地点1
4.主要仪器设备1
5.实习内容1
6.1初值条件1
6.2求精确解1
6.3用其它三种方法求解其值………………………………………………….3
6.3.1用欧拉法求解………………………………………………………………3
6.3.2用改进欧拉法求解…………………………………………………………4
6.3.3用4阶龙格—库塔求解………………………………………………….6
7.问题讨论与分析8
8.结束语17
参考文献21
1实习的目的和任务:
目的:
通过课程实习能够应用MATLAB软来计算微分方程(组)的数值解。
通过具体的案例描述,并利用MATLAB软件来计算问题的结果,分析问题的结
论。
输入代码函数,绘制其函数图象,求出其数值解,并与精确解作比较,分
析各种解法结果的误差。
任务:
对MATLAB进行操作,熟悉其基本命令和基本函数,进行初步的程序
设计解决实际问题。
2实习要求:
要求:
能够从案例的自然语言描述中,抽象出其中的数学模型,能够熟练应
用所学的数值解计算方法,并能够熟练使用MATLAB软件。
3实习地点:
数学实验室。
4主要仪器设备(实验用的软硬件环境)
计算机
MicrosoftWindowsVista
Matlab7.1
5实习内容
用欧拉方法,欧拉改进方法,4阶龙格-库塔方法来求dy/dx=y+cosx,y(0)=1的解在[0,2]内的数值解,并与精确解作比较,分析各种解法结果的误差。
6实习过程
6.1首先用MATLA软件求其满足初值条件的解析:
其程序代码:
dsolve(‘Dy=y+cosx’,’y(0)=1,’x’)
运行结果是:
y=((sin(x)-cos(x))/2+1.5*exp(x))
6.2将指定的步长和范围带入求精确解:
程序代码:
>>x=0:
0.1:
2;
y=((sin(x)-cos(x))/2+1.5*exp(x));
Data=[x',y']
运行结果如下:
Data=
01.0000
0.10001.2102
0.20001.4414
0.30001.6949
0.40001.9719
0.50002.2740
0.60002.6028
0.70002.9603
0.80003.3486
0.90003.7703
1.00004.2280
1.10004.7251
1.20005.2650
1.30005.8520
1.40006.4905
1.50007.1859
1.60007.9439
1.70008.7712
1.80009.6750
1.900010.6636
2.000011.7463
用MATLAB绘图:
其程序代码为:
x=[00.10.20.30.40.50.60.70.80.91.01.11.21.31.41.51.61.71.81.92.0]
y1=[1.00001.21021.44141.69491.97192.27402.60282.96033.34863.77034.22804.72515.26505.85206.49057.18597.94398.77129.675010.663611.7463]
plot(x,y1,'vb')
6.3.1用欧拉法求解,程序如下:
建立函数文件naeuler.m
function[x,y]=naeuler(dyfun,xspan,y0,h)
x=xspan
(1):
h:
xspan
(2);
y
(1)=y0;
forn=1:
length(x)-1
y(n+1)=y(n)+h*feval(dyfun,x(n),y(n));
end
x=x';y=y';
在MATLAB输入以下程序:
dyfun=inline('y+cos(x)');
[x,y1]=naeuler(dyfun,[0,2],1,0.05);
[x,y1]
程序运行结果结果为:
ans=
01.0000
0.10001.2000
0.20001.4195
0.30001.6595
0.40001.9209
0.50002.2051
0.60002.5134
0.70002.8473
0.80003.2085
0.90003.5990
1.00004.0211
1.10004.4772
1.20004.9703
1.30005.5036
1.40006.0807
1.50006.7057
1.60007.3834
1.70008.1188
1.80008.9178
1.90009.7869
2.000010.7332
用MATLAB绘图:
其程序代码为:
x=[00.10.20.30.40.50.60.70.80.91.01.11.21.31.41.51.61.71.81.92.0]
y2=[1.00001.20001.41951.65951.92092.20512.51342.84733.20853.59904.02114.47724.97035.50366.08076.70577.38348.11888.91789.786910.7332]
plot(x,y2,'--k')
6.3.2用欧拉改进法求解
程序如下:
建立函数文件naeuler2.m
function[x,y]=naeuler2(dyfun,xspan,y0,h)
x=xspan
(1):
h:
xspan
(2);
y
(1)=y0;
forn=1:
length(x)-1
k1=feval(dyfun,x(n),y(n));
y(n+1)=y(n)+h*k1;
k2=feval(dyfun,x(n+1),y(n+1));
y(n+1)=y(n)+h*(k1+k2)/2;
end
x=x';y=y';
在MATLAB输入以下程序:
dyfun=inline('y+cos(x)');
[x,y2]=naeuler2(dyfun,[0,2],1,0.1);
[x,y2]
程序运行结果:
ans=
01.0000
0.10001.2098
0.20001.4405
0.30001.6934
0.40001.9698
0.50002.2712
0.60002.5992
0.70002.9558
0.80003.3430
0.90003.7634
1.00004.2198
1.10004.7153
1.20005.2534
1.30005.8384
1.40006.4746
1.50007.1673
1.60007.9223
1.70008.7461
1.80009.6460
1.900010.6302
2.000011.7078
用MATLAB绘图:
其程序代码为:
x=[00.10.20.30.40.50.60.70.80.91.01.11.21.31.41.51.61.71.81.92.0]
y3=[1.00001.20981.44051.69341.96982.27122.59922.95583.34303.76344.21984.71535.25345.83846.47467.16737.92238.74619.646010.630211.7078]
plot(x,y3,'dm')
6.3.3用4阶龙格—库塔求解
程序如下:
建立函数文件nark4.m
function[x,y]=nark4(dyfun,xspan,y0,h)
x=xspan
(1):
h:
xspan
(2);
y
(1)=y0;
forn=1:
length(x)-1
k1=feval(dyfun,x(n),y(n));
k2=feval(dyfun,x(n)+h/2,y(n)+h/2*k1);
k3=feval(dyfun,x(n)+h/2,y(n)+h/2*k2);
k4=feval(dyfun,x(n+1),y(n)+h*k3);
y(n+1)=y(n)+h*(k1+2*k2+2*k3+k4)/6;
end
x=x';y=y';
在MATLAB输入以下程序:
dyfun=inline('y+cos(x)');
[x,y3]=nark4(dyfun,[0,2],1,0.1);
[x,y3]
程序运行结果:
ans=
01.0000
0.10001.2102
0.20001.4414
0.30001.6949
0.40001.9719
0.50002.2740
0.60002.6028
0.70002.9603
0.80003.3486
0.90003.7703
1.00004.2280
1.10004.7251
1.20005.2650
1.30005.8520
1.40006.4905
1.50007.1859
1.60007.9439
1.70008.7712
1.80009.6750
1.900010.6636
2.000011.7463
用MATLAB绘图:
其程序代码为:
x=[00.10.20.30.40.50.60.70.80.91.01.11.21.31.41.51.61.71.81.92.0]
y4=[1.00001.21021.44141.69491.97192.27402.60282.96033.34863.77034.22804.72515.26505.85206.49057.18597.94398.77129.675010.663611.7463]
plot(x,y4,' 6.4问题讨论与分析 由以上数值分析结果绘制表格: 精确解 欧拉方法 改进的欧拉方法 四阶龙格-库塔方法 xi yi yi 误差 yi 误差 yi 误差 0 1.0000 1.0000 0 1.0000 0 1.0000 0 0.1 1.2102 1.2000 -0.0102 1.2098 -0.0004 1.2102 0 0.2 1.4414 1.4195 -0.0219 1.4405 -0.0009 1.4414 0 0.3 1.6949 1.6595 -0.0354 1.6934 -0.0015 1.6949 0 0.4 1.9719 1.9209 -0.0510 1.9698 -0.0021 1.9719 0 0.5 2.2740 2.2051 -0.0689 2.2712 -0.0028 2.2740 0 0.6 2.6028 2.5134 -0.0894 2.5992 -0.0036 2.6028 0 0.7 2.9603 2.8473 -0.1130 2.9558 -0.0045 2.9603 0 0.8 3.3486 3.2085 -0.1401 3.3430 -0.0056 3.3486 0 0.9 3.7703 3.5990 -0.1713 3.7634 -0.0069 3.7703 0 1.0 4.2280 4.0211 -0.2069 4.2198 -0.0082 4.2280 0 1.1 4.7251 4.4772 -0.2479 4.7153 -0.0098 4.7251 0 1.2 5.2650 4.9703 -0.2947 5.2534 -0.0116 5.2650 0 1.3 5.8520 5.5036 -0.3484 5.8384 -0.0136 5.8520 0 1.4 6.4905 6.0807 -0.4098 6.4746 -0.0159 6.4905 0 1.5 7.1859 6.7057 -0.4802 7.1673 -0.0186 7.1859 0 1.6 7.9439 7.3834 -0.5605 7.9223 -0.0216 7.9439 0 1.7 8.7712 8.1188 -0.6524 8.7461 -0.0251 8.7712 0 1.8 9.6750 8.9178 -0.7572 9.6460 -0.0290 9.6750 0 1.9 10.6636 9.7869 -0.8767 10.6302 -0.0334 10.6636 0 2.0 11.7463 10.7332 -1.0131 11.7078 -0.0385 11.7463 0 表1 %欧拉方法,改进欧拉方法,4阶龙格-库塔方法分别与精确解画图形作比较。 (1)精确解与欧拉方法比较 x=[00.10.20.30.40.50.60.70.80.91.01.11.21.31.41.51.61.71.81.92.0] y1=[1.00001.21021.44141.69491.97192.27402.60282.96033.34863.77034.22804.72515.26505.85206.49057.18597.94398.77129.675010.663611.7463] y2=[1.00001.20001.41951.65951.92092.20512.51342.84733.20853.59904.02114.47724.97035.50366.08076.70577.38348.11888.91789.786910.7332] plot(x,y1,'c+-',x,y2,'or-') (2)精确解与欧拉改进法比较 x=[00.10.20.30.40.50.60.70.80.91.01.11.21.31.41.51.61.71.81.92.0] y1=[1.00001.21021.44141.69491.97192.27402.60282.96033.34863.77034.22804.72515.26505.85206.49057.18597.94398.77129.675010.663611.7463] y3=[1.00001.20981.44051.69341.96982.27122.59922.95583.34303.76344.21984.71535.25345.83846.47467.16737.92238.74619.646010.630211.7078] plot(x,y1,'p-',x,y2,'or-') (3)精确解与四阶龙格——库塔法比较 x=[00.10.20.30.40.50.60.70.80.91.01.11.21.31.41.51.61.71.81.92.0] y1=[1.00001.21021.44141.69491.97192.27402.60282.96033.34863.77034.22804.72515.26505.85206.49057.18597.94398.77129.675010.663611.7463] y4=[1.00001.21021.44141.69491.97192.27402.60282.96033.34863.77034.22804.72515.26505.85206.49057.18597.94398.77129.675010.663611.7463] plot(x,y1,'p-',x,y2,'or-') 结果分析: 由表格及图像可以看出欧拉法误差最大,而改进欧拉和4阶龙格—库塔方法误差相对较小,几乎是一样的。 在精确解与欧拉方法求得的解的比较图形中,可以很清晰地看到随着x的增加,函数值与精确值的偏差是越来越大;而在精确解与改进欧拉方法、4阶龙格—库塔方法求得的解的比较图形中,却是很难看出。 因为它们几乎重合,只有靠图形的颜色和描点的图形的不同来区分。 二: 欧拉方法不同步长的分析 1步长0.1时由以上可知数据及图为: x=[00.10.20.30.40.50.60.70.80.91.01.11.21.31.41.51.61.71.81.92.0] y2=[1.00001.20001.41951.65951.92092.20512.51342.84733.20853.59904.02114.47724.97035.50366.08076.70577.38348.11888.91789.786910.7332] plot(x,y2,'--k') 2取步长为0.05时 建立函数文件naeuler3.m function[x,y]=naeuler2(dyfun,xspan,y0,h) x=xspan (1): h: xspan (2); y (1)=y0; forn=1: length(x)-1 k1=feval(dyfun,x(n),y(n)); y(n+1)=y(n)+h*k1; k2=feval(dyfun,x(n+1),y(n+1)); y(n+1)=y(n)+h*(k1+k2)/2; end x=x';y=y'; 在MATLAB输入以下程序: dyfun=inline('y+cos(x)'); [x,y5]=naeuler3(dyfun,[0,2],1,0.05); [x,y5] 程序运行结果: ans= 01.0000 0.05001.1000 0.10001.2049 0.15001.3149 0.20001.4301 0.25001.5506 0.30001.6766 0.35001.8082 0.40001.9456 0.45002.0889 0.50002.2384 0.55002.3942 0.60002.5565 0.65002.7256 0.70002.9017 0.75003.0850 0.80003.2759 0.85003.4745 0.90003.6812 0.95003.8963 1.00004.1202 1.05004.3533 1.10004.5958 1.15004.8483 1.20005.1111 1.25005.3848 1.30005.6698 1.35005.9667 1.40006.2760 1.45006.5983 1.50006.9342 1.55007.2844 1.60007.6497 1.65008.0307 1.70008.4283 1.75008.8433 1.80009.2765 1.85009.7290 1.900010.2017 1.950010.6956 2.000011.2119 x=[00.05000.10000.15000.20000.25000.30000.35000.40000.45000.50000.55000.60000.65000.70000.75000.80000.85000.90000.95001.00001.05001.10001.15001.20001.25001.30001.35001.40001.45001.50001.55001.60001.65001.70001.75001.80001.85001.90001.95002.0000]; y5=[1.00001.10001.20491.31491.43011.55061.67661.80821.94562.08892.23842.39422.55652.72562.90173.08503.27593.47453.68123.89634.12024.35334.59584.84835.11115.38485.66985.96676.27606.59836.93427.28447.64978.03078.42838.84339.27659.729010.201710.695611.2119]; plot(x,y5,'--k') 分析结果: 步长越小,所得到的值越精确,误差也就越小。 7.结束语 通过这次练习,让我对MATLAB及欧拉方法,欧拉改进方法,4阶龙格——库塔方法有了更深的了解和认识; 欧拉方法与欧拉改进方法和4阶龙格——库塔方法比较而言,误差相对而言太大。 欧拉改进方法和4阶龙格——库塔方法两者之间从计算值来说误差小些,借助MATLAB绘制出的直观图形我们可以看到后两种严谨的方法计算值形成的曲线几乎重合; 在学习的过程中利用一定的工具,如用MATLAB解决常微,可以提高我们的自学能力并提高学习兴趣。 参考文献 [1]焦光虹.《数学实验》.科学出版社,2006 [2]王高雄周之铭朱思铭王寿松《常微分方程》: 高等教育出版社,2006 [3]姜健飞、胡良
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微分 课程 实习
![提示](https://static.bdocx.com/images/bang_tan.gif)