预览加载中,请您耐心等待几秒...
在线预览结束,喜欢就下载吧,查找使用更方便
如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
§6直接法的误差分析
直接法的误差原因:1.算法及舍入原因
2.方程组本身固有的问题
要分析方程组的状态并估计算法的误差(原始数据扰动对解的影响)——量度:矩阵的条件数
【引例】设方程组
a=[26;26.00001];b=[8,8.00001]';a\b
对系数矩阵和右端项作微小变化:
a=[26;25.99999];b=[8,8.00002]';a\b
设线性方程组为
Ax=b…………………(1)
其中A∈Rn×n,x,b∈Rn且A非奇异。x*:准确解,δx:解的误差,即
…………………(2)
δA--A的误差,δb--b的误差。讨论δx与δA,δb的关系
一、b有误差而A无误差情形
将带有误差的右端项和带误差的解向量代入方程组,则
…………………(3)
由于,而得到,从而
另一方面,由(1)式取范数,有
可得
【定理1】设A是非奇异矩阵,Ax=b≠0,且A(x*+δx)=b+δb则有误差估计式
…………………(4)
其中称为方阵A的条件数。
说明:1、解的相对误差是右端项b的相对误差的cond(A)倍
2、如果条件数很大,则解的误差将成倍增长。
【定义】称条件数很大的矩阵为“病态”矩阵;称病态矩阵对应的方程组为病态方程组。反之,则称A为良态矩阵。
二、A及b都有误差的情形
【引理】若
证:(1)反证法,假设E+B奇异,
则存在非零向量x,使得(E+B)x=0,则
与己知予盾,从而E+B非奇异。
(2)
【定理2】
设在方程组Ax=b中,A及b都有误差,且,则有
证:带有误差的方程组为
…………………(5)
由于,因而
…………………(6)
为从(6)式中解出δx,必须限定(A+δA)-1存在。从而
…………………(7)
利用,得到
…………………(8)
又由引理知,当时
…………………(9)
对(7)式取范数,并由(8)、(9)式得到
………………(10)
从而由及(10)式,有
……………(11)
注:仅A或b有误差是(11)式中δb=0或δA=0的特例。
【例1】已知方程组Ax=b中
若δb=(-0.001,0.001,-0.001)T时,估计解的相对误差。
解:
a=[1/21/31/4;1/31/41/5;1/41/51/6];
cond(a,inf),
b=[13/12;47/60;37/60]*100;norm_b=norm(b,inf)
detb=[-0.001;0.001;-0.001];norm_detb=norm(detb,inf)
norm_detb/norm_b%b的相对误差
由于有误差估计
比右端项的相对误差,扩大了2015倍。
验证:1)方程组的解:
a=[1/21/31/4;1/31/41/5;1/41/51/6];
b=[13/12;47/60;37/60]*100;x=a\b
2)对右端项加扰动δb=(-0.001,0.001,-0.001)T,则解受到影响:
b=[13/12-0.00001;47/60+0.00001;37/60-0.00001]*100;x1=a\b
3)解的相对误差:
norm(x-x1,inf)/norm(x,inf)
三、常用的条件数及其性质
1.当A=AT时,;
2.当A对称正定时,
3.cond(A)≥1,cond(A)=cond(A-1),cond(cA)=cond(A)(c≠0,c∈R)
4.若U为正交矩阵,即UTU=I,则cond(U)2=1
cond(A)2=cond(UA)2=cond(AU)2
病态方程组的判别设Ax=b,A∈Rn×n,且A非奇异
当cond(A)>>1,则Ax=b是病态方程组(坏条件的,A是病态的)
当cond(A)相对较小时,则Ax=b是良态方程组(好条件的,A是良态的)
【例】设在引例方程组中,b有扰动=(0,0.00001)T,试计算cond(A)∞,并说明对解向量x的影响。
a=[26;26.00001];
%inv(a),norm(a,inf)*norm(inv(a),inf)
cond(a,inf)
病态方程组的解法:
采用高精度的算术运算
采用预处理方法,改善条件数
行或列平衡方法,改善条件数
用矩阵的奇异值分解。
【例2】设试验证其为病态方程组,且对其作预处理Pax=Pb使cond(PA)<<cond(A).
解:(1)用MATLAB函数求解方程组
a=[129;300020001000;0.0000040.0000030.000002];
b=[120000.000003]';x=a\b
对a33,b3加小扰动为1/106数量级,此时解为
a=[129;300020001000;0.0000040.0000030.000003];
b=[120000.000004]';x