线性代数运算
来源:互联网 发布:阿里云到底是干嘛的 编辑:程序博客网 时间:2024/06/06 23:17
#include<iostream>#include<cstdlib>using namespace std;class matrix{private: int fun1(int **a,int n) { int t=0; if(n==1) return a[0][0]; if(n==2) return a[0][0]*a[1][1]-a[1][0]*a[0][1]; for(int y=0; y<n; y++) t+=fun2(a,n,0,y,1); return t; } int fun2(int **a,int n,int x,int y,int r) { int t=0; int **b=new int *[n-1]; for(int i=0; i<n-1; i++) { b[i]=new int[n-1]; for(int j=0; j<n-1; j++) { if(i<x&&j<y) b[i][j]=a[i][j]; else if(i<x&&j>=y) b[i][j]=a[i][j+1]; else if(i>=x&&j<y) b[i][j]=a[i+1][j]; else if(i>=x&&j>=y) b[i][j]=a[i+1][j+1]; } } int s=1; if((x+y)%2) s=-1; if(r==0) t+=s*fun1(b,n-1); else t+=s*a[x][y]*fun1(b,n-1); delete[] b; return t; } void fun3(int **a,int m,int n,double **b) { for(int i=0; i<n; i++) for(int j=0; j<m; j++) b[i][j]=a[j][i]; }public: void determinant_calculation()//行列式计算 { int n;cin>>n; int **a=new int *[n]; for(int i=0; i<n; i++) { a[i]=new int[n]; for(int j=0; j<n; j++) cin>>a[i][j]; } cout<<fun1(a,n)<<endl; delete[] a; } void mul()//矩阵乘法 { int m1,n1,m2,n2; cin>>m1>>n1; int a[m1][n1]= {0}; for(int i=0; i<m1; i++) for(int j=0; j<n1; j++) cin>>a[i][j]; cin>>m2>>n2; int b[m2][n2]= {0}; for(int i=0; i<m2; i++) for(int j=0; j<n2; j++) cin>>b[i][j]; int c[m1][n2]= {0}; for(int i=0; i<m1; i++) { for(int j=0; j<n2; j++) { for(int k=0; k<n1; k++) c[i][j]+=a[i][k]*b[k][j]; cout<<c[i][j]<<" "; } cout<<endl; } } void transpose()//转置 { int m,n;cin>>m>>n; int **a=new int *[m]; for(int i=0; i<m; i++) { a[i]=new int[n]; for(int j=0; j<n; j++) cin>>a[i][j]; } double **b=new double *[n]; for(int i=0; i<n; i++) b[i]=new double[m]; fun3(a,m,n,b); for(int i=0; i<n; i++) { for(int j=0; j<m; j++) cout<<b[i][j]<<" "; cout<<endl; } } void accompany()//伴随 { int m;cin>>m; int **a=new int *[m]; for(int i=0; i<m; i++) { a[i]=new int[m]; for(int j=0; j<m; j++) cin>>a[i][j]; } int **b=new int *[m]; for(int i=0; i<m; i++) b[i]=new int[m]; for(int i=0; i<m; i++) for(int j=0; j<m; j++) b[i][j]=fun2(a,m,i,j,0); double **c=new double *[m]; for(int i=0; i<m; i++) c[i]=new double[m]; fun3(b,m,m,c); for(int i=0; i<m; i++) { for(int j=0; j<m; j++) cout<<c[i][j]<<" "; cout<<endl; } delete[] a; } void inverse()//逆矩阵 { int m;cin>>m; int **a=new int *[m]; for(int i=0; i<m; i++) { a[i]=new int[m]; for(int j=0; j<m; j++) cin>>a[i][j]; } if(fun1(a,m)) { int **b=new int *[m]; for(int i=0; i<m; i++) b[i]=new int[m]; for(int i=0; i<m; i++) for(int j=0; j<m; j++) b[i][j]=fun2(a,m,i,j,0); double **c=new double *[m]; for(int i=0; i<m; i++) c[i]=new double[m]; fun3(b,m,m,c); double q=1.0/fun1(a,m); for(int i=0; i<m; i++) { for(int j=0; j<m; j++) cout<<q*c[i][j]<<" "; cout<<endl; } delete[] b; delete[] c; } else cout<<"行列式为0,逆矩阵不存在"<<endl; delete[] a; }}matrix;int main(){ int t; while(cin>>t) { if(t==1)matrix.determinant_calculation(); else if(t==2)matrix.mul(); else if(t==3)matrix.transpose(); else if(t==4)matrix.accompany(); else if(t==5)matrix.inverse(); } return 0;}
1 0
- 线性代数运算
- 线性代数 矩阵及其运算
- 线性代数4-矩阵运算
- 线性代数——基本运算
- [00310]矩阵与线性代数运算
- 线性代数 02.02 矩阵的运算
- 线性代数学习笔记二:矩阵及其运算
- 线性代数(二) : 矩阵与矩阵运算
- R:向量和矩阵的线性代数运算
- (9.1.2)线性代数之矩阵运算
- Spark Mlib BLAS线性代数运算库
- 线性代数复习二——矩阵运算
- Visual Studio使用Armadillo线性代数运算库
- 线性代数复习分析(矩阵代数运算)
- 线性代数-【2-1】矩阵及其运算
- 【线性代数】分块矩阵的运算、特征值
- 线性代数
- 线性代数
- cocos2dx 实习生培训计划
- leetcode题解日练--2016.7.10
- 多项式求根
- c 语言的标准输入输出,scanf,printf
- 二叉查找树
- 线性代数运算
- HashMap循环遍历方式及其性能对比
- 遍历HashMap的三种方法
- 第九次课总结
- c语言的基本数据类型
- 文章标题
- HashMap的三种遍历方法 2
- VBA快速获取创建sheet链接
- django1.9学习之投票系统第一课时