直接法、迭代法解线性方程组
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3 基于 Matlab 的数值试验
3.1 计算平台: ①CPU(2.50GHz) 、 ②RAM(4.00GB) 、 ③OS(Windows 7 旗舰版) 3.2 参数设置: 因为所用方法为直接法,所以不考虑算法误差、计算精度、迭代步数问题。 3.3 计算结果(程序代码详见附录Ⅰ)
线性方 程组
11x1 3x2 2 x3 3 23x1 11x2 x3 0 x 2 x 2 x 1 2 3 1 x1 1.0000 x2 2.0000 x 1.0000 3
7 0.031200
6 x1 2 x2 2 x3 4 x4 12 4 x 2 x 2 x 10 2 3 4 12 x 8 x x 2 3 4 21 2 x2 3x3 14 x4 26 x1 0.9954 x 2.990Baidu Nhomakorabea 2 x3 1.9859 x4 1.0044
0.000000
方程组 的解 计算时 间(s) ⑴
3
⑵
⑶
4
3.4 分析改进 ①对所求解的三个线性方程组,可以看到运算的时间都接近于 0,说明用直 接法解线性方程组的时间, 尤其是低阶的线性方程组, 所需时间很短。 对于高阶、 超高阶的线性方程组的运算能力有待进一步验证; ②经 Matlab 计算的三个线性方程组的解,都为线性方程组的真实解。后面 的尾数 0 为程序的默认保留小数位数; ③改进:在选主元时,是以对应列中系数 aij 的绝对值最大的,作为主元的; 如果先计算线性方程组每行的尺度(以每行中最大的 | aij | 为尺度 si ) ,再通过 得比较来选择主元,效果会更好。 aij si
2 选主元
对线性方程组
0 1 x1 1 1 1 x2 2
它的解应为
x1 1 x2 1
对于高斯消元法,0 由特别小的正数 替代,即
1 x1 1 1 1 x2 2
10
附录 Ⅰ 选(列)主元 Gauss 消元法
clear;clc; A=input('输入系数矩阵A:'); b=input('输入常数项向量b(按行向量):'); t0=cputime;%记录开始运算时间t0 B=[A b']; n=length(b); RA=rank(A); RB=rank(B); zhica=RB-RA; if zhica>0,disp('请注意:因为RA~=RB,所以此方程组无解!\n') return end if RA==RB if RA==n fprintf('请注意:因为RA=RB=%d,所以此方程有唯一解!\n',n) X=zeros(n,1); for p=1:n-1 t=find(abs(B(p:end,p))==max(abs(B(p:end,p))))+p-1; if abs(B(t,p))~=abs(B(p,p)) l=B(t,:); B(t,:)=B(p,:); B(p,:)=l; end %列主元判断 for k=p+1:n m= B(k,p)/ B(p,p); B(k,p:n+1)= B(k,p:n+1)-m* B(p,p:n+1); end end %把系数矩阵A化为同解的上三角矩阵 b=B(1:n,n+1); A=B(1:n,1:n); X(n)=b(n)/A(n,n); for q=n-1:-1:1 X(q)=(b(q)-sum(A(q,q+1:n)*X(q+1:n)))/A(q,q); end %从xn至x1逐个求解上三角方程组 else disp('请注意:因为RA=RB<n,所以此方程组有无穷多解!') return end end t=cputime-t0;%计算程序运算时间t disp('方程组的解为:');X fprintf('\n运算时间t=%fs\n',t)
5
二、迭代法(Gauss-Seidel 迭代法)解线性方程组
1 迭代法(分裂迭代)
对线性方程组 AX b ,可找一个与 A 相近且易于求逆的矩阵 Q,使原方程组 等价于
QX (Q A) X b
X ( I Q 1 A) X Q 1b 其中,I 是单位阵。 构造迭代式 x k 1 ( I Q 1 A) x k Q 1b 若{ x k }收敛,则 x* ( I Q 1 A) x* Q 1b 分析{ x k }的收敛性, || x k 1 x* |||| ( I Q 1 A)( x k x* ) |||| I Q 1 A || || x k x* || 当且仅当 || I Q 1 A || 1 时,{ x k }全局收敛。
2 Gauss-Seidel 迭代
当 Q [ ] 时,分裂迭代变为 Gauss-Seidel 迭代 x k 1 D 1 ( Lx k 1 Ux k ) D 1b x k 1 ( D L) 1Ux k ( D L) 1 b ( D L)1[( D L) A]x k ( D L)1 b
76 0.046800
方程组 的解 迭代次 数 计算时 间 ⑴
⑵
7
⑶
8
3.4 分析改进 ①对于所求解的三个低阶方程组,求解时间相对直接法要长一些,但即便长 一些,对于人的放映时间仍然是可以忽略的,随着运算阶数的增加,因为直接法 硬件的限制及迭代法对内存要求不多的优点,猜测直接法的优势逐渐消失,而迭 代法的应用价值会愈加明显; ② 线 性 方 程 组 的 解 都接 近 于 真 实 解 ,而 不是 真 实 解,这 是 所 选误 差 限
6
线性方 程组
11x1 3x2 2 x3 3 23x1 11x2 x3 0 x 2 x 2 x 1 2 3 1 x1 0.9983 x2 1.9967 x 0.9976 3
27 0.046800
2 x1 x2 2 x1 6 x2 2 x3 4 4 x 3x 8 x 5 2 3 1 x1 0.6200 x2 0.7605 x 0.0298 3
0 1 x1 1 1 1 x2 2
交换两方程的位置,即
2
1 1 x1 2 1 x2 1
解得
1 2 1 x2 1 x 1 x 2 x 1 2 1
解得 2 1 1 x2 1 1 x1 (1 x ) 1 ? 2 可以看到 x1 (1 x2 ) 1 大小不能确定。 经初等行变换使 a11 变成一个不接近 0 的较大的数, 具体地, 对于线性方程组
3 基于 Matlab 的数值试验
3.1 计算平台: ①CPU(2.50GHz) 、 ②RAM(4.00GB) 、 ③OS(Windows 7 旗舰版) 3.2 参数设置: 编写的 m 文件函数值误差限 1 10 3 、最大迭代步数 M 100 。 3.3 计算结果(程序代码详见附录Ⅱ)
n 三者间的关系对线性方程组的情况进行了判断,但对于 R ( A) R ( A, b) n 的情
况,没有对线性方程组解的通式进行求解。
9
参考文献
[1] 同济大学数学系, 线性代数 (第五版) [M], 高等教育出版社, 2007, P71-P78 [2] David Kincaid, Ward Cheney, 数值分析(第三版)[M],机械工业出版社, 2005,P132-P136,P170-P172 [3] 徐跃良,数值分析[M],西南交通大学出版社,2005,P99-P103,P143-P147
11
附录 Ⅱ Gauss-Seidel 迭代法
clear;clc; A=input('输入系数矩阵A='); b=input('输入常数项向量b='); t0=cputime;%记录开始运算时间t0 N=length(b); x=inv(A)*b %解向量的维数 %库函数计算结果 fprintf('库函数计算结果:'); x=zeros(N,1);%迭代初始值 %-----(A=D-E-F)-----D=diag(diag(A)); E=-tril(A,-1);%下三角 F=-triu(A,1);%上三角 B=inv(D-E)*F;g=inv(D-E)*b; eps=0.0001;%相邻解的距离小于该数时,结束迭代 %--------开始迭代------for k=1:100 %最大迭代次数为100 fprintf('第%d次迭代:',k); y=B*x+g; fprintf('\n与上次计算结果的距离(2范数):%f \n',norm(x-y)^2); if norm(x-y)<eps break; end x=y end t=cputime-t0;%计算程序运算时间t x fprintf('\n运算时间t=%fs\n',t)
0.0001 的缘故,如果进一步缩小误差限,会得到更加准确的解,并可能达到
真实解, 但现实生活中的运算大都出于工程实际需要, 满足一定的精度要求即可; ③改进:增大误差限 ,增大最大迭代步数 M ,求取所给线性方程组更准确 的解。 ④无论是选列主元 Gauss 消元法,还是 Gauss-Seidel 迭代法,在举例计算 中都只考虑了系数矩阵 A 的秩与增广矩阵(A, b)的秩相等且等于矩阵的长度 n (即 R ( A) R ( A, b) n ) 的情况, 虽然在选列主元 Gauss 消元法中由 R ( A) 、 R ( A, b) 、
0.000000
2 x1 x2 2 x1 6 x2 2 x3 4 4 x 3x 8 x 5 2 3 1 x1 0.6200 x2 0.7600 x 0.0300 3
0.000000
6 x1 2 x2 2 x3 4 x4 12 4 x 2 x 2 x 10 2 3 4 12 x2 8 x3 x4 21 2 x2 3x3 14 x4 26 x1 1.0000 x 3.0000 2 x3 2.0000 x4 1.0000
12
题目:用直接法、迭代法解线性方程组
学生姓名:崔敬轩 学 号:2015210458
专业班级:电气工程 7 班 指导教师:王承竞
2015 年 12 月 12 日
1
一、直接法解线性方程组(选列主元高斯消元法)
1 高斯消元法
具体地,解线性方程组 AX b ,先对系数矩阵 A 进行 LU 分解,即 A LU , 则 AX b LUX b 。令 UX Z ,则 AX b LZ b 。利用 L1 解 Z L1b , 再通过 U 1 解 X U 1 Z 。 该方法讲 A、b 同时一起作初等行变换, 优点:快捷、稳定; 缺点:由硬件决定,运算规模受到限制。