高斯消元模板

2022-09-23 13:42:10 字數 2078 閱讀 4524

gauss消元,就是把兩個式子通過乘除加減的運算,使每次把每行第乙個元素消掉,直到成為上三角矩陣為止。

此時從最後乙個元素反代回去,就可以求出線性方程組的解。

此處**kuangbin的模板

#include

#include

#include

#include

#include

using namespace std;

const int maxn=50;

int a[maxn][maxn];//增廣矩陣

int x[maxn];//解集

bool free_x[maxn];//標記是否是不確定的變元

/*void debug(void)

cout << endl;

} cout << endl;}*/

inline int gcd(int a,int b)

return a;

}inline int lcm(int a,int b)

// 高斯消元法解方程組(gauss-jordan elimination).(-2表示有浮點數解,但無整數解,

//-1表示無解,0表示唯一解,大於0表示無窮解,並返回自由變元的個數)

//有equ個方程,var個變元。增廣矩陣行數為equ,分別為0到equ-1,列數為var+1,分別為0到var.

int gauss(int equ,int var)

//轉換為階梯陣.

col=0; // 當前處理的列

for(k = 0;k < equ && col < var;k++,col++)

if(max_r!=k)

if (free_x_num > 1) continue; // 無法求解出確定的變元.

// 說明就只有乙個不確定的變元free_index,那麼可以求解出該變元,且該變元是確定的.

temp = a[i][var];

for (j = 0; j < var; j++)

x[free_index] = temp / a[i][free_index]; // 求出該變元.

free_x[free_index] = 0; // 該變元是確定的.

} return var - k; // 自由變元有var - k個.

} // 3. 唯一解的情況: 在var * (var + 1)的增廣陣中形成嚴格的上三角陣.

// 計算出xn-1, xn-2 ... x0.

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

if (temp % a[i][i] != 0) return -2; // 說明有浮點數解,但無整數解.

x[i] = temp / a[i][i];

} return 0;

}int main(void)

}// debug();

int free_num = gauss(equ,var);

if (free_num == -1) printf("無解!\n");

else if (free_num == -2) printf("有浮點數解,無整數解!\n");

else if (free_num > 0)

}else

}printf("\n");

} return 0;

}以下是浮點型的高斯消元模板

const int maxn=1002;

const double eps=1e-12;

double a[maxn][maxn];

int equ,var;//equ個方程,var個變數

double x[maxn];//解集

bool free_x[maxn];

int n;

int sgn(double x)

if(max_r!=k)

{ // 與第k行交換.

for(j=k;j=0;i--)

{ free_x_num=0;

for(j=0;j1) continue;

temp=a[i][var];

for(j=0;j=0;i--)

{temp=a[i][var];

for(j=i+1;j

高斯消元模板

include include include include include include include include typedef long long ll const int n 1008 高斯消元模板 const double eps 1e 12 double aug n n 增廣矩...

高斯消元模板

用迭代的辦法打會簡潔一些。有些精度上的細節需要注意。多次消元要清空use和cho陣列。實數高斯消元 int use maxn cho maxn void solve equation int n,int m break fd i,n,1 if cho i 自由元的個數就是cho為0的個數 無解的話去...

高斯消元模板

y,z.x,y,z.x,y,z.可以得到乙個上三角矩陣。這時已經可以直接讀出最後乙個方程的解了,再回代到上面的方程就行了。具體實現 對於x ixi xi,找到xixi xi係數最大的乙個方程,以減少精度誤差。然後,把該方程的xixi xi係數轉化為1,帶入後面所有方程消元。考慮倒著往回進行代入消元,...