C++實現線性代數矩陣行簡化

本文實例為大家分享了C++實現線性代數矩陣行簡化的具體代碼,供大家參考,具體內容如下

成都創新互聯公司是一家專注于網站設計、成都網站制作與策劃設計,鎮安網站建設哪家好?成都創新互聯公司做網站,專注于網站建設十余年,網設計領域的專業建站公司;建站業務涵蓋:鎮安等地區。鎮安做網站價格咨詢:18982081108

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

輸入僅支持整數,支持分數形式輸出。

媽媽再也不用擔心俺的線性代數作業~

使用實例:

C++實現線性代數矩陣行簡化

(實現格式化輸出部分寫的極為丑陋......)

#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-6
using 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<<"輸入矩陣的行數和列數:"<<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++實現線性代數矩陣行簡化
當前URL:http://m.kartarina.com/article14/gechge.html

成都網站建設公司_創新互聯,為您提供微信小程序域名注冊靜態網站網站制作面包屑導航做網站

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

網站優化排名
主站蜘蛛池模板: 无码人妻精品丰满熟妇区| 无码天堂va亚洲va在线va| 少妇人妻无码精品视频app| 日韩精品无码Av一区二区| 日韩人妻系列无码专区| av无码东京热亚洲男人的天堂 | 亚洲AV成人无码天堂| 亚洲av永久中文无码精品综合| 免费无码婬片aaa直播表情| 东京无码熟妇人妻AV在线网址| 久久久久久国产精品无码超碰 | 性生交片免费无码看人| 日韩精品无码免费专区网站| 久久无码专区国产精品发布| 五月丁香六月综合缴清无码| 亚洲中文字幕无码一去台湾| 中文字幕无码日韩专区| 国产精品亚洲专区无码牛牛| 无码国产精成人午夜视频一区二区 | 久久av高潮av无码av喷吹| 亚洲AV永久无码精品一福利| 亚洲AV无码日韩AV无码导航| 国产精品亚洲αv天堂无码| 中文AV人妻AV无码中文视频| 性无码专区一色吊丝中文字幕| 日韩av无码一区二区三区| 少妇无码太爽了不卡在线观看| 全免费a级毛片免费看无码| 无码专区人妻系列日韩精品少妇| 国产50部艳色禁片无码| 五月丁香六月综合缴清无码| 在线无码午夜福利高潮视频 | 亚洲中文无码亚洲人成影院| 亚洲成a人片在线观看无码专区| 无码专区一va亚洲v专区在线| 最新亚洲人成无码网站| 夫妻免费无码V看片| 日韩成人无码影院| 国产在线观看无码免费视频| 无码专区国产精品视频| 性色AV无码中文AV有码VR|