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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

高斯消元整数版和浮点数版实现

發布時間:2025/5/22 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 高斯消元整数版和浮点数版实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡介

實現

整數版

#include <iostream>#include <stdio.h> #include <stdlib.h> #include <vector>using namespace std;#define MAXN 100 //最大變量數量 int arr[MAXN][MAXN]; //保存增廣矩陣 int result[MAXN]; //保存方程的解 int unuse_result[MAXN];//判斷是否是不確定的變元 int unuse_num; void swap(int *a,int *b) //交換兩數 {int t;t=*a;*a=*b;*b=t; } int gcd(int a,int b) //返回最大公約數 {int t;while(b!= 0){t=b;b=a%b;a=t;}return a; } int lcm(int a,int b) //返回最小公倍數 {return a*b/gcd(a,b); } void debug(int equ,int var) {int i,j;for(i=0;i<equ;i++){for(j=0;j<var+1;j++)printf("%d ",arr[i][j]);printf("\n");}printf("\n"); } int Gauss(int equ,int var) {int i,j,k,col;int max_r,ta,tb,lcm1;int temp,unuse_x_num,unuse_index;col=0; //設當前處理列的值為0,表示從第1列開始處理for(k=0;k<equ && col<var;k++,col++) //循環處理矩陣中的行{max_r=k; //絕對值最大行for(i=k+1;i<equ;i++)if(abs(arr[i][col])>abs(arr[max_r][col]))max_r=i; //保存絕對值最大的行號if(max_r!=k) //最大行不是當前行,則與第k行交換for(j=k;j<var+1;j++)swap(&arr[k][j], &arr[max_r][j]); //交換矩陣右上角數據if(arr[k][col]==0) //說明col列第k行以下全是0了,則處理當前行的下一列{k--;continue;}for(i=k+1;i<equ;i++) //查找要刪除的行{if(arr[i][col]!=0) //左列不為0,進行消元運算{lcm1=lcm(abs(arr[i][col]),abs(arr[k][col])); //求最小公倍數ta=lcm1/abs(arr[i][col]);tb=lcm1/abs(arr[k][col]);if(arr[i][col]*arr[k][col]<0) //相乘為負,表示兩數符號不同tb=-tb; //異號的情況是兩個數相加for(j=col;j<var+1;j++)arr[i][j]=arr[i][j]*ta-arr[k][j]*tb;}}}for(i=k;i<equ;i++)//判斷最后一行最后一列,若不為0,表示無解if(arr[i][col]!=0)return -1; //返回無解if(k<var)//自由變元有var-k個,即不確定的變元至少有var-k個.{for(i=k-1;i>=0;i--){unuse_x_num=0; //判斷該行中不確定變量數量,若超過1個,則無法求解for(j=0;j<var;j++){if(arr[i][j]!=0 && unuse_result[j]){unuse_x_num++;unuse_index=j;}}if(unuse_x_num>1)continue; // 無法求解出確定的解temp=arr[i][var];for(j=0;j<var;j++){if(arr[i][j]!=0 && j!=unuse_index)temp-=arr[i][j]*result[j];}result[unuse_index]=temp/arr[i][unuse_index]; // 求出該變元.unuse_result[unuse_index]=0; //該變元是確定的}return var-k; //自由變元有var-k個}for(i=var-1;i>=0;i--) //回代求解{temp=arr[i][var];for(j=i+1;j<var;j++){if(arr[i][j]!=0)temp-=arr[i][j]*result[j];}if(temp % arr[i][i]!=0) //若不能整除return -2; //返回有浮點數解,但無整數解// 如果存在浮點數解,則直取前面固定位數值result[i]=temp/arr[i][i];}return 0; }int main(int argc, const char * argv[]) {// insert code here...int i,j;int equ, var;printf("方程數:");scanf("%d",&equ); //輸入方程數量printf("變量數:");scanf("%d",&var); //輸入變量數量for(i=0;i<equ;i++) //循環輸入各方程的系數{printf("第%d個方程的系數:",i+1);for(j=0;j<var+1;j++) //循環輸入一個方程的系數{scanf("%d", &arr[i][j]);}}unuse_num=Gauss(equ,var); //調用高斯函數if(unuse_num==-1) //無解printf("無解!\n");else if(unuse_num==-2) //只有浮點數解printf("有浮點數解,無整數解!\n");else if(unuse_num>0) //無窮多解{printf("無窮多解! 自由變量數量為%d\n",unuse_num);for(i=0;i<var;i++){if(unuse_result[i])printf("x%d 是不確定的\n",i+1);elseprintf("x%d: %d\n",i+1,result[i]);}}else{for(i=0;i<var;i++) //輸出解{printf("x%d=%d\n",i+1,result[i]);}}printf("\n");return 0; }

浮點數版

