ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:43.13KB ,
资源ID:11517597      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11517597.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Hilbert代数方程组的数值解法.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Hilbert代数方程组的数值解法.docx

1、Hilbert代数方程组的数值解法Hilbert代数方程组的数值解法1 Hilbert矩阵的条件数和矩阵的阶数的关系编制Matlab程序:clear,clcformat long%format shortfor n=1:14;A=hilb(n);%A=rand(n);condA(n)=cond(A,inf);endplot(log10(condA)得出图形图1:Hilbert矩阵和阶次的关系由图可见a.Hilbert矩阵的2-条件数的对数与阶次近似正比; b.阶次超过12后,计算困难,舍入误差会导致计算不准结论:Hilbert矩阵的2-条件数随阶次指数增长,关系大概是:Log10(Cond(A

2、)= 1.33791720780254(n-1)2.各种求解方法的对比2.1 直接法:Gauss消去方法(程序见附录,下同)在双精度型变量下,即eps=2.220446049250313e-016,对于直接法Gauss消去方法,求解Hilbert矩阵方程组,在阶次n=13时,解得:X=1 0.99997 1.0013 0.97881 1.1906 -0.035441 4.6171 -7.3967 14.089 -12.542 9.9162 -2.3817 1.5624出现明显错误,可见Gauss消去方法对病态问题比较敏感。求解阶次不高。2.2 Jacobi迭代法很遗憾,jakobi迭代法的迭代

3、矩阵的谱半径随阶次线性上升(程序见附录2),普遍大于1,计算结果发送,无法迭代出满意的结果。需放弃图2:Jacobi迭代矩阵的谱半径2.3 Gauss-Seidel迭代与SOR迭代求解先分析SOR迭代矩阵的谱半径和松弛因子w的关系图3:SOR迭代矩阵的谱半径和松弛因子w的关系可以发现SOR迭代和G-S迭代的谱半径都普遍接近于1,因此松弛因子的选择对计算结果的影响不大。我们选择w=1,即G-S迭代来做数值实验:选定e=0.000001;迭代次数:15610次下降曲线:图4:G-S迭代下降曲线取w=1.5时,迭代次数需58798次前100步下降曲线图5:SOR(w=1.5)下降曲线w=0.5 迭代

4、次数16290图6:SOR(w=0.5)下降曲线2.4 SOR按照寻优算法的迭代求解寻优得出w=0.1时,谱半径相对较小,迭代次数只需3689次,下降曲线也非常快,如图7图7:SOR(w=0.1)下降曲线2.5 共轭梯度法迭代求解奇迹发生了,迭代只需要9次就完成了,下降也非常快,见图图8:共轭梯度法下降曲线2.6 各算法综合对比综上所述,在双精度的数值精度下和e=0.00001下,在笔记本可接受的计算时间里,做各种算法的对比如下:GaussJacobiG-SSORCG能计算到n阶122120020005500迭代次数/最多中等较少计算时间/慢较快超快稳定性较差最差一般较好很好3. 讨论病态方程

5、组的求解3.1 对于Hilbert病态方程组的求解Gauss直接法和Jacobi迭代法都比较差,G-S法和SOR虽能求解,但由于其条件数都接近于1,收敛太慢,计算时间太长,因此实际可计算的阶次不高。3.2 采用高精度计算我们分别采用单精度和双精度型变量,以Gauss消去方法为求解办法,做数值实验,x2=gauss(A, b)x3=gauss(single(A), single(b)当阶次n=6时,得x2 = 0.99999999999908 1.00000000002630 0.99999999982172 1.00000000046435 0.99999999948691 1.0000000

6、0020235x3 = 1.0003130 0.9906988 1.0645127 0.8293791 1.1905806 0.9242350可以发现,x3已经明显偏离了正解,得出结论,采用高精度计算所得解有更多有效位。3.3 采用预处理方法预处理共轭梯度法见附录,采用后,可以发现,计算4000阶的问题,速度加快很多,迭代次数也减少了。 附录1 Gauss消去方法function x=Gauss(a,b)% Gauss消去法n,m=size(a);nb=length(b);det=1;%存储行列式值x=zeros(n,1);for k=1:n-1 for i=k+1:n if a(k,k)=0

7、 return end m=a(i,k)/a(k,k); for j=k+1:n a(i,j)=a(i,j)-m*a(k,j); end b(i)=b(i)-m*b(k); end det=det*a(k,k);enddet=det*a(n,n); for k=n:-1:1 %回代 for j=k+1:n b(k)=b(k)-a(k,j)*x(j); end x(k)=b(k)/a(k,k);end附录2 Jacobi迭代的收敛性分析clear,clcformat long%format shortfor n=1:25;A=hilb(n);D = diag(diag(A);B = inv(D)

8、 * (D - A);x=ones(n,1);e=0.000001;e=eps;b=A*x;f = inv(D) * b;% %谱半径大于等于1就不收敛p(n) = max(abs(eig(B);endplot(p)xlabel(阶次)ylabel(谱半径)title(Jacobi迭代收敛性分析)附录3 G-S迭代function x, k, Ve = gauss_seidel(A, b, e,M) NAr, NA = size(A);if NAr = NA, error(A is not a square matrix); end%检查A,b的大小是否匹配Nbr, Nb = size(b);

9、if (Nbr = NA) & (1 = Nb), error(A and b have non-compatible dimensions); end%e不能小于计算机的最小精度if e = 1 sprintf(G-S iteration method not convergent) %returnendwhile (r = e) & (k = M) x0 = x; x = B*x0 + f; k = k + 1; r = max(abs(x - x0);% % if k = size(Ve, 1)% Ve(k,1) = r;% endend附录4 SOR迭代function x,n=SOR

10、(A,b,w,e,M)x0 = zeros(size(b);%初始解设置为与b同型的零向量% if(w=2)% error;% return;% endD=diag(diag(A); %求A的对角矩阵L=-tril(A,-1); %求A的下三角阵U=-triu(A,1); %求A的上三角阵B=inv(D-L*w)*(1-w)*D+w*U);f=w*inv(D-L*w)*b;n=0; %迭代次数r=1+e;while r=e x =B*x0+f; n=n+1; r = max(abs(x - x0);% Ve(n)=r; x0=x; if(n=M) disp(Warning: 迭代次数太多,可能

11、不收敛!); return; endend% figure% stem(Ve(1:100)% title(SOR迭代误差曲线);% xlabel(迭代次数);% ylabel(误差); .附录5 CG方法function x,n= conjgrad (A,b,x0)r1 = b-A*x0;p = r1;n = 0;for i=1:rank(A) %以下过程可参考算法流程 if(dot(p,A*p) 1.0e-50) %循环结束条件 break; end alpha = dot(r1,r1)/dot(p,A*p); x = x0+ alpha*p; r2 = r1- alpha*A*p; if(r2 =eps alpha = dot(r1,z1)/dot(p,A*p); x = x0 + alpha*p; r2 = r1 - alpha*A*p; z2 = iM*r2; belta = dot(r2,z2)/dot(r1,z1); p = z2+belta*p; n = n + 1; tol = norm(x-x0); x0 = x; %更新迭代值 r1 = r2; z1 = z2;end

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1