高斯 約旦消元法

2021-10-02 12:43:06 字數 2724 閱讀 7212

高斯-約旦消元法

此演算法是基於高斯消元的基礎上改進而成的,唯一不同之處是多進行了幾次矩陣變換使得化為行最簡型矩陣。相比於高斯消元法此方法效率較低,但是不需要回帶求解

此演算法的過程大概為:首先確定每個a[i

][i]

a[i][i]

a[i][i

]不為0

00(如果為0

00就和下面的行替換),接著將每個a[i

][i]

a[i][i]

a[i][i

]通過行變換化為1

11(該行都除以a[i

][i]

a[i][i]

a[i][i

]),然後通過行變換將每列除了a[i

][i]

a[i][i]

a[i][i

]以外的都消成0

00,重複n

nn次即可

如下是乙個求解過程的示例:

首先最簡單的操作是輸入增廣矩陣:

scanf

("%d"

,&n)

;for

(int i=

1;i<=n;i++

)for

(int j=

1;j<=n+

1;j++

)scanf

("%lf"

,&a[i]

[j])

;

接下來開始消元的第一步:判斷是否有解

我們每次考慮a[i

][i]

a[i][i]

a[i][i

],先看該列的元素是否全為0

00。第二次以後時我們都沒有考慮該列上面得到元素,因為他們已經可以被化簡為000。

for

(int i=

1;i<=n;i++

)

消元的第二步:找到該列第乙個非零元素後將該行和第i

ii行元素作行交換

我們上面判斷是否有解實際上是在找第i

ii列第乙個非零元素

//將第tmp行第i列元素不為0的那一行與當前第i行交換

for(

int j=

1;j<=n+

1;j++

)swap

(a[i]

[j],a[tmp]

[j])

;

消元的第三步:將第i

ii行第i

ii列的元素化為111

方法是當前行的所有元素都除以a[i

][i]

a[i][i]

a[i][i

]

double p=a[i]

[i];

for(

int j=

1;j<=n+

1;j++

) a[i]

[j]=a[i]

[j]/p;

消元的第四步:將第i

ii列除了第i

ii行的元素全消成000

方法是第j

jj行每個元素a[j

][k]

a[j][k]

a[j][k

]都減去a[j

][k]

∗a[i

][k]

a[j][k]*a[i][k]

a[j][k

]∗a[

i][k

]

for

(int j=

1;j<=n;j++

)}

其實上面四步寫在乙個for

forfo

r迴圈即可,因此得到該函式:

const

double esp=

1e-8

;double a[

1005][

1005];

bool gauss

(int n)}}

return

true

;}

如果有多個解的情況呢?如果某變數有多個解,那麼該行的n+1

n+1n+

1個數一定都等於0

因為每次我們都先保證前面的a[i

][i]

a[i][i]

a[i][i

]都一定要為1

11,因此一定在最後幾個a[i

][i]

a[i][i]

a[i][i

]。看題目要求我們將通解設定為某些常量,而且還需要注意上面有不會完全消為0

00的項,那麼我們就需要代入通解求解。

下面是存在乙個通解並且將其設定為1的例子:

//否則肯定最後乙個是不定解,由於求最小的整數解那麼即為1

x[col]=1

;for

(int i=

1;ibool gauss

(int n)}}

solve()

;return

true

;}

高斯 約旦消元法

學了將近兩個晚上。突然看懂時感覺自己是個 寫個部落格記一下吧。模板 洛谷p3389 模板 高斯消元法 有 n 個形如 a 1x 1 a 2x 2 cdots a nx n b 的方程。解方程組。有唯一解則將其求出,否則輸出no solution。把方程組用矩陣形式寫出來 left begin a a...

數學 高斯 約旦消元法

給定 n 元一次方程組 begin a x 1 a x 2 cdots a x n b 1 a x 1 a x 2 cdots a x n b 2 cdots a x 1 a x 2 cdots a x n b n end 請求出方程組的解的情況 對於這樣的問題,我們可以使用高斯消元法進行求解,當然...

高斯 約旦消元法 理解

高斯消元是一種解方程的很巧妙的方法,核心是把方程轉換成矩陣形式,然後再通過加減消元,求出值後再回帶,就解出了這個方程,這裡我就不贅述了。我一般用高斯 約旦消元法,這種方法是直接轉換成單位矩陣求解,減少回帶次數,提高精確度,實現方式如下 下方是乙個方程 把它轉換成矩陣形式就是 我們可以這樣對其進行變換...