迭代解法的matlab实现.doc

上传人:cl****1 文档编号:547556840 上传时间:2024-02-19 格式:DOC 页数:12 大小:277KB
返回 下载 相关 举报
迭代解法的matlab实现.doc_第1页
第1页 / 共12页
迭代解法的matlab实现.doc_第2页
第2页 / 共12页
迭代解法的matlab实现.doc_第3页
第3页 / 共12页
迭代解法的matlab实现.doc_第4页
第4页 / 共12页
迭代解法的matlab实现.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《迭代解法的matlab实现.doc》由会员分享,可在线阅读,更多相关《迭代解法的matlab实现.doc(12页珍藏版)》请在金锄头文库上搜索。

1、高等教育出版社 教育电子音像出版社 作者:任玉杰 第四章 解线性方程组的迭代法的MATLAB程序第四章 解线性方程组的迭代法解线性方程组的迭代法是从初始解出发,根据设计好的步骤用逐次求出的近似解逼近精确解.在第三章中介绍的解线性方程组的直接方法一般适合于为低阶稠密矩阵(指n不大且元多为非零)的情况,而在工程技术和科学计算中常会遇到大型稀疏矩阵(指n很大且零元较多)的方程组,迭代法在计算和存贮两方面都适合后一种情况.由于迭代法是通过逐次迭代来逼近方程组的解,所以收敛性和收敛速度是构造迭代法时应该注意的问题.另外,因为不同的系数矩阵具有不同的性态,所以大多数迭代方法都具有一定的适用范围.有时,某种