#include <stdlib.h> #include <stdio.h> #include <cmath> #include <memory.h> #include <iostream> #include <string.h> #include <string> using namespace std;const int maxn=1002; const double eps=1e-12; double a[maxn][maxn]; //增廣矩陣 //int equ,var;//equ個方程,var個變量 double x[maxn];//解集 bool free_x[maxn]; int n;int sgn(double x) {return (x>eps)-(x<-eps); }void swap(double *a,double *b) //交換兩數 {double t;t=*a;*a=*b;*b=t; }// 高斯消元法解方程組(Gauss-Jordan elimination).(0表示無解,1表示唯一解,大于1表示無窮解,并返回自由變元的個數) int gauss(int equ,int var) {int i,j,k;int max_r; // 當前這列絕對值最大的行.int col; // 當前處理的列.double temp;int free_x_num;int free_index = 0;// 轉換為階梯陣.col=0; // 當前處理的列.memset(free_x,true,sizeof(free_x));for(k=0;k<equ&&col<var;k++,col++){max_r=k;for(i=k+1;i<equ;i++){if(sgn(fabs(a[i][col])-fabs(a[max_r][col]))>0)max_r=i;}if(max_r!=k){ // 與第k行交換.for(j=k;j<var+1;j++)swap(a[k][j],a[max_r][j]);}if(sgn(a[k][col])==0){ // 說明該col列第k行以下全是0了,則處理當前行的下一列.k--; continue;}for(i=k+1;i<equ;i++){ // 枚舉要刪去的行.if (sgn(a[i][col])!=0){temp=a[i][col]/a[k][col];for(j=col;j<var+1;j++){a[i][j]=a[i][j]-a[k][j]*temp;}}}}for(i=k;i<equ;i++){if (sgn(a[i][col])!=0)return 0;}if(k<var){for(i=k-1;i>=0;i--){free_x_num=0;for(j=0;j<var;j++){if (sgn(a[i][j])!=0&&free_x[j])free_x_num++,free_index=j;}if(free_x_num>1) continue;temp=a[i][var];for(j=0;j<var;j++){if(sgn(a[i][j])!=0&&j!=free_index)temp-=a[i][j]*x[j];}x[free_index]=temp/a[i][free_index];free_x[free_index]=0;}return var-k;}for (i=var-1;i>=0;i--){temp=a[i][var];for(j=i+1;j<var;j++){if(sgn(a[i][j])!=0)temp-=a[i][j]*x[j];}x[i]=temp/a[i][i];}return 1; }int main(int argc, const char * argv[]) {// insert code here...int i,j;int equ, var;printf("方程數:");scanf("%d",&equ); //輸入方程數量printf("變量數:");scanf("%d",&var); //輸入變量數量for(i=0;i<equ;i++) //循環輸入各方程的系數{printf("第%d個方程的系數:",i+1);for(j=0;j<var+1;j++) //循環輸入一個方程的系數{scanf("%lf", &a[i][j]);}}n=gauss(equ,var); //調用高斯函數if(n==0) //無解printf("無解!\n");else if(n>1) //無窮多解{printf("無窮多解! 自由變量數量為%d\n",n);for(i=0;i<var;i++){if(free_x[i])printf("x%d 是不確定的\n",i+1);elseprintf("x%d: %f\n",i+1,x[i]);}}else if(n==1){for(i=0;i<var;i++) //輸出解{printf("x%d=%f\n",i+1,x[i]);}}printf("\n");return 0; }

轉載于:https://www.cnblogs.com/George1994/p/6399890.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的高斯消元整数版和浮点数版实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久91| 麻豆一区在线 | 好爽快一点高潮了 | 女人av在线 | 91调教视频 | 精品国产av无码一区二区三区 | 欧美另类极品videosbest使用方法 | 国产一区二区三区 | 亚洲成人精品在线观看 | 中文在线国产 | 日本精品在线一区 | 无码任你躁久久久久久老妇 | 福利二区三区 | 国产a国产片 | 国产在线播放网站 | 99九九热 | 拔插拔插海外华人永久免费 | 成人国产精品一区 | av中文资源网 | 黄色网在线播放 | 久久午夜网站 | 麻豆av一区二区三区 | 成人夜间视频 | 精品人伦一区二区三区 | 日韩欧美亚洲一区二区 | 国产主播在线一区 | 69影院少妇在线观看 | 天美麻花果冻视频大全英文版 | 日本亚洲一区二区三区 | 自拍偷拍亚洲一区 | 国产欧美日韩专区发布 | 精品123区| 亚洲爆乳无码一区二区三区 | 91理论片 | 日韩av电影手机在线观看 | 亚洲国产视频网站 | 一区二区三区日韩在线 | 国产亚洲精品美女久久久 | 亚洲一区二区视频 | 丝袜高跟av | 久艹在线 | 天天综合网天天综合色 | 高潮毛片又色又爽免费 | 91超碰免费在线 | av永久免费在线观看 | 丰满少妇一区二区 | 狠狠精品干练久久久无码中文字幕 | 欧美黑人粗大 | 亚洲天堂网在线观看视频 | 先锋影音av资源站 | 国产91精品看黄网站在线观看 | 精品国产乱码久久久久久闺蜜 | 欧美视频福利 | 日本中文在线观看 | 精品国产乱码久久久久久蜜臀网站 | 男操女视频网站 | 欧美bdsm调教视频 | av网站入口| 日本美女逼 | 亚洲一区二区三区电影在线观看 | 成人在线网| 亚洲午夜久久久久久久久久久 | 欧美午夜在线视频 | 成人h动漫精品一区二区 | www五月 | 久久国产传媒 | 老司机午夜视频 | 国产欧美激情视频 | 中文字幕丰满人伦在线 | 美女在线国产 | 黄色麻豆网站 | 久久成人综合网 | 精品视频日韩 | 亚洲欧洲免费 | 一区二区三区四区精品 | 久久激情片 | 天天爽天天射 | 久久久久九九九九 | 中文字幕不卡一区 | 91成人国产 | www.99色| 国产色a | 欧美少妇15p | 国产91国语对白在线 | 亚洲午夜一区二区 | 精久久久久久 | 九九久久九九久久 | 国产免费黄色 | 成人深夜网站 | 好吊色视频一区二区三区 | 国产又粗又长又大 | 国产黄色特级片 | 国产日韩在线观看一区 | 综合色综合 | 丝袜老师让我了一夜网站 | 国产极品在线观看 | 成年人在线视频观看 | 亚洲短视频 | 国产成人av网站 |