当前位置:文档之家› 数值分析课程课程设计汇总

数值分析课程课程设计汇总

课程 设 计我再也回不到大二了,大学是那么短暂设计题目 数值分析 学生姓名 李飞吾 学 号 x x x x x x x x 专业班级 信息计x x x x x 班 指导教师设 计 题 目共15题如下成绩数值分析课程设计1.1 水手、猴子和椰子问题:五个水手带了一只猴子来到南太平洋的一个荒岛上,发现那里有一大堆椰子。

由于旅途的颠簸,大家都很疲惫,很快就入睡了。

第一个水手醒来后,把椰子平分成五堆,将多余的一只给了猴子,他私藏了一堆后便又去睡了。

第二、第三、第四、第五个水手也陆续起来,和第一个水手一样,把椰子分成五堆,恰多一只猴子,私藏一堆,再去入睡,天亮以后,大家把余下的椰子重新等分成五堆,每人分一堆,正好余一只再给猴子,试问原先共有几只椰子?(15621) 试分析椰子数目的变化规律,利用逆向递推的方法求解这一问题 解:算法分析:解该问题主要使用递推算法,关于椰子数目的变化规律可以设起初的椰子数为0p ,第一至五次猴子在夜里藏椰子后,椰子的数目分别为01234,,,,p p p p p 再设最后每个人分得x 个椰子,由题:14(1)5k k p p +=- (k=0,1,2,3,4)51(1)5x p =-所以551p x =+,11k k p p +=+利用逆向递推方法求解151,4k k p p +=+ (k=0,1,2,3,4)MATLAB 代码: n=input('n= '); n= 15621 for x=1:n p=5*x+1; for k=1:5 p=5*p/4+1; endif p==fix(p), break end enddisp([x,p])1.2 设,15nn x I dx x=+⎰ (1)从0I 尽可能精确的近似值出发,利用递推公式:115(1,2,20)n n I I n n-=-+=计算机从1I 到20I 的近似值;(2)从30I 较粗糙的估计值出发,用递推公式:111(30,29,,3,2)55n n I I n n-=-+=计算从1I 到20I 的近似值;解:首先第一步,估计0I 和30I 的值:syms x n;int (x^0/(5+x),0,1) ans=log(2)+log(3)-log(5) eval(ans) ans= 0.1823则取0I 为0.18 syms x n;int(x^30/(5+x),0,1) ans =931322574615478515625*log(2)+931322574615478515625*log(3)-931322574615478515625*log(5)-79095966183067699902965545527073/465817912560 eval(ans) ans = 0MATLAB 中小数点后保留四位,由上面计算知道积分的值不为了零。

所以30I 的取值为0.00001-0.0001 MATLAB 代码: i=input('i='); i=0.18;>> if i>=0.1&&i<=0.2 for n=1:1:20 i=-5*i+1/n endelseif i>0&&i<=0.0001 for n=30:-1:2i=(-1/5)*i+1/(5*n) end end i =1.1336e+005 i =-5.6679e+005 i =2.8339e+006 i =-1.4170e+007 i =7.0848e+007 i =-3.5424e+008 i =1.7712e+009 i =-8.8560e+009 i =4.4280e+010 i =-2.2140e+011同理输入积分初始值i=0时可以得 i=0.0884结果分析:第二种方法所得的结果相对来说比较精确一些,也比较可靠因为第一种方法每一迭代都将最初的误差放大了五倍,使得最终的误差越来越大;而第一种方法经过每一次迭代都将误差缩小为初始误差的五分之一,使得最终的误差越来越小,因此相对来说比较可靠,性能较好。

1.3 绘制Koch 分形曲线问题描述:从一条直线段开始,将线段中间的三分之一部分用一个等边三角形的另两条边代替,形成具有5个结点的新的图形(图1-4);在新的图形中,又将图中每一直线段中间的三分之一部分都用一个等边三角形的另两条边代替,再次形成新的图形(图1-5),这时,图形中共有17个结点。

这种迭代继续进行下去可以形成Koch 分形曲线。

问题分析:考虑由直线段(2个点)产生第一个图形(5个点)的过程,设1P 和5P 分别为原始直线段的两个端点。

现在需要在直线段的中间依次插入三个点234,,P P P 产生第一次迭代的图形(图1-4)。

显然,2P 位于1P 点右端直线段的三分之一处,4P 点绕2P 旋转60度(逆时针方向)而得到的,故可以处理为向量24P P 经正交变换而得到向量23P P ,形成算法如下: (1)2151()/3P P P P =+-; (2)41512()/3P P P P =+-;(3)T3242()P P P P A =+-⨯;在算法的第三步中,A 为正交矩阵。

这一算法将根据初始数据(1P 和5P 点的坐标),产生图1-4中5个结点的cos sin 33sin cos 33A ππππ⎡⎤-⎢⎥=⎢⎥⎢⎥⎢⎥⎣⎦坐标。

这5个结点的坐标数组,组成一个5×2矩阵。

这一矩阵的第一行为为1P 的坐标,第二行为1P 的坐标,第二行为2P 的坐标……第五行为5P 的坐标。

矩阵的第一列元素分别为5个结点的x 坐标 ,第二列元素分别为5个结点的y 坐标。

