博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
矩阵的逆矩阵,伴随矩阵
阅读量:6420 次
发布时间:2019-06-23

本文共 2359 字,大约阅读时间需要 7 分钟。

#include
#include
#include
#include
#include
#include
#include
#include
#define N 100using namespace std;template
out_type convert(const in_value & t){ stringstream stream; stream<
>result;//向result中写入值 return result;}struct Number{ int x, y; static int gcd(int a, int b){ return b==0 ? a : gcd(b, a%b); } Number(){} Number(int xx, int yy=1):x(xx), y(yy){} Number operator /(Number tmp){ return Number(x*tmp.y/(gcd(x*tmp.y, y*tmp.x)), y*tmp.x/gcd(x*tmp.y, y*tmp.x)); } Number operator *(Number tmp){ return Number(x*tmp.x/gcd(x*tmp.x, y*tmp.y), y*tmp.y/gcd(x*tmp.x, y*tmp.y)); } Number operator -(Number tmp){ int lcm = y*tmp.y/gcd(y, tmp.y);//最小公倍数 int xx = lcm/y*x - lcm/tmp.y*tmp.x; if(xx==0) return Number(0, 1); return Number(xx/gcd(xx, lcm), lcm/gcd(xx, lcm)); } bool operator ==(Number tmp){ return x==tmp.x && y==tmp.y; }};ostream& operator<<(ostream& output, const Number &p){ output<
<
(p.x)+"/"+convert
(p.y)<<" ";}struct Determinant{ Number d[N][N]; int n, m; Determinant(int nn, int mm): n(nn), m(mm){} void out_matrix(){ for(int i=1; i<=n; ++i){ for(int j=1; j<=m; ++j) cout<
=1; --j){ if(inverse.d[j][i]==Number(0,1)) continue; Number mul = inverse.d[j][i]/inverse.d[i][i]; for(int k=i; k<=2*n; ++k) inverse.d[j][k] = inverse.d[j][k]-inverse.d[i][k]*mul; } for(int j=i+1; j<=n; ++j){ if(inverse.d[j][i]==Number(0,1)) continue; Number mul = inverse.d[j][i]/inverse.d[i][i]; for(int k=i; k<=2*n; ++k) inverse.d[j][k] = inverse.d[j][k]-inverse.d[i][k]*mul; } } for(int i=1; i<=n; ++i) for(int j=1; j<=m; ++j) inverse.d[i][j] = inverse.d[i][j+n]; return inverse; } Determinant company_matrix(){ //伴随矩阵 Determinant company(n, m); for(int i=1; i<=n; ++i) for(int j=1; j<=m; ++j){ Determinant tmp(n-1, m-1);//余子式 int r=1, c=1; for(int ii=1; ii<=n; ++ii){ c=1; if(i!=ii){ for(int jj=1; jj<=m; ++jj) if(j!=jj){ tmp.d[r][c] = d[ii][jj]; ++c; } ++r; } } company.d[j][i] = tmp.determinantValue();//赋给伴随矩阵相应的位置 if((i+j)&1) company.d[j][i].x = -company.d[j][i].x; } return company; }};int main(){ int n, m; int x, y; cin>>n>>m; Determinant determinant(n, m);// regex patternOne("([a-z]+)\\.([a-z]+)");// smatch pieces_match; for(int i=1; i<=n; ++i){ string str; for(int j=1; j<=n; ++j){ scanf("%d/%d", &x, &y); determinant.d[i][j] = Number(x, y); } } //伴随矩阵 cout<<"伴随矩阵 "<

 

转载地址:http://qymra.baihongyu.com/

你可能感兴趣的文章
我的友情链接
查看>>
【Jolla】离线更新方法
查看>>
InnoDB与MyISAM的区别
查看>>
MongoDB【最新版V2.6】- 系列 3: 架构的设计-Replica Sets
查看>>
Thinking in Java之hashCode()方法
查看>>
Unity定时器堆栈显示
查看>>
在spring security手动 自定义 用户认证 SecurityContextHolder
查看>>
AF3.1.0简单二次封装
查看>>
HTTP 缓存(上)
查看>>
Maclean答网友问:深入进阶学习Oracle数据库的规划
查看>>
Eclipse常用(默认)快捷键
查看>>
C#线程同步
查看>>
六大设计原则快速记忆SOLID
查看>>
解决windows10 9926版本中无法访问samba的方法
查看>>
【VMCloud云平台】拥抱Docker(二)配置第一个容器
查看>>
java中重写方法必须抛出和原方法一样的异常或者不抛异常
查看>>
java中采用Pull解析器对XML文件进行解析
查看>>
MySQL带参数的存储过程小例子
查看>>
我的友情链接
查看>>
linux修改ftp、telnet、ssh的默认端口
查看>>