高斯消元(浮點數主列法消元,有剪枝細節

2022-05-13 16:00:57 字數 1562 閱讀 7856

1 #include 2 #include 3 #include 4 #include 5

using

namespace

std;

6const

double eps=1e-8;7

8 typedef vectorvec;

9 typedef vectormat;

1011 vec gauss(const mat& a,const vec&b)

26vec x(n);

27for(int i=0;idouble

ans;

28for(int i=n-1;i>=0;--i)

32return

x;33}34

double ai[3][3]=,,};

35double bi=;

36int

main()43}

44for(int i=0;i<3;++i) b[i]=bi[i];

45 vec x(3

);46 x=gauss(a,b);

47for(int i=0;ii)

50 printf("\n"

);51

return0;

52 }

可能有乙個令你疑惑的地方是為什麼22行,j從i+1開始除,30行,j從i+1開始除

因為這些地方其實是被搞成係數為1的,我們在計算的時候不會用到這些值,所以我們不用去管當前消去的這一變數

最後乙個步驟容易忽略,那就是回帶的步驟,因為這個方法算完得到的b矩陣(不含增廣,是乙個上三角行列式,所以我們不斷迭代就好了

這個方法的複雜度是n^3的

對於1000規模的,我們就需要剪枝了....

下面附上剪枝後的模板...sdut2878這個題需要剪枝

1 #include 2 #include 3 #include 4 #include 5

using

namespace

std;

6const

double eps=1e-8;7

8 typedef vectorvec;

9 typedef vectormat;

1011 vec gauss(const mat& a,const vec&b)28}

29vec x(n);

30for(int i=0;idouble

ans;

31for(int i=n-1;i>=0;--i)

35return

x;36}37

double ai[3][3]=,,};

38double bi=;

39int

main()46}

47for(int i=0;i<3;++i) b[i]=bi[i];

48 vec x(3

);49 x=gauss(a,b);

50for(int i=0;ii)

53 printf("\n"

);54

return0;

55 }

20,25行是剪枝的地方

高斯消元 浮點數模板 高斯消元版本1 浮點數

hello 這裡是 高斯消元 個人感覺就是高階一點的模擬.先存 有時間再把內容補充上來 ps.如果是要求整數解,我們就可以把1e 6換成0,在執行高斯消元的時候求最小公倍數 發現好多人把 gauss 打成 guass 為此特地上網搜了一下233 include include include inc...

高斯消元 浮點高斯消元

浮點數高斯消元 問題描述 給出乙個線性方程組,有n個方程組,m個未知數。解這個線性方程組。輸入格式 第1行 2個整數n和m,n,m 400,且n不一定等於m 接下來n行,每行m 1個整數,表示乙個方程的m個未知數的係數和常數 輸出格式 如果無解,輸出 no solution 如果有唯一解,輸出m行,...

高斯消元 浮點數模板

include include include define maxn 210 define cl a,num memset a num sizeof a define iabs x x 0 x x define eps 1e 8 using namespace std int equ,var 方程...