2、方法对于一类方程组迭代收敛,而对另一类方程组迭代时就发散.因此,我们应该学会针对具有不同性质的线性方程组构造不同的迭代.4.1 迭代法和敛散性及其MATLAB程序4.1.2 迭代法敛散性的判别及其MATLAB程序根据定理4.1和谱半径定义,现提供一个名为pddpb.m的M文件,用于判别迭代公式(4.7)产生的迭代序列的敛散性.用谱半径判别迭代法产生的迭代序列的敛散性的MATLAB主程序输入的量:线性方程组的迭代公式(4.7)中的;输出的量:矩阵的所有特征值和谱半径mH 及其有关迭代法产生的迭代序列的敛散性的相关信息.function H=ddpbj(B)H=eig(B);mH=norm(H,i

3、nf);if mH=1disp(请注意:因为谱半径不小于1,所以迭代序列发散,谱半径mH和B的所有的特征值H如下:)elsedisp(请注意:因为谱半径小于1,所以迭代序列收敛,谱半径mH和B的所有的特征值H如下:)endmH4.1.3 与迭代法有关的MATLAB命令(一) 提取(产生)对角矩阵和特征值可以用表41的MATLAB命令提取对角矩阵和特征值. 表41 提取(产生)对角矩阵和特征值MATLAB命令功 能DX=diag(X)若输入向量X,则输出DX是以X为对角元的对角矩阵;若输入矩阵X,则输出DX是以X的对角元构成的向量;DX=diag(diag(X)输入矩阵X,输出DX是以X的对角元

4、构成的对角矩阵,可用于迭代法中从A中提取D.lm=eig(A)输入矩阵A,输出lm是A的所有特征值. (二) 提取(产生)上(下)三角形矩阵 可以用表42的MATLAB命令提取矩阵的上三角形矩阵和下三角形矩阵. 表42 提取矩阵的上三角形矩阵和下三角形矩阵MATLAB命令功 能U=triu(A)输入矩阵,输出是的上三角形矩阵.L=tril(A)输入矩阵,输出是的下三角形矩阵.U=triu(A,1)输入矩阵,输出是的上三角形矩阵,但对角元为0,可用于迭代法中从中提取.L=tril(A,-1)输入矩阵,输出是的下三角形矩阵,但对角元为0,可用于迭代法中从中提取.(三)稀疏矩阵的处理对稀疏矩阵在存贮

5、和运算上的特殊处理,是MATLAB进行大规模科学计算时的特点和优势之一.可以用表43的MATLAB命令,输入稀疏矩阵的非零元(零元不必输入),即可进行运算. 表43 稀疏矩阵的MATLAB命令MATLAB命令功 能ZA=sparse(r,c,v,m,n)表示在第r行、第c列输入数值v,矩阵共m 行n列,输出ZA,给出 (r, c) 及v为一稀疏矩阵.MA=full(ZA) 输入稀疏矩阵ZA,输出为满矩阵MA(包含零元)4.2 雅可比(Jacobi)迭代及其MATLAB程序4.2.2 雅可比迭代的收敛性及其MATLAB程序根据定理4.3和公式(4.14),现提供一个名为jspb.m的M文件如下:

6、判别雅可比迭代收敛性的MATLAB主程序输入的量:线性方程组的系数矩阵;输出的量:系数矩阵的 的值和有关雅可比迭代收敛性的相关信息.function a=jspb(A)n m=size(A); for j=1:ma(j)=sum(abs(A(:,j)-2*(abs(A(j,j);endfor i=1:nif a(i)=0disp(请注意:系数矩阵A不是严格对角占优的,此雅可比迭代不一定收敛)returnendendif a(i) A=10 -1 -2;-1 10 -2;-1 -1 5;a=jspb(A)运行后输出结果请注意:系数矩阵A是严格对角占优的,此方程组有唯一解,且雅可比迭代收敛 a =

7、-8 -8 -1(2)在MATLAB工作窗口输入程序 A=10 -1 -2;-1 10 -2;-1 -1 0.5;a=jspb(A)运行后输出结果请注意:系数矩阵A不是严格对角占优的,此雅可比迭代不一定收敛a = -8.0000e+000 -8.0000e+000 3.5000e+0004.2.3 雅可比迭代的两种MATLAB程序利用MATLAB程序和雅可比迭代解线性方程组的常用的方法有两种,一种方法是根据雅可比迭代公式(4.11)、(4.12)式、定理4.3和公式(4.14)编写一个名为jacdd.m的M文件并保存,然后在MATLAB工作窗口输入对应的命令,执行此文件;另一种方法是根据雅可比

8、迭代的定义,利用提取对角矩阵和上、下三角矩阵的MATLAB程序解线性方程组.下面我们分别介绍这两种方法.(一) 雅可比迭代公式的MATLAB程序用雅可比迭代解线性方程组的MATLAB主程序输入的量:线性方程组的系数矩阵和b, 初始向量X0,范数的名称P = 1, 2, inf或 fro.,近似解X的误差(精度)wucha和迭代的最大次数max1;输出的量:系数矩阵的 的值和有关雅可比迭代收敛性的相关信息及其的精确解jX和近似解X.根据雅可比迭代(4.11)、(4.12)式、定理4.3和公式(4.14),现提供一个名为jacdd.m的M文件如下:function X=jacdd(A,b,X0,P

9、,wucha,max1)n m=size(A); for j=1:ma(j)=sum(abs(A(:,j)-2*(abs(A(j,j);endfor i=1:nif a(i)=0disp(请注意:系数矩阵A不是严格对角占优的,此雅可比迭代不一定收敛)returnendendif a(i)0disp(请注意:系数矩阵A是严格对角占优的,此方程组有唯一解,且雅可比迭代收敛 )endfor k=1:max1k for j=1:mX(j)=(b(j)-A(j,1:j-1,j+1:m)*X0(1: j-1,j+1:m)/A(j,j);endX,djwcX=norm(X-X0,P); xdwcX=djwc

10、X/(norm(X,P)+eps); X0=X;X1=Ab;if (djwcXwucha)&(xdwcXwucha)&(xdwcXwucha)disp(请注意:雅可比迭代次数已经超过最大迭代次数max1 )enda,X=X;jX=X1,例4.2.3 用范数和判别雅可比迭代的MATLAB主程序解例4.2.2 中的方程组,解的精度为0.001,分别取最大迭代次数max1=100,5,初始向量X0=(0 0 0)T,并比较它们的收敛速度.解 (1)取最大迭代次数max1=100时.首先保存名为jacdd.m的M文件,然后在MATLAB工作窗口输入程序 A=10 -1 -2;-1 10 -2;-1 -

11、1 5; b=7.2;8.3;4.2; X0=0 0 0; X=jacdd(A,b,X0,inf,0.001,100)运行后输出结果 请注意:系数矩阵A是严格对角占优的,此方程组有唯一解,且雅可比迭代收敛请注意:雅可比迭代收敛,此方程组的精确解jX和近似解X如下: a = -8 -8 -1jX = 1.1000 1.2000 1.3000X = 1.0994 1.1994 1.2993在MATLAB工作窗口输入程序 A=10 -1 -2;-1 10 -2;-1 -1 0.5; b=7.2;8.3;4.2; X0=0 0 0; X=jacdd(A,b,X0,inf, 0.001,100)运行后输

12、出结果请注意:系数矩阵A不是严格对角占优的,此雅可比迭代不一定收敛请注意:雅可比迭代收敛,此方程组的精确解jX和近似解X如下: a = -8.0000 -8.0000 3.5000jX = 24.5000 24.6000 106.6000X = 24.0738 24.1738 104.7974(2)取最大迭代次数max1=5时,在MATLAB工作窗口输入程序 A=10 -1 -2;-1 10 -2;-1 -1 5; b=7.2;8.3;4.2; X0=0 0 0; X=jacdd(A,b,X0,inf,0.001,5)运行后输出结果请注意:系数矩阵A是严格对角占优的,此方程组有唯一解,雅可比迭

13、代收敛 请注意:雅可比迭代次数已经超过最大迭代次数max1 a = -8 -8 -1jX = 1.1000 1.2000 1.3000X = 1.0951 1.1951 1.2941在MATLAB工作窗口输入程序 A=10 -1 -2;-1 10 -2;-1 -1 0.5; b=7.2;8.3;4.2; X0=0 0 0; X=jacdd(A,b,X0,inf, 0.001,5)运行后输出结果请注意:系数矩阵A不是严格对角占优的,此雅可比迭代不一定收敛请注意:雅可比迭代次数已经超过最大迭代次数max1 a = -8.0000 -8.0000 3.5000jX = 24.5000 24.6000 106.6000X = 5.5490 5.6490 27.6553由(1)和(2)可见,如果系数矩阵是严格对角占优的,则雅可比迭代收敛的速度快;如果系数矩阵不是严格对角占优的,则雅可比迭代收敛的速度慢.因此, 的值越小,雅可比迭代收敛的速度越快. (二)利用雅可比迭代定义编写的解线性方程组的MATLAB程序利用雅可比迭代定义编写解线性方程组(4.5)的MATLAB程序的一般步骤步骤1 将线性方程组

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号