溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

C++中怎么簡化線性代數(shù)矩陣行

發(fā)布時間:2021-08-06 16:13:08 來源:億速云 閱讀:142 作者:Leah 欄目:編程語言

這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)C++中怎么簡化線性代數(shù)矩陣行,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

具體內(nèi)容如下

輸入一個矩陣,可分別輸出該矩陣的階梯型和最簡型。

輸入僅支持整數(shù),支持分?jǐn)?shù)形式輸出。

媽媽再也不用擔(dān)心俺的線性代數(shù)作業(yè)~

使用實(shí)例:

(實(shí)現(xiàn)格式化輸出部分寫的極為丑陋......)

#include<iostream>#include<cmath>#include<algorithm>#include<iomanip>#include<cstdio>#include<string>#define f(i,l,r) for(i=(l);i<=(r);i++)#define ff(i,r,l) for(i=(r);i>=(l);i--)#define ll long long#define EPS 1e-6using namespace std;const int MAXN=105;int n,m;char output[MAXN];string s;struct frac{  int x,y=1;  bool operator < (const frac &tmp)const{    return 1.0*x/y<1.0*tmp.x/tmp.y;  }  frac operator - (const frac &tmp){    frac ans;    ans.x=x*tmp.y-y*tmp.x;    ans.y=y*tmp.y;    ans.sim();    return ans;  }  frac operator * (const frac &tmp){    frac ans;    ans.x=x*tmp.x;    ans.y=y*tmp.y;    ans.sim();    return ans;  }  frac operator / (const frac &tmp){    frac ans;    ans.x=x*tmp.y;    ans.y=y*tmp.x;    ans.sim();    return ans;  }  int gcd(int a,int b){    return b==0?a:gcd(b,a%b);  }  void sim(){    int d=gcd(x,y);    x/=d;    y/=d;    if(x<0&&y<0){      x=-x;      y=-y;    }  }  void write()  {    int i;    char tmp[MAXN];    int num=0;    int nx=x,ny=y;    s="";    if(!nx){      s+="0";    }    else{      if(nx<0||ny<0){        s+='-';        nx=abs(nx);        ny=abs(ny);      }      if(nx%ny==0){        nx/=ny;        while(nx){          tmp[++num]='0'+nx%10;          nx/=10;        }        ff(i,num,1){          s+=tmp[i];        }      }      else{        while(nx){          tmp[++num]='0'+nx%10;          nx/=10;        }        ff(i,num,1){          s+=tmp[i];        }        s+='/';        num=0;        while(ny){          tmp[++num]='0'+ny%10;          ny/=10;        }        ff(i,num,1){          s+=tmp[i];        }      }    }    f(i,s.length(),7){      cout<<" ";    }    cout<<s;  }}a[MAXN][MAXN];void out_f(){  int i,j;  f(i,1,n){    f(j,1,m){      cout<<1.0*a[i][j].x/a[i][j].y<<" ";    }    cout<<endl;  }}void out(){  int i,j;  f(i,1,n){    f(j,1,m){      a[i][j].write();      cout<<" ";    }    cout<<endl;  }}int find(int r,int c){  int i,t=-1;  f(i,r,n){    if(t==-1||a[t][c]<a[i][c]) t=i;  }  return t;}void interchange(int r1,int r2){  int j;  f(j,1,m){    swap(a[r1][j],a[r2][j]);  }  return;}void scale(int r,int c){  int j;  ff(j,m,c){    a[r][j]=a[r][j]/a[r][c];  }  return;}void muilt(int r,int c){  int i,j;  f(i,r+1,n){    if(!a[i][c].x) continue;    ff(j,m,c){      a[i][j]=a[i][j]-(a[i][c]*a[r][j]);    }  }  return;}void gause_1(){  int c,r=1;  f(c,1,n){    int pos=find(r,c);    if(!a[pos][c].x) continue;    interchange(r,pos);    scale(r,c);    muilt(r,c);    r++;  }}void gause_2(){  int i,j;  ff(i,n,1){    f(j,i+1,n){      a[i][n+1]=a[i][n+1]-(a[i][j]*a[j][n+1]);      a[i][j].x=0;    }  }  return;}int main(){  int i,j;  cout<<"輸入矩陣的行數(shù)和列數(shù):"<<endl;  cin>>n>>m;  cout<<"輸入矩陣元素:"<<endl;  f(i,1,n){    f(j,1,m){      cin>>a[i][j].x;    }  }  gause_1();  cout<<"階梯型為:"<<endl;  out();  gause_2();  cout<<"最簡型為:"<<endl;  out();  return 0;}

上述就是小編為大家分享的C++中怎么簡化線性代數(shù)矩陣行了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

c++
AI