Gauss消去法求線性方程組

2021-07-04 17:56:55 字數 1448 閱讀 9745

給定線性方程組的係數,求解方程組是否有解。

1,找到係數矩陣行列為(k, k)的塊絕對值最大的數作為主元,記下行和列,分別與第k列交換,與第k行交換,(行跟行交換,列跟列交換)。

2,交換後,主元所在的行每乙個元除以主元的值,使得主元所在的位置為1,常數列也除以主元的值。

3,進行初等行變換,使得主元所在的列的其他元為0。

4,判斷係數矩陣和增廣矩陣的秩是否相同,相同,有解,不相同,無解。

下面的是**:

#include #include #include using namespace std;

const int max = 20;

int s[max]; //變數位置

double x[max]; //解向量

double a[max][max], b[max]; //係數矩陣和常數列

int rankb(double *b, int m) //常數列中非0的數的個數

int guass(int m, int n, double a[max], double b)

}if(d + 1.0 == 1.0)

l = 0;

else

p = s[k]; s[k] = s[js[k]]; s[js[k]] = p; //變數也作相應變動

}if(is != k) //不在處理塊的第k行,將最大數所在的列調換到第k行

t = b[k]; b[k] = b[is]; b[is] = t;

}} d = a[k][k]; //(k,k)位置的元素最大

for(j = k; j <= n - 1; j++)

a[k][j] = a[k][j] / d;

b[k] = b[k] / d;

for(i = k + 1; i <= m - 1; i++) //消去過程

}} k = m > n ? n : m; //確定矩陣的秩

while(a[k - 1][k - 1] == 0)

k--;

if((rankb(b, m) > k - 1)) //增廣矩陣與係數矩陣秩不同,無解

return 0;

d = a[k - 1][k - 1];

for(j = n - 1; j > k - 1; j--)

x[s[j]] = 0;

for(i = k - 1; i >= 0; i--)

return 1;

}int main()

if(guass(m, n, a, b))

else

cout << "no solutions";

cout << endl;

} return 0;

}

求解線性方程組 高斯消去法

源 用c 實現 這裡採用的是數值分析裡的演算法 在vc6.0下編譯通過,經測試沒大問題。求解線性方程組 高斯消去法 include using namespace std 二維陣列動態分配模板 template t allocation2d int m,int n return a int main...

Gauss消去法解線性方程組(C語言版)

列主元高斯消去法的程式已經出來了,也傳上來了,但我怕有些同學太懶,不想自己寫,也怕有些同學直接複製貼上,和別人的一樣,被老師查出來了,對自己和他人都沒什麼好處。其實程式還是很簡單的,在這個程式的基礎上只要稍微修改一點就行了,慢的話30分鐘也就夠了。有些時候程式還是自己寫的看著舒服!注意 盡量不要在沒...

Gauss 消元法求解線性方程組

gauss 消元法求解線性方程組 消元法是將方程組中的一方程的未知數用含有另一未知數的代數式表示,並將其代入到另一方程中,這就消去了一未知數,得到一解 或將方程組中的一方程倍乘某個常數加到另外一方程中去,也可達到消去一未知數的目的。消元法主要用於二元一次方程組的求解。1 兩方程互換,解不變 2 一方...