數值分析 5 方程組的固有性態和誤差

2021-09-23 23:48:02 字數 3422 閱讀 2468

5.2 病態矩陣解決方法

這裡說的固有性態實際上就是方程組自身引數對計算中誤差的大小的影響。數學中的線性方程組

a x=

bax=b

ax=b的計算是精確的,但是計算機計算卻有種種精確度的限制,導致最終得到的結果會和真實值有所偏差,而有的方程偏差小,有的方程偏差大,這一節就是討論的這個。

舉個數值分析-張軼 中的例子,如下方程組ax=

bax=b

ax=b:a=[

1,

0.99

0.99

,0.98],

b=[b

1b2]

a=\left[ \begin\\ \end\right], b=\left[ \begin\\ \end\right]

a=[1,0

.990

.99,

0.98

​],b

=[b1

​b2​

​]其精確解(你可以自己試著解下)為:

x =(

−9800b1

+9900b2

,9900b1

−10000b2

)t

x=(-9800b_1+9900b_2,9900b_1-10000b_2)^t

x=(−98

00b1

​+99

00b2

​,99

00b1

​−10

000b

2​)t

這時如果方程右端有乙個微小的擾動誤差,則b

bb變成:

b ~=

(b1+

ε,b2

)t

\widetilde = (b_1+\varepsilon,b_2)^t

b=(b1​

+ε,b

2​)t

那麼方程ax~

=b

~a\widetilde = \widetilde

ax=b

新的解誤差大小為:

x ~−

x=(−

9800ε,

9900ε)

t\widetilde-x=(-9800\varepsilon,9900\varepsilon)^t

x−x=(−

9800

ε,99

00ε)

t由此可知,方程組的解將方程中引數微小誤差放大了將近一萬倍,當然有的矩陣可能就不會放大誤差。這種計算解過程中放大或縮小誤差的特性,就叫做方程組本身的固有性態

而由原始資料微小變化而導致解嚴重失真的方程組成為病態方程組(非常形象),相應的係數矩陣a

aa就被成為病態矩陣

為了衡量方程組的固有性態,這裡使用條件數來表示方程組對原始資料變動的敏感程度。其記為:

c on

d(a)

=∣∣a

∣∣∣∣

a−1∣

∣cond(a)=||a||\space||a^||

cond(a

)=∣∣

a∣∣∣

∣a−1

∣∣上面的∣∣.

∣∣

||.||

∣∣.∣

∣表示任意(因為範數的等價性,所以任意)一種矩陣範數。所以結合上一小節,條件數過大的方程組就是病態方程組,其係數矩陣就是病態矩陣。

另外,根據矩陣2範數的計算,如果a

aa是對稱矩陣,那麼有如下計算公式:

c on

d2(a

)=∣λ

1∣∣λ

n∣

cond_2(a)=\frac

cond2​

(a)=

∣λn​

∣∣λ1

​∣​其中λ1,

λn

\lambda_1,\lambda_n

λ1​,λn

​分別是a

aa絕對值最大和最小的特徵值。

前面說了,固有性態是由方程組自身數值確定的,而一般下面這些情況的矩陣就有可能是病態的:

這裡講兩種方法避免病態矩陣,預條件迭代改善是分別在計算矩陣之前和之後的方法

預條件方法,基本思想就是把乙個病態方程組,轉換成乙個等價的非病態的,求解轉換後的解,在根據這個解求原始解,比如有如下的轉化:

a ~x

~=b~

\widetilde\widetilde=\widetilde

ax=b a~=

c−1a

c−1,

x~=c

x,b~

=c−1

b\widetilde=c^ac^,\quad\widetilde=cx,\quad\widetilde=c^b

a=c−1a

c−1,

x=cx

,b=c

−1b這樣進行轉換之後,方程組與原始方程組等價,稱之為預條件方程組,其中可逆矩陣c

cc稱為預條件矩陣。先根據這個方程組求解得到x

~\widetilde

x,再求解cx=

x~

cx=\widetilde

cx=x

即可以得到原方程組的解。一般按照下面兩個規則選取預條件矩陣:

特別的,如果a

aa是對稱正定矩陣,那麼可以選用c=d

12

c=d^}

c=d21​

,其中d是a的對角元素構成的對角矩陣。

迭代改善,是根據每一步的求解誤差,反覆利用誤差計算新的解,使精度更高,誤差更小。比如方程組ax=

bax=b

ax=b

的近似解為x(1

)x^

x(1)

,其剩餘向量:

r (1

)=b−

ax(1

)r^=b-ax^

r(1)=b

−ax(

1)再求解方程組:

a x=

r(1)

ax=r^

ax=r(1

)得到解x~(

1)

\widetilde^

x(1)

,這時原始解的迭代改善解為:x(2

)=x(

1)+x

~(1)

x^=x^+\widetilde^

x(2)=x

(1)+

x(1)

。此時一般迭代改善解更為精確甚至就是精確解,如果對當前解還不滿意,那麼可以重複上面的步驟進行迭代,這就是迭代改善

1 方程組的幾何解釋

本系列是為了重新學習理解線性代數聽麻省理工公開課 線性代數所做的筆記.考慮方程組 2 x y 0 x 2y 3 寫出方程的矩陣形式如下 2 1 1 2 x y 03 也就是ax b 這就是線性代數中非常重要的一種思想,把方程組的解看作矩陣a的列向量的線性組合 linear combination 在...

01 方程組的幾何解釋

從方程組開始 線性方程 像 方程的解就是所有函式的交點 matplotlib繪製,如下 import numpy from matplotlib import pyplot as plt public x numpy.arange 10,10,1 public y numpy.arange 20,2...

線性代數01 方程組的幾何解釋

本篇為mit公開課 線性代數 筆記。兩未知數兩方程 2 x y 0 x 2 y 3 方程組的矩陣形式 left begin 2 1 1 2 end right left begin x y end right left begin 0 3 end right 這裡矩陣有兩行兩列,左手邊包括係數矩陣 ...