解決多元方程組的時候我們通常的方法有兩個:加減消元和代入消元。高斯消元的原理就是加減消元。那麼在解方程的時候如果要加減消元那麼首先就要把某乙個未知數的係數化成一樣的。
放一段消元的**
for(int i = 1;i <= n;i++)
double div = a[i][i];//把方程組中第i個方程的係數化為1
for(int j = i;j <= n + 1;j++)a[i][j] /= div;//處理第i個方程其它項的係數
for(int j = i + 1;j <= n;j++)
}
結合這段**,我們再來理解消元的過程:
\[假設現在有方程組:\begin 5x-2y=4\\2x+3y=7\end\\
根據**,我們先處理第乙個方程,把第乙個方程的x項係數化為1\\
則第乙個方程現在變成了:x-\fracy=\frac\\
以上的過程就是上面**1~7行的過程。\\
再往下看,接著就是把其餘的方程和第i個方程進行加減消元\\
看到上面**的第9行,此時x=2,到第11行\\
第二個方程的第1個係數就變成了2-1*2=0\\
第二個方程的第2個係數變成3=3-\frac*2=\frac之後的運算同理
\]消完元就利用已經求解出的未知數帶入原來的方程。
回代**
ans[n] = a[n][n + 1];//所有的元都消完了,那麼等號右邊的數就是最後乙個被消元的未知數的解,可以手推一下
for(int i = n - 1;i;i--)
#include using namespace std;
int n;
long double ans[110],a[110][110];
void gauss()
double div = a[i][i];
for(int j = i;j <= n + 1;j++)a[i][j] /= div;
for(int j = i + 1;j <= n;j++)
}ans[n] = a[n][n + 1];
for(int i = n - 1;i;i--)
}int main()
}gauss();
for(int i = 1;i <= n;i++)
printf("%.2lf\n",(double)ans[i]);
return 0;
}
洛谷P3389 模板 高斯消元法
題目描述 給定乙個線性方程組,對其求解。輸入樣例 1 3 1 3 4 5 1 4 7 3 9 3 2 2 輸出樣例 1 0.97 5.18 2.39 分析 對於第i個方程用它的第i個元消掉第i 1個方程後面每個方程的第i個元,如果第i個方程的i消為0則此方程組有無窮解或無解,這樣到最後乙個方程只有乙...
洛谷P3389 模板 高斯消元法
題目傳送門 題目分析 時隔多年 月 我終於入了高消這個坑。表示掛一發模板就跑,以後複習用。具體細節什麼的還是自己yy吧,有益身心健康。code include include include include include include include include using namespac...
洛谷 P3389 模板 高斯消元法
傳送門 給出乙個n nn元一次的方程,對其求解 大概思路就是不斷用某個式子去抵消其他式子的某一項未知數的係數,這樣進行n 1 n 1n 1,我們就能得到aix i bi a ix i b i ai xi bi 直接求解然後將x ix i xi 向其他式子帶入,乙個個求出其他未知數 include i...