高斯消元是線性代數規劃中的乙個演算法,可用來為線性方程組求解。所謂線性方程組,是由m
mm個n
nn元一次方程共同構成的。線性方程組的所有係數可以寫成乙個m
mm行n
nn列的「係數矩陣」,再加上每個方程等號右側的常數,可以寫成乙個m
mm行n+1
n+1n+
1列 的「增廣矩陣」
對「增廣矩陣」進行的操作有三種
用乙個非零的數乘其一行
把其中一行的若干倍加到另一行上
交換兩行的位置
稱為「初等行變換」,得到「上三角矩陣」或「下三角矩陣」,進一步化簡得到「簡化階梯形矩陣」。通過初等行變換把增廣矩陣變為簡化階梯形矩陣的線性方程組求解演算法就是高斯消元演算法。
方程的解寫作形如x_1=4-2x_2\\x_3=1\end
while
(c>=
'0'&&c<=
'9')
return f*x;
}void
gauss()
}}intmain()
if( ok )
printf
("no solution\n");
else
for(
int i =
1; i <= n ;
++i )
printf
("%.2lf\n"
,a[i]
[n+1
]/ a[i]
[i]);;
}題目鏈結
p2455 [sdoi2006]線性方程組
題目分析
本題不同於上一題,要判斷是無解還是無窮多解,形如
2一類資料理應為無窮多個解,程式會判為無解,應遵循以下規則進行變換0 2 3
0 0 0
對於第icodeii列,設j∈[
i+1,
n]
j\in[i+1,n]
j∈[i+1
,n],如果b[j
][i]
>b[
i][i
]b[j][i] > b[i][i]
b[j][i
]>b[
i][i
],直接交換。但是如果相等的話,則按照後面位的係數,將絕對值較小的進行交換。
判斷無解的情況要放在判斷無限解的情況之前。
#include
#include
#include
using
namespace std;
int n ;
double a[
105]
[105];
inline
intread()
while
(c>=
'0'&&c<=
'9')
return f*x;
}bool
cmp(
int i,
int j)
void
gauss()
}}intmain()
if( ok !=1)
}}if(ok ==1)
printf
("-1\n");
else
if(ok ==2)
printf
("0\n");
else
for(
int i =
1; i <= n;
++i)
}
總結與反思
實型運算會出現-0.00的情況,需要特判
實型運算中極易出現精度丟失,比較關係不能直接使用====
==等運算子,要用絕對值做差與一極小值比較判斷大小關係,防止精度丟失
處理細節問題,判斷是無解或無窮多個解
高斯消元 浮點高斯消元
浮點數高斯消元 問題描述 給出乙個線性方程組,有n個方程組,m個未知數。解這個線性方程組。輸入格式 第1行 2個整數n和m,n,m 400,且n不一定等於m 接下來n行,每行m 1個整數,表示乙個方程的m個未知數的係數和常數 輸出格式 如果無解,輸出 no solution 如果有唯一解,輸出m行,...
矩陣消元 高斯消元
安利一波高斯消元的部落格,內容很詳細。看完這個相信你已經理解了大概,高斯消元求線性方程組,在學習線性代數 大學課程 的時候我們都接觸過。原理是先把執行緒組轉換成矩陣,然後把它等價變換成上三角矩陣,這樣從下到上依次可以求出解集。高斯消元模板 模板題 include define n 205 using...
矩陣乘 高斯消元專題小結 高斯消元
i p其它題太水了就不寫了,這裡說一下o和p。我太懶不想寫 op這兩個題是高斯消元求期望的題。對於p題,求從 點到 點的步數期望,先從 點bfs一遍找到所有可以到達的點,對於可達點每個點是乙個變數。因為終點有任意多而起點只有乙個,這裡可以反過來求從任意乙個終點走到起點的期望。於是對於每乙個終點的期望...