給定乙個線性方程組
$$\begin a_x_1+a_x_2+\cdots+a_x_n=b_1\\a_x_1+a_x_2+\cdots+a_x_n=b_1\\...\\a_x_1+a_x_2+\cdots+a_x_n=b_n\end$$
求$x_1,x_2,\cdots,x_n$的解。
$n\leq 100$
我相信你會解乙個三元一次方程組,例如
$$\begin3x_1+4x_2+5x_3=5\\-1x_1-5x_2-9x_3=4\\0x_1+5x_2-2x_3=-3\end$$
你會怎麼解這個方程?當然,一般的,你會把一些係數化成0——
$$\begin3x_1+4x_2+5x_3=5\\0x_1-\fracx_2-\fracx_3=\frac\\0x_1+0x_2-12x_3=\frac\end$$
然後就可以得出三個$x$的解了。
當然,在計算機裡,我們可以程式設計完成這種操作。
具體地說,對於每一行,
我們要:
把這一行和下面的一些行進行交換,使得它的對應係數不為0
消去下面的對應係數
具體我也說不清楚,所以你們還是看**吧。
#include using namespace std;typedef long double ld;
const ld eps=1e-6;
int n;
ld a[105][105], ans[105];
inline void swapline(int x,int y)
}inline ld labs(ld x)
void gauss(int x)
ans[n] = a[n][n+1] / a[n][n];
for (int i=n-1; i; i--)
for (int i=1; i<=n; i++) printf("%.2lf\n", ans[i]);
exit(0);
} if (!a[x][x])
if (i > n)
} for (int i=x+1; i<=n; i++) if (a[i][x])
gauss(x+1);
}int main()
gauss(1);
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...