问题思考与实验:(1)考虑在Koch 分形曲线的形成过程中结点数目的变化规律。

设第k 次迭代产生结点数为k n ,第1k +迭代产生结点数为1k n +,试写出k n 和1k n +之间的递推关系式;(2)参考问题分析中的算法,考虑图1-4到图1-5的过程,即由第一次迭代的5个结点的结点坐标数组,产生第二次迭代的17个结点的结点坐标数组的算法;(3)考虑由第k 次迭代的k n 个结点的结点坐标数组,产生第1k +次迭代的1k n +个结点的结点坐标数组的算法;(4)设计算法用计算机绘制出如下的Koch 分形曲线(图1-6) 解:(1) 143k k n n +=- (2)(3)算法及(4)代码分析:p=[0 0;10 0]; %P 为初始两个点的坐标,第一列为x 坐标,第二列为y 坐标 n=2; %n 为结点数A=[cos(pi/3) -sin(pi/3);sin(pi/3) cos(pi/3)]; %旋转矩阵 for k=1:4d=diff(p)/3; %diff 计算相邻两个点的坐标之差,得到相邻两点确定的向量%则d 就计算出每个向量长度的三分之一,与题中将线段三等分对应 m=4*n-3; %迭代公式q=p(1:n-1,:); %以原点为起点,前n-1个点的坐标为终点形成向量p(5:4:m,:)=p(2:n,:); %迭代后处于4k+1位置上的点的坐标为迭代前的相应坐标 p(2:4:m,:)=q+d; %用向量方法计算迭代后处于4k+2位置上的点的坐标 p(3:4:m,:)=q+d+d*A'; %用向量方法计算迭代后处于4k+3位置上的点的坐标 p(4:4:m,:)=q+2*d; %用向量方法计算迭代后处于4k 位置上的点的坐标 n=m; %迭代后新的结点数目 endplot(p(:,1),p(:,2)) %绘出每相邻两个点的连线 axis([0 10 0 3.5])2.1 用高斯消元法的消元过程作矩阵分解。

设20231812315A ⎡⎤⎢⎥=⎢⎥⎢⎥-⎣⎦消元过程可将矩阵A 化为上三角矩阵U ,试求出消元过程所用的乘数21m 、31m 、31m 并以如下格式构造下三角矩阵L 和上三角矩阵U(1)(1)212223(2)313233120231,1L m U a a m m a ⎡⎤⎡⎤⎢⎥⎢⎥==⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦验证:矩阵A 可以分解为L 和U 的乘积,即A=LU 。

矩阵LU 分解MATLAB 代码: function hl=zhjLU(A)[n,n]=size(A);RA=rank(A); if RA~=ndisp('因为A 的n 阶行列式hl 等于零,所以A 不能进行LU 分解.A 的秩RA 如下:'); RA,hl=det(A); return endif RA==nfor p=1:nh(p)=det(A(1:p,1:p)); endhl=h(1:n); for i=1:nif h(1,i)==0disp('因为A 的各阶主子式等不等于零,所以A 能进行LU 分解.A 的秩RA 和各阶顺序主子式值hl 依次如下:'); RA,hl return end endif h(1,i)~=0disp('因为A 的各阶主子式都不等于零,所以A 能进行LU 分解.A 的秩RA 和各阶顺序主子式值hl 如下:');for j=1:nU(1,j)=A(1,j);endfor k=2:n for i=2:n for j=2:nL(1,1)=1;L(i,i)=1; if i>jL(1,1)=1;L(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); end end end endRA,hl,U,L · end end以上上代码保存为M 文件,并在命令窗口输入 A=[20 2 3;1 8 1; 2 -3 15]; b=[0 0 0]'; h=zhjLU(A)2.2 用矩阵分解方法求上题中A 的逆矩阵。

记1231000,1,0001b b b ⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥===⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦ 分别求解方程组 123,,AX b AX b AX b ===由于三个方程组系数矩阵相同,可以将分解后的矩阵重复使用。

对第一个方程组,由于A=LU ,所以先求解下三角方程组1b =LY ,再求解上三角方程组=UX Y ,则可得逆矩阵的第一列列向量;类似可解第二、第三方程组,得逆矩阵的第二列列向量的第三列列向量。

由三个列向量拼装可得逆矩阵1-A 。

解: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=L\b1X1=U\Y1 Y2=L\b2 X2=U\Y2 Y3=L\b3 X3=U\Y3 Y1 =1.0000 -0.0500 -0.1203 X1 =0.0517 -0.0055 -0.0080 Y2 =0 1.0000 0.4051 X2 = -0.0164 0.1237 0.0269 Y3 = 0 1.0000 1.4051 X3 =-0.0257 0.11650.09342.3 验证希尔伯特矩阵的病态性:对于三阶矩阵11/21/31/21/31/41/31/41/5H ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦取右端向量T[11/613/1247/60]b =,验证:(1)向量T T123[][111]X x x x ==是方程组b =HX 的准确解;(2)取右端向量b 的三位有效数字得T[1.83 1.080.783]b =,求方程组的准确解*X ,并与X 的数据[1,1,1]T作比较 。

相关主题