日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

高斯消元模版

發(fā)布時(shí)間:2024/6/30 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 高斯消元模版 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

這模版敲了我倆個(gè)小時(shí)+寫注釋,參考自kuangbin!

兩百行的大模擬,累死了QAQ

下面附上模版!

1 #include <bits/stdc++.h> 2 using namespace std; 3 const int maxn=50; 4 typedef long long ll; 5 int a[maxn][maxn];///增廣矩陣 6 int x[maxn];///解集 7 bool free_x[maxn];///標(biāo)記是否是不確定的變元 8 /* 9 void debug(void) 10 { 11 int i,j; 12 for(i=0;i<equ;i++) 13 { 14 for(j=0;j<var+1;j++) 15 { 16 cout<<a[i][j]<<" "; 17 } 18 cout<<endl; 19 } 20 cout<<endl; 21 } 22 */ 23 inline int read() 24 { 25 int x=0,f=1; 26 char ch=getchar(); 27 while(ch<'0'||ch>'9') 28 { 29 if(ch=='-') 30 f=-1; 31 ch=getchar(); 32 } 33 while(ch>='0'&&ch<='9') 34 { 35 x=x*10+ch-'0'; 36 ch=getchar(); 37 } 38 return x*f; 39 } 40 inline void write(int x) 41 { 42 if(x<0) 43 { 44 putchar('-'); 45 x=-x; 46 } 47 if(x>9) 48 write(x/10); 49 putchar(x%10+'0'); 50 } 51 inline int gcd(int a,int b)///最大公約數(shù) 52 { 53 return b==0?a:gcd(b,a%b); 54 } 55 inline int lcm(int a,int b)///最小公倍數(shù) 56 { 57 return a/gcd(a,b)*b;///先除后乘防溢出 58 } 59 ///高斯消元法解方程組【-2表示有浮點(diǎn)型解,無整數(shù)解】 60 ///【-1表示無解,0表示唯一解,大于0表示無窮解,并返回自由元的個(gè)數(shù)】 61 ///【有equ方程,var個(gè)變元,增廣矩陣行數(shù)為equ,分別為0->equ-1,列數(shù)為var+1,分別為0->var】 62 int Gauss(int equ,int var) 63 { 64 int i,j,k; 65 int max_r;///當(dāng)前這列絕對值最大的行 66 int col;///當(dāng)前處理的列 67 int ta,tb; 68 int LCM; 69 int temp; 70 int free_x_num; 71 int free_index; 72 for(i=0;i<=var;i++) 73 { 74 x[i]=0; 75 free_x[i]=true; 76 } 77 ///轉(zhuǎn)化為階梯型矩陣 78 col=0;///處理當(dāng)前列 79 for(k=0;k<equ&&col<var;k++,col++)///枚舉當(dāng)前處理的行 80 { 81 ///找到該col列元素絕對值最大的那一行與第k行交換(為了在除法時(shí)減小誤差) 82 max_r=k; 83 for(i=k+1;i<equ;i++) 84 { 85 if(abs(a[i][col])>abs(a[max_r][col])) 86 max_r=i; 87 } 88 if(max_r!=k) 89 { 90 ///與第k行交換 91 for(j=k;j<var+1;j++) 92 { 93 swap(a[k][j],a[max_r][j]); 94 } 95 } 96 if(a[k][col]==0) 97 { 98 ///說明該col列第k行以下全是0了,則處理當(dāng)前行的下一列 99 k--; 100 continue; 101 } 102 for(i=k+1;i<equ;i++) 103 { 104 ///枚舉要?jiǎng)h除的行 105 if(a[i][col]!=0) 106 { 107 LCM=lcm(abs(a[i][col]),abs(a[k][col])); 108 ta=LCM/abs(a[i][col]); 109 tb=LCM/abs(a[k][col]); 110 if(a[i][col]*a[k][col]<0) 111 tb=-tb;///異號情況是相加 112 for(j=col;j<var+1;j++) 113 { 114 a[i][j]=a[i][j]*ta-a[k][j]*tb; 115 } 116 } 117 } 118 } 119 ///debug(); 120 ///無解的情況:化簡的增廣矩陣中存在(0,0,......a)這樣的行(a!=0) 121 for(i=k;i<equ;i++) 122 { 123 if(a[i][col]!=0) 124 return -1; 125 } 126 ///對于無窮解來說,如果要判斷哪些是自由元,那么初等變換中的交換就會影響,則要記錄交換 127 ///無窮解的情況:在var*(var+1)的增廣矩陣中,出現(xiàn)(0,0,......0)這樣的行,即說明沒有形成嚴(yán)格的上三角陣 128 ///且目前出現(xiàn)的行數(shù)即為自由元的個(gè)數(shù) 129 if(k<var) 130 { 131 ///首先,自由元有var-k個(gè),即不確定的變元至少有var-k個(gè) 132 for(i=k-1;i>=0;i--) 133 { 134 ///第i行一定不會是(0,0,......0)的情況,因?yàn)檫@樣的行是在第k行到第equ行 135 ///同樣,第i行一定不會是(0,0,......a),(a!=0)這樣的情況無解 136 free_x_num=0;///用于判斷該行中的不確定的變元的個(gè)數(shù),如果超過1就無法求解它們?nèi)詾椴淮_定的變元 137 for(j=0;j<var;j++) 138 { 139 if(a[i][j]!=0&&free_x[j]!=0) 140 { 141 free_x_num++; 142 free_index=j; 143 } 144 } 145 if(free_x_num>1) 146 continue;///無法求出確定的變元 147 ///說明只有一個(gè)不確定的變元free_index,那么可以求解出該變元,且該變元是確定的, 148 temp=a[i][var]; 149 for(j=0;j<var;j++) 150 { 151 if(a[i][j]!=0&&j!=free_index) 152 temp-=a[i][j]*x[j]; 153 } 154 x[free_index]=temp/a[i][free_index];///求出該變元 155 free_x[free_index]=0;///該變元是確定的 156 } 157 return var-k; 158 } 159 ///唯一解的情況:在var*(var+1)的增廣矩陣中形成嚴(yán)格的上三角形 160 ///求出Xn-1,Xn-2,......X0 161 for(i=var-1;i>=0;i--) 162 { 163 temp=a[i][var]; 164 for(j=i+1;j<var;j++) 165 { 166 if(a[i][j]!=0) 167 temp-=a[i][j]*x[j]; 168 } 169 if(temp%a[i][i]!=0) 170 return -2;///說明有浮點(diǎn)數(shù)解,但無整數(shù)解 171 x[i]=temp/a[i][i]; 172 } 173 return 0; 174 } 175 int main(void) 176 { 177 ///freopen("in.txt","r",stdin); 178 ///freopen("out.txt","w",stdout); 179 int i,j; 180 int equ,var; 181 while(equ=read(),var=read()) 182 { 183 memset(a,0,sizeof(a)); 184 for(i=0;i<equ;i++) 185 { 186 for(j=0;j<var+1;j++) 187 { 188 a[i][j]=read(); 189 } 190 } 191 ///debug(); 192 int free_num=Gauss(equ,var); 193 if(free_num==-1) 194 printf("No solution\n");///無解 195 else if(free_num==-2) 196 printf("There are floating point numbers, no integer solutions\n");///有浮點(diǎn)數(shù)解,無整數(shù)解 197 else if(free_num>0) 198 { 199 printf("The number of variables of infinite solution is:%d\n",free_num);///無窮多解,自由變元個(gè)數(shù)為 200 for(i=0;i<var;i++) 201 { 202 if(free_x[i]!=0) 203 printf("x%d is not sure\n",i+1); 204 else 205 printf("x%d:%d\n",i+1,x[i]); 206 } 207 } 208 else 209 { 210 for(i=0;i<var;i++) 211 printf("x%d:%d\n",i+1,x[i]); 212 } 213 printf("\n"); 214 } 215 return 0; 216 }

?

轉(zhuǎn)載于:https://www.cnblogs.com/ECJTUACM-873284962/p/7119751.html

總結(jié)

以上是生活随笔為你收集整理的高斯消元模版的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 麻豆视频网址 | 91视频国产免费 | 亚洲综合自拍 | av成人在线看 | 精品人妻无码一区二区三区 | 久久色av | 欧美a在线视频 | 亚洲欲| 国产免费无码一区二区 | 色偷偷久久 | 亚洲二区av | avtt亚洲天堂| 特级西西444www大精品视频免费看 | 国产美女免费无遮挡 | 九九99视频 | 久久久夜夜 | 亚洲一区二区三区视频 | 成人欧美一区二区三区黑人动态图 | 日韩欧美视频在线 | 国产一区二区高清视频 | 狠久久| 绝顶高潮合集videos | 国产动漫av | 蜜桃精品久久久久久久免费影院 | 亚洲精品无码一区二区 | 名校风暴在线观看免费高清完整 | 99色国产| 老熟妇仑乱一区二区视频 | 国产免费午夜 | 中文字幕影片免费在线观看 | 色综合久久五月 | 国产日韩一区 | 诱惑av | jizz欧美性11 | 国产精品一区二区6 | 国产美女裸体无遮挡免费视频 | 精品www久久久久久奶水 | 免费福利视频网站 | 人妻少妇久久中文字幕 | 亚洲天堂手机版 | 国产精品一区二区性色av | 国产又白又嫩又爽又黄 | 久久久久久久久久一区二区三区 | www色视频| 欧美日韩国产电影 | 玖玖视频国产 | 亚洲天堂精品在线观看 | 久草视频在线免费看 | 精品一区在线观看视频 | 无码人妻丰满熟妇奶水区码 | 嫩草影院永久入口 | 99福利视频 | 中文在线а√天堂 | 四虎在线免费 | 大香伊人中文字幕精品 | 色哟哟精品一区 | 醉酒壮男gay强迫野外xx | 欧美黄色大片视频 | 成人一区二区精品 | 2017狠狠干| 91精品国自产在线 | 日皮视频在线观看 | 国产色网站 | 国产日韩欧美不卡 | 26uuu国产 | 国产又粗又大又黄 | 男人喷出精子视频 | 麻豆av一区二区 | 欧美一级淫片007 | www.天天综合 | 麻豆视频在线观看免费 | 精品国产九九九 | 国产精品自拍视频一区 | 少妇视频一区二区三区 | 国产精品久久综合视频 | 欧美视频日韩 | 波多野结衣家庭主妇 | 亚洲国产精品成人综合在线 | 看av免费毛片手机播放 | 亚洲香蕉 | 午夜小福利 | 久草视频中文在线 | 欧美少妇一区二区三区 | 香蕉视频在线网址 | av先锋影音 | 在线精品小视频 | 嫩草视频免费观看 | 欧美老熟妇xb水多毛多 | 欧美日本 | 日韩欧美综合在线 | 热久久免费 | 国产视频三级 | 男女网站视频 | 丨国产丨调教丨91丨 | 午夜精品极品粉嫩国产尤物 | 黄视频在线免费看 | av网站久久 | 国产精品2 | 精品久久BBBBB精品人妻 |