一、基本描述
1.高斯消元
主要用來求解線性方程組,也可以求解矩陣的秩,矩陣的逆。在acm中是乙個有力的數學**。
時間複雜度是o(n3),主要與方程組的個數,未知數的個數有關。
2.什麼是線性方程組?
有多個未知數,並且每個未知數的次數均為一次,這樣多個未知數組成的方程組為線性方程組。
二、演算法實現
高斯消元法就是手解方程組。
基本原理就是:消元(因為線性方程組次數為1次,不需要考慮降次),然後回代,在得到kx=b這類的式子後,就可以顯而易見得到x的解了。
舉例說明高斯消元法。
假設有如下的方程組:
寫成矩陣形式就是: ax=b ,其中:
且,現對矩陣 a 作初等變換,同時矩陣 b 也作同樣的初等變換,則當 a 化為單位矩陣的時候,有:
顯而易見,我們得到了方程組的解:
。(ps.這裡的矩陣帶t代表是列向量,即x1=1,x2=2,x3=4)
所以, 我們要以一定的策略, 對 a 和 b 施以一系列的初等變換, 當 a 化為單位矩陣的時候,b 就為方程組的解。
三、高斯消元法實現
網上很多模板還強調解出矩陣的上三角形,但是對於一般的題目來說,並沒有必要。學會怎麼解就好了。
直接例題上板子。
1.bzoj1013 [jsoi2008]球形空間產生器sphere
【題目大意】
給出n維空間中給出n+1個點的座標,求出球心座標。
【思路】
令球心座標為x1,x2...xn,假設當前第i個點座標為a1,a2...,an,第i+1個點座標為b1,b2...,bn,則由半徑相等可得:
(a1-x1)^2+(a2-x2)^2+...+(an-xn)^2=(b1-x1)^2+(b2-x2)^2+...+(bn-xn)^2
化簡可得:
2(a1-b1)x1+2(a2-b2)x2+...+2(an-bn)xn=(a1^2+a2^2+...+an^2-b1^2-b2^2-...-b3^2)
如此可得到n個一元n次方程組,用最簡單的高斯消元搞一搞就好了。
1 #include2 #include3 #include4 #include5#define maxn 25
6using
namespace
std;
7const
double eps=1e-6; 8
double
f[maxn],a[maxn][maxn];
9int
n;10
void
gauss()
16if (j>n) continue;17
if (j!=now)
20double t=a[now][i];
21for (int k=1;k<=n+1;k++) a[now][k]/=t;
22for (int k=1;k<=n;k++)28}
29}30 now++;31}
32return;33
}34intmain()44}
45gauss();
46for (int i=1;i"
%.3lf
",a[i][n+1
]);47 printf("
%.3lf\n
",a[n][n+1
]);48
return0;
49 }
高斯消元法(二) 高斯消元法原理
高斯消去法是一種常用的求解線性方程組的方法,通過逐次消元後,在回代求解,實際計算中常用的一種方法。順序消去法 將ax b按照從上至下 從左至右的順序化為上三角方程組,中間過程不對矩陣進行交換,主要步驟如下。step1 將第2行至第n行,每行分別與第一行做運算,消掉每行第乙個引數。公式如 形成如下圖所...
高斯消元法
寒假前,小導師給我們布置了三道程式設計題,其中有一道是利用高斯消元法解線性方程組的。在網上搜了些資料,自己照葫蘆畫瓢編出乙個簡單的高斯消元法 利用矩陣的初等行變換 高斯消元法解線性方程組 include include include define dim 10 double a dim 1 dim...
高斯消元法
學過至少一元二次方程解法的同學們肯定知道,最常用的求根方法是加減消元法。所謂加減消元法,就是通過方程的等式性質,將某一未知數的係數同一化,再通過兩個等式的加減消去乙個元,從而將多元方程不斷降元,從而解出乙個未知數,不斷代回,從而求出所有根。此加減消元法就是高斯消元法。所以程式思路也盡可知。以下直接附...