收藏 分销(赏)

《应用计算方法教程》大作业.doc

上传人:精*** 文档编号:3215185 上传时间:2024-06-25 格式:DOC 页数:22 大小:2.47MB 下载积分:10 金币
下载 相关 举报
《应用计算方法教程》大作业.doc_第1页
第1页 / 共22页
《应用计算方法教程》大作业.doc_第2页
第2页 / 共22页


点击查看更多>>
资源描述
《应用计算方法教程》作业 姓名: * * 学号: S2017**** 专业: * * * * 学院: 机械工程学院 联系方式: *********** 任课教师: 丁军 作业一.用任意方法求解七阶方程-5+22x-12x2+x3+13x4+10x5-7x6-4x7 牛顿迭代法: y=@(x)4*x^7+7*x^6-10*x^5-13*x^4-x^3+12*x^2-22*x+5; s=@(m)28*m^6+42*m^5-50*m^4-52*m^3-3*m^2+24*m-22; p0=0;N=1000;Tol=0.001; for k=1:N p1=p0-y(p0)/s(p0); if abs(p1-p0)>Tol p0=p1; else break end end disp(p1);disp(k) 作业二.实验4-2 合理利用LU分解法(使用列选主元可恰当加分)或追赶法求解下列方程组: 程序: A=[1.3,-1,-1,2.4,-3.4;2.4,-1,-1,1.4,3.7;2,1,-2,3.6,6.8;2.5,-1,4,3,6.6;1.5,-1,-1,5.3,2.8]; b=[4.2;6.3;5.5;3.6;6.2]; L=eye(5);U(1,:)=A(1,:); y=[0;0;0];x=[0;0;0]; for k=2:5 if U(k-1,k-1)==0 { disp('分解失败'); Return } end L(k:5,k-1)=A(k:5,k-1)/U(k-1,k-1) U(k,k:5)=A(k,k:5)-L(k,1:k-1)*U(1:k-1,k:5) if k<5 A(k+1:5,k)=A(k+1:5,k)-L(k+1:5,1:k-1)*U(1:k-1,k); end end L1=inv(L);y=L1*b; U1=inv(U);x=U1*y; disp(L);disp(U);disp(x); 结果: 作业三.实验4-3 1 1/2 1/3 1/4 1/5 1/6 1/7 1/8 1/9 1/10 1/2 1/3 1/4 1/5 1/6 1/7 1/8 1/9 1/10 1/11 1/3 1/4 1/5 1/6 1/7 1/8 1/9 1/10 1/11 1/12 1/4 1/5 1/6 1/7 1/8 1/9 1/10 1/11 1/12 1/13 1/5 1/6 1/7 1/8 1/9 1/10 1/11 1/12 1/13 1/14 1/6 1/7 1/8 1/9 1/10 1/11 1/12 1/13 1/14 1/15 1/7 1/8 1/9 1/10 1/11 1/12 1/13 1/14 1/15 1/16 1/8 1/9 1/10 1/11 1/12 1/13 1/14 1/15 1/16 1/17 1/9 1/10 1/11 1/12 1/13 1/14 1/15 1/16 1/17 1/18 1/10 1/11 1/12 1/13 1/14 1/15 1/16 1/17 1/18 1/19 观察结论:矩阵的条件数越来越大,而且远远大于1,这是一个病态问题 1) LU分解法 算法实现: % n=5:10 clear;clc; n=10 for i=1:n for j=1:n H(i,j)=1/(i+j-1); end end disp(H) cond(H,1) format short; n=size(H); L=eye(n); U(1,:) = H(1,:); for k = 2:n if U(k-1,k-1)==0 disp('分解失败');return end L(k:n,k-1)=H(k:n,k-1)/U(k-1,k-1); U(k,k:n)=H(k,k:n)-L(k,1:k-1)*U(1:k-1,k:n); if k<n H(k+1:n,k)=H(k+1:n,k)-L(k+1:n,1:k-1)*U(1:k-1,k); end end B([1:10],1)=1; Y=L\B; L U X=U\Y 运行结果: L= 1.0000 0 0 0 0 0 0 0 0 0 0.5000 1.0000 0 0 0 0 0 0 0 0 0.3333 1.0000 1.0000 0 0 0 0 0 0 0 0.2500 0.9000 1.5000 1.0000 0 0 0 0 0 0 0.2000 0.8000 1.7143 2.0000 1.0000 0 0 0 0 0 0.1667 0.7143 1.7857 2.7778 2.5000 1.0000 0 0 0 0 0.1429 0.6429 1.7857 3.3333 4.0909 3.0000 1.0000 0 0 0 0.1250 0.5833 1.7500 3.7121 5.5682 5.6538 3.5000 1.0000 0 0 0.1111 0.5333 1.6970 3.9596 6.8531 8.6154 7.4667 4.0000 1.0000 0 0.1000 0.4909 1.6364 4.1119 7.9301 11.6308 12.6000 9.5294 4.5000 1.0000 U= 1.0000 0.5000 0.3333 0.2500 0.2000 0.1667 0.1429 0.1250 0.1111 0.1000 0 0.0833 0.0833 0.0750 0.0667 0.0595 0.0536 0.0486 0.0444 0.0409 0 0 0.0056 0.0083 0.0095 0.0099 0.0099 0.0097 0.0094 0.0091 0 0 0 0.0004 0.0007 0.0010 0.0012 0.0013 0.0014 0.0015 0 0 0 0 0.0000 0.0001 0.0001 0.0001 0.0002 0.0002 0 0 0 0 0 0.0000 0.0000 0.0000 0.0000 0.0000 0 0 0 0 0 0 0.0000 0.0000 0.0000 0.0000 0 0 0 0 0 0 0 0.0000 0.0000 0.0000 0 0 0 0 0 0 0 0 0.0000 0.0000 0 0 0 0 0 0 0 0 0 0.0000 X=1.0e+06 * -0.0000 0.0010 -0.0238 0.2402 -1.2611 3.7834 -6.7261 7.0007 -3.9379 0.9237 2) LU分解迭代求精法 算法实现: % n=5:10 clear;clc; n=10; for i=1:n for j=1:n H(i,j)=1/(i+j-1); end end format short; n=size(H); L=eye(n); U(1,:) = H(1,:); tol=10^(-3); for k = 2:n if U(k-1,k-1)==0 disp('分解失败');return end L(k:n,k-1)=H(k:n,k-1)/U(k-1,k-1); U(k,k:n)=H(k,k:n)-L(k,1:k-1)*U(1:k-1,k:n); if k<n H(k+1:n,k)=H(k+1:n,k)-L(k+1:n,1:k-1)*U(1:k-1,k); end end B([1:10],1)=1; Y=L\B; X=U\Y; r=B-H*X; Y=L\r; w=U\Y; format long while norm(w)<tol r=B-H*X; Y=L\r; w=U\Y; X=X+w; end X 运算结果: X =1.0e+06 * -0.000009998346355 0.000989857965323 -0.023756990291064 0.240212759410420 -1.261130560338435 3.783425339621443 -6.726139778865695 7.000720697677755 -3.937927027136435 0.923715699219681 结果分析:对于同一复杂程度的方程组,LU分解迭代求精法所得的解较LU分解法所得到的解的精确度更高。 作业四.实验5-1 分别用Jacobi、Seidel、Sor(=0.8,1.1,1.2,1.3,1.4,1.5)迭代求解下面的方程组,并做结果分析。 初值,精度要求:<。 Jacobi: A=[12.3,-2,-1,3.4,-3.7;1.4,9,-3,2.4,2.7;2.1,1,8,2.6,5.8;3.5,-2.1,1,13,4.6;2.5,-1,-2,5.3,14.8]; b=[4.8;2.3;2.5;3.6;2.2]; X0=[0;0;0;0;0]; X=X0;K=1; while K<=30 for i=1:5 X(i)=(b(i)-A(i,:)*X0)/A(i,i)+X0(i); end if norm(X-X0)/X<0.00001 disp(X); disp(K); return; end K=K+1; X0=X; end 结果: Seidel: A=[12.3,-2,-1,3.4,-3.7;1.4,9,-3,2.4,2.7;2.1,1,8,2.6,5.8;3.5,-2.1,1,13,4.6;2.5,-1,-2,5.3,14.8]; b=[4.8;2.3;2.5;3.6;2.2]; X0=[0;0;0;0;0]; X=X0;K=1; while K<=20 for i=1:5 X(i)=(b(i)-A(i,:)*X)/A(i,i)+X(i); end if norm(X-X0)/X<0.00001 disp(X); disp(K); return; end K=K+1; X0=X; end disp('发散'); 结果: SOR: A=[12.3,-2,-1,3.4,-3.7;1.4,9,-3,2.4,2.7;2.1,1,8,2.6,5.8;3.5,-2.1,1,13,4.6;2.5,-1,-2,5.3,14.8]; b=[4.8;2.3;2.5;3.6;2.2]; X0=[0;0;0;0;0]; X=X0;K=1; w=[0.8,1.1,1.2,1.3,1.4,1.5]; for j=1:6 m=w(j); while K<=20 for i=1:5 X(i)=m*(b(i)-A(i,:)*X)/A(i,i)+X(i); end if norm(X-X0,inf)/norm(X,inf)<0.00001 disp(X); disp(K); break; end K=K+1; X0=X; end end 结果: w=0.8 w=1.1 w=1.2 w=1.2 作业五.实验7-2 试验一: 1. 算法实现 % 原函数图像 figure(1) x=-1:0.01:1; y=1./(1+25.*x.^2); plot(x,y,'k') grid on;hold on; %Lagrange插值 yy=0;n=5;x=-1:2/n:1; y=1./(1+25.*x.^2); xx=-1:0.01:1; for k=1:n+1 t=1; for i=1:n+1 if i~=k; t=t.*(xx-x(i))/(x(k)-x(i)); end end yy=yy+t*y(k); end plot(xx,yy,'g-') hold on n=10;yy=0;x=-1:2/n:1; y=1./(1+25.*x.^2);xx=-1:0.01:1; for k=1:n+1 t=1; for i=1:n+1 if i~=k; t=t.*(xx-x(i))/(x(k)-x(i)); end end yy=yy+t*y(k); end plot(xx,yy,'r:*'); legend('y=1./(1+25.*x.^2)','n=5','n=10'); title('Lagrange') 2. 运行结果 试验二: 1. 算法实现 % 原函数图像 figure(1) x=-1:0.01:1; y=1./(1+25.*x.^2); plot(x,y,'k') grid on;hold on; % chepyshev结点 n=10;yy=0;kk=0:10; x=-cos((kk*pi)/n); y=1./(1+25.*x.^2); xx=-1:0.01:1; for k=1:n+1 t=1; for i=1:n+1 if i~=k; t=t.*(xx-x(i))/(x(k)-x(i)); end end yy=yy+t*y(k); end plot(xx,yy,'r:*'); legend('y=1./(1+25.*x.^2)','n=5','n=10'); title('Lagrange and Chebyshev') 运行结果 作业六.实验8-1 算法实现: clear all;clc; format short x=[0.4 0.55 0.65 0.80 0.90 1.05]; y=[0.41075 0.57815 0.69675 0.88811 1.02652 1.25386]; A=zeros(4,4); for m=1:4 for n=1:4 for i=1:6 A(m,n)=A(m,n)+x(i)^(m+n-2); end end end d=zeros(4,1); for n=1:4 for i=1:6 d(n,1)=d(n,1)+y(i)*x(i)^(n-1); end end a=A\d; R=0; for i=1:6 R=R+(y(i)-(a(1)+a(2)*x(i)+a(3)*x(i)^2+a(4)*x(i)^3))^2; end disp('系数a=');disp(a);disp('平方误差R=');disp(R); 运行结果: 系数a 平方误差R -0.0056 5.0057e-09 1.0331 -0.0660 0.2137 2) 运用命令行窗口: Step1: >> syms x; >> p0=1; >> p1=x-quad('[x]',0.40,1.05)/(1.05-0.40)*p0 输出:p1 =x - 29/40 Step2: >>p2=x^2-quad('[x.^2]',0.40,1.05)/(1.05-0.40)*p0-quad('[x.^3-29*x.^2/40]',0.40,1.05)/quad('[(x-29/40).^2]',0.40,1.05)*p1 输出:p2 =x^2 - (29*x)/20 + 1177/2400 Step3: >> p3=x^3-quad('[x.^3]',0.40,1.05)/(1.05-0.40)*p0-quad('[x.^4-29*x.^3/40]',0.40,1.05)/quad('[(x-29/40).^2]',0.40,1.05)*p1-quad ('[x.^5 - 29*x.^4/20 + 1177/2400*x.^3]',0.40,1.05)/ quad('[(x.^2 - (29*x)/20 + 1177/2400).^2]',0.40,1.05)*p2 输出:p3 =x^3 - (87*x^2)/40 + (3027*x)/2000 - 53621/160000 Step4: >> x=[0.40,0.55,0.65,0.80,0.90,1.05];y=[0.41075;0.57815;0.69675;0.88811;1.02652;1.25386]; A(1:6,1)=ones(size(x)); A(1:6,2)=x - 29/40 ; A(1:6,3)=x.^2 - (29*x)/20 + 1177/2400 ; A(1:6,4)=x.^3 - (87*x.^2)/40 + (3027*x)/2000 - 53621/160000; C=A\y 输出: C = 0.8042 1.2881 0.3989 0.2137 Step5: >> s=0;k=1; while k<7 s=s+(0.2137* (x(k)^3 - (87*x(k)^2)/40 + (3027*x(k))/2000 - 53621/160000) -0.3989*(x(k)^2 - (29*x(k))/20 + 1177/2400 )+1.2881* (x(k) - 29/40)+0.8042-y(k))^2 ;k=k+1; end >> s 输出: s = 0.0075 结果分析:比较(1)和(2)可以发现正交之后得到的最小二乘法的误差是直接多项式拟合的万分之一,通过正交的pj(x)的函数系解决最小二乘法的病态结果问题,提供了求最小二乘法拟合多项式的快捷方法。 作业七.计算 (1)编写复化梯形公式和复化Simpson公式通用子程序,,分别采用4,8,16,32,64等分区间计算。 (2)使用Romberg求积公式。 (1) 复化梯形公式 程序: a=0;b=1;s=0; f=@(x)(log(1+x)/x); fa=1;fb=log(2); n=2; for i=1:5 n=n*2; h=(b-a)/(n); f1=0; for i=1:n-1 f1=f1+f(a+h); end s=h*(fa+fb+2*f1)/2; disp(s) end 结果: 复化simposon公式 程序: a=0;b=1;s=0; f=@(x)(log(1+x)/x); fa=1;fb=log(2); n=1; for j=1:5 n=n*2; h=(b-a)/(2*n); f1=0; for i=0:n-1 f1=f1+f(a+(2*i+1)*h); end f2=0; for i=1:n-1 f2=f2+f(a+2*i*h); end s=h*(fa+fb+4*f1+2*f2)/3; disp(s) end 结果: (2)程序: function y=romberg(f,n,a,b) f=@(x)(log(1+x)/x); a=0;b=1;n=4; z=zeros(n,n); h=b-a; z(1,1)=(h/2)*(f(a)+f(b)); f1=0; for i=2:n for k=1:2^(i-2) f1=f1+f(a+(k-0.5)*h); end z(i,1)=0.5*z(i-1,1)+0.5*h*f1; h=h/2; f1=0; for j=2:i z(i,j)=z(i,j-1)+(z(i,j-1)-z(i-1,j-1))/(4^(j-1)-1); end end z,n fun=inline('ln(1+x)./x'); romberg(fun,8,0,1) 作业八.实验10-1 利用Euler法(h=0.025), 改进Euler法(h=0.05),4阶Rung-Kutta方法(h=0.1)求解初值问题。 (1)Euler法 程序: f=@(x,y)(-(y+1)*(y+3)); x0=0; y0=-2; n=8; h=0.025; x=x0;y=y0; for i=1:n y=y+h*f(x,y); x=x+h; disp(x) disp(y) end 结果: (2)改进Euler法 程序: f=@(x,y)(-(y+1)*(y+3)); x0=0; y0=-2; n=4; h=0.05; x=x0;y=y0; for i=1:n y1=y+h*f(x,y); y2=y+h*f(x+h,y1); y=(y1+y2)/2; x=x+h; disp(x) disp(y) end 结果: (3)4阶Rung-Kutta方法 程序: f=@(x,y)(-(y+1)*(y+3)); x0=0; y0=-2; n=3; h=0.1; x=x0;y=y0; for i=1:n K1=h*f(x,y); K2=h*f(x+h/2,y+K1/2); K3=h*f(x+h/2,y+K2/2); K4=h*f(x+h,y+K3); y=y+(K1+2*K2+2*K3+K4)/6; x=x+h; disp(x) disp(y) end 结果: (注:专业文档是经验性极强的领域,无法思考和涵盖全面,素材和资料部分来自网络,供参考。可复制、编制,期待你的好评与关注)
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服