《数值分析课程课程设计》由会员分享,可在线阅读,更多相关《数值分析课程课程设计(19页珍藏版)》请在金锄头文库上搜索。
1、- 1 -课 程 设 计设计题目 数值分析 学生姓名 学 号 专业班级 信息计班 指导教师 设 计 题 目共 15 题如下成绩- 2 -课 程 设 计 主 要 内 容设计
2、目的:设计目的: 通过不同题目的理解,进行算法分析。 通过 MATLAB 软件进行编程对题目进行解决。 个别题目设计验证,加深对数值分析的理解。 函数的图像绘制的运用 设计题目:设计题目: 题11 利用逆向递推的方法求解问题,通过条件终止地推1题12 从某个初始值开始,利用递推公式进行积分估值2题13 绘制 Koch 分形曲线,节点之间的关系与坐标变换3题21 用高斯消元法的消元过程作矩阵分解,LU 分解4题22 矩阵分解方法求上题中 A 的逆矩阵,针对不同的 b,而重复利用已知的 LU5题23 验证希尔伯特矩
3、阵的病态性,矩阵基本运算6题31 用泰勒级数的有限项逼近正弦函数,由图像观察逼近效果7题32 绘制飞机的降落曲线,线性方程组求解,与绘图8题41 线性拟合的函数表达式的推导,使用了两种代码方法9题51 用几种不同的方法求积分,观察数值积分的逼近效果10题55 求空间曲线 L 弧长。求导后使用符号函数积分计算11题61 用欧拉公式和四阶龙格-库塔法分别求解下列初值问题,代码搜索内容。12题64 常微分方程的解,dsolve()函数使用13题82 差分法解常微分方程边值问题,ode 函数
4、无能为力,Matlab 中提供 bvp14解算器。 solinit=bvpinit(x,yinit,params)sol= bvpsolver(odefun,bcfun,solinit,options) 题83 求解圆的半径,圆心。线性方程组解参数15设计总结:设计总结: (1)算法是题目的解题核心,好的算法可以使计算更加精确 (题 5.1) (2)图形绘制在今后的课程设计,或者是论文中可以用到。 (3)无法解决的问题,需要请教室友,或者上网查阅。 (4)MATLAB 是一个很强大的软件,提供了很多内置的数学函数,直接进行解题。 查阅资料时了解到一些 MA
5、TLAB 论坛。通过帖子阅读,了解到了 MATLAB 在科 学计算方面,模拟,图形,视频等起到的作用。增加了对“计算科学“的理解。指 导 老 师 评 语建议:从学生的工作态度、工作量、设计(论文的)创造性、学术性、使用性及书面表达能力等方面给出评价。签名: 20 年 月 日 - 3 -数值分析课程设计数值分析课程设计1 11 1 水手、猴子和椰子问题:五个水手带了一只猴
6、子来到南太平洋 的一个荒岛上,发现那里有一大堆椰子。由于旅途的颠簸,大家都很 疲惫,很快就入睡了。第一个水手醒来后,把椰子平分成五堆,将多 余的一只给了猴子,他私藏了一堆后便又去睡了。第二、第三、第四、 第五个水手也陆续起来,和第一个水手一样,把椰子分成五堆,恰多 一只猴子,私藏一堆,再去入睡,天亮以后,大家把余下的椰子重新 等分成五堆,每人分一堆,正好余一只再给猴子,试问原先共有几只 椰子?(15621) 试分析椰子数目的变化规律,利用逆向递推的方法求解这一问题 解:解:算法分析:解该问题主要使用递推算法,关于椰子数目的变化规 律可以设起初的椰子数为,第一至五次猴子在夜里藏椰子后,椰子0p
7、的数目分别为再设最后每个人分得 x 个椰子,由题:01234,ppppp(k=0,1,2,3,4)14(1)5kkpp51(1)5xp所以,利用逆向递推方法求解551px11kkpp(k=0,1,2,3,4)151,4kkppMATLABMATLAB 代码代码: n=input('n= '); n= 15621 for x=1:np=5*x+1;for k=1:5 p=5*p/4+1;endif p=fix(p), break end end disp(x,p)1 12 2 设,105nnxIdxx(1)从尽可能精确的近似值出发,利用递推公式:0I11
8、5(1,2,20)nnIInn 计算机从 到的近似值;1I20I输出结果 : 1023 15621结果分析:结果分析:此题的解题思想是在迭代 法中,判断 p 为整数时,输出与 p- 4 -(2)从较粗糙的估计值出发,用递推公式:30I111(30,29,3,2)55nnIInn 计算从 到的近似值; 1I20I解:解:首先第一步,估计和的值:0I30I syms x n;int (x0/(5+x),0,1) ans=log(2)+log(3)-log(5) eval(ans) ans= 0.1823 则取为 0.
9、180I syms x n; int(x30/(5+x),0,1) ans = 931322574615478515625*log(2)+931322574615478515625*log(3)- 931322574615478515625*log(5)- 79095966183067699902965545527073/465817912560 eval(ans) ans =0 MATLAB 中小数点后保留四位,由上面计算知道积分的值不为了零。 所以的取值
10、为 0.00001-0.000130I MATLABMATLAB 代码代码: i=input('i='); i=0.18; >> if i>=0.1L(2,1)=A(2,1)/U(1,1);L(i,1)=A(i,1)/U(1,1);L(i,k)=(A(i,k)-L(i,1:k-1)*U(1:k- 1,k)/U(k,k);elseU(k,j)=A(k,j)-L(k,1:k-1)*U(1:k-1,j);endendendendRA,hl,U,Lend end 以上上代码保存为 M 文件,并在命令窗口输入 A=20 2 3;1 8 1; 2 -3 15; b=0 0
11、 0' h=zhjLU(A)2 22 2 用矩阵分解方法求上题中 A 的逆矩阵。记1231000 ,1 ,0001bbb 分别求解方程组 123,AXb AXb AXb 由于三个方程组系数矩阵相同,可以将分解后的矩阵重复使用。对第程序运行结果:程序运行结果: L = U=1.0000
12、 0 0 20.0000 2.0000 3.00000.0500 1.0000 0 0 7.9000 &
13、nbsp;0.85000.1000 -0.4051 1.0000 0 0 15.0443实验验证:实验验证: 可以直接使用 MATLAB 内置 LU 分解 A=20 2 3;1 8 1; 2 -3 15; L U=lu(A) 输出结果与上程序输出结果一致。- 9 -一个方程组,由于 A=
14、LU,所以先求解下三角方程组1bLY,再求解上 三角方程组UXY,则可得逆矩阵的第一列列向量;类似可解第二、第三方程组,得逆矩阵的第二列列向量的第三列列向量。由三个列向 量拼装可得逆矩阵1A。解解: :MATLAB 代码如下: b1=1;0;0; b2=0;1;0; b3=0;1;1; A=20,2,3;1,8,1;2,-3,15; L=1,0,0;0.05,1,0;0.1,-0.4051,1; U=20 2 3;0 7.9 0.85;0 0 15.0443; Y1=Lb1 &nbs
15、p; X1=UY1 Y2=Lb2 X2=UY2 Y3=Lb3 X3=UY3 Y1 =1.0000-0.0500-0.1203 X1 =0.0517-0.0055-0.0080 Y2 =01.00000.4051 X2 =-0.01640.12370.0269 Y3 =01.00001.4051 X3 =-0.02570.1165 0.0934实验验证:实验验证:X1 X2 X3 ans =0.0517
16、 -0.0164 -0.0257-0.0055 0.1237 0.1165-0.0080 0.0269 0.0934 而:inv(A)=X1 X2 X3 得证- 10 -2 23 3 验证希尔伯特矩阵的病态性:对于三阶矩阵11/21/31/21/31/41/31/41/5H 取右端向量T11/613/1247/60b ,验证:(1)向量TT 1231 1 1Xxxx是方程组bHX的准确解;(2)取右端
17、向量 b 的三位有效数字得T1.83 1.080.783b ,求方程组的准确解X,并与 X 的数据作比较 。说明矩阵的病态性。1,1,1T解:解:(1)H=1 1/2 1/3;1/2 1/3 1/4;1/3 1/4 1/5; X=1;1;1; b=H*X b =1.83331.0833 0.7833 与题中相同(2) 先求出解 X,与数据作比较 。1,1,1TH=1 1/2 1/3;1/2 1/3 1/4;1/3 1/4 1/5; b=1.83;1.08;0.783; X=Hb X =1.08000.5400 1.4400 与相差较大,矩阵为病态矩阵1,1,1T3 31 1 用泰勒
18、级数的有限项逼近正弦函数- 11 -013 235 3( )sin ,0, ( ),0,/2( )/6,0,/2( )/6/120,0,/2yxx xy xx xyxxxxy xxxxx00.511.522.5300.250.50.7511.251.5用计算机绘出上面四个函数的图形。解:解:MATLABMATLAB 代码如下代码如下(1) syms x; taylor(sin(x) x=0:0.01*pi:pi plot(x,sin(x) (2) syms x; taylor(x) x=0:0.01*pi:pi/2 plot(x) &nb
19、sp; (3) syms x; taylor(x-x3/6) fplot('x-x3/6',0 pi/2)
20、 (4) syms x; taylor(x-x3/6+x5/120) fplot('x-x3/6+x5/120',0 pi/2) 结果图形右: x=0:0.1:pi; y=sin(x); plot(x,y,'-sk'); hold on x=0:0.1:pi/2; y=x;- 12 -plot(x,y,'-b*') hold on fplot('x-x.3/6',0,pi/2,0,2,2e-3,'-gx') hold