矩阵行列式的计算及逆矩阵转换
1.行列式的计算
矩阵行列式的计算在数学上有多种方法,为了编程方便,我采取将矩阵转化为上三角的形式,然后对角线上的数相乘,便得到行列式的值。
首先将矩阵储存在vector的二维数组中,接着开始进行行与行之间的·换算。使矩阵转换为上三角形式。
以下是代码:
void CJZCalculate3Dlg::det()
{
vector<vector<double > > v5=v1; // v1是与edit框绑定的变量所表示的矩阵
vector<vector<double > > v6(100);
for(int tt=0;tt<r1;tt++)
v6[tt].resize(c1);
double c[1000]={0};
double det=1;
for(int i=0;i<c1-1;i++) / 上三角运算
{
if(v5[i][i]==0) /// 判断 对角数是否为 0
{
int flag=0;
for(int f=i+1;f<c1;f++)
{
if(v5[f][i]!=0)
{
v6[0]=v5[i];
v5[i]=v5[f];
v5[f]=v6[0];
flag=1;
det=0-det;
break;
}
}
if(flag==0)
{
det=0;
break;
}
} /// 结束判断
c[i]=v5[i][i];
for(int j=i+1;j<c1;j++)
v5[i][j]=v5[i][j]/v5[i][i];
v5[i][i]=1;
for(int k=i+1;k<c1;k++)
{
for(int t=i+1;t<c1;t++)
v5[k][t]=v5[k][t]-v5[k][i]*v5[i][t];
v5[k][i]=0;
}
}
det=det*v5[c1-1][c1-1];
for(int s=0;s<c1-1;s++)
det=det*c[s];
m_str3.Format(_T("%lf "),det); ///m_str3为与edit框绑定的变量,update后便可以将行列式的值刷新到edit框
}
det的值便为行列式的值
2.逆矩阵的求导
首先,确定待求矩阵行列式是否为0,如果为0.则不存在逆矩阵
确定了存在逆矩阵后,便可以开始进行计算了;
利用数学公式:矩阵A的矩阵逆矩阵对于,A的伴随矩阵除以A的行列式。
以下为代码:
void CJZCalculate3Dlg::OnButton6()
{
// TODO: Add your control notification handler code here
/// m_str3为与edit框绑定的变量
m_str3=""; //情况edit3里的数据,以便显示新数据
det(); // 计算行列式
double A=atof(m_str3); / 行列式赋值给A
if(A==0)
{
m_str3="行列式为0,不存在逆矩阵";
}
else
{
double a[100][100]={0};
v7=v1;
c1--;
for(int i=1;i<=r1;i++) //伴随矩阵计算
{
for(int j=1;j<=r1;j++)
{
v1.erase(v1.begin()+i-1);
for(int k=0;k<r1-1;k++)
v1[k].erase(v1[k].begin()+j-1);
for(int k2=0;k2<r1-1;k2++)
v1[k2].resize(r1-1);
det();
a[j][i]=atof(m_str3);
if((i+j)%2==1)
a[j][i]=0-a[j][i];
for(int jk=0;jk<r1;jk++)
v1[jk].resize(r1);
v1=v7;
}
} 将伴随矩阵代入数组
c1++;
m_str3="";
for(int t1=1;t1<=r1;t1++) /// 显示逆矩阵
{
for(int t2=1;t2<=r1;t2++)
{
str3.Format(_T("%lf "),a[t1][t2]/A);
m_str3=m_str3+str3;
}
m_str3=m_str3+"\r\n";
}
}
CString类型的m_str3就是逆矩阵
UpdateData(false); //逆矩阵被刷新到edit框上
}
矩阵计算器完整代码见https://download.csdn.net/download/cyl00cyl/10693382,能够实现矩阵加减乘运算,幂运算,数乘运算,转置,行列式,逆矩阵。 能够检测矩阵是否完整,能够识别是否能进行所选择的运算,并且提示出不能进行计算的原因。
矩阵行列式的计算及逆矩阵转换相关推荐
- 【线性代数(8)】矩阵行列式、伴随矩阵、逆矩阵
逆矩阵 1 矩阵行列式 2 伴随矩阵 3 逆矩阵 3.1 逆矩阵概念 3.2 逆矩阵的性质 手动反爬虫: 原博地址 知识梳理不易,请尊重劳动成果,文章仅发布在CSDN网站上,在其他网站看到该博文均属于 ...
- 算法与数据结构(二)三元组矩阵行列式的计算(用递归)
1.具体思想: 关于计算矩阵行列式有两个主要方法: 1.根据矩阵行列式的定义式用递归计算(就是本文所讲) 2.先做矩阵行变换,转化为上三角矩阵,再求行列式. (我先是思考了行变换转化为三角矩阵,但中途 ...
- Python矩阵计算类:计算矩阵加和、矩阵乘积、矩阵转置、矩阵行列式值、伴随矩阵和逆矩阵
最近在Python程序设计中遇到一道设计矩阵计算类的题目,原题目要求计算矩阵加和和矩阵乘积,而我出于设计和挑战自己的目的,为自己增加难度,因此设计出矩阵计算类,不仅可以求出矩阵加和和矩阵乘积,还能计算 ...
- python numpy逆_Python使用numpy计算矩阵特征值、特征向量与逆矩阵
原标题:Python使用numpy计算矩阵特征值.特征向量与逆矩阵 Python扩展库numpy.linalg的eig()函数可以用来计算矩阵的特征值与特征向量,而numpy.linalg.inv() ...
- java 计算矩阵行列式,【算法】递归算法之n阶矩阵行列式求解
最近高等代数正好讲到这里,此篇文章正好对所学知识做一个具体程序实践. 设计算法时使用递归的思想是一个程序员的基本素质,递归可以把一个很庞大的问题转化为规模缩小了的同类问题的子问题,通过这一思想,我们编 ...
- python计算矩阵行列式_基础 | Python 下的行列式值
关键词:线性代数 / 矩阵 / 行列式 矩阵作为绝大多数算法的算子,当矩阵里的数字被赋予了意义,例如每个 row 表示了一个线性方程式,那么如果把这些线性方程用向量的形式在 xyz 空间坐标中表示,从 ...
- 计算矩阵行列式时奇排列与偶排列的判定
在计算矩阵行列式时需要判断求和公式中矩阵元素第二个脚标的排列的奇偶性来决定这一求和项的正负. 定义:降序次数为偶数的排列为偶排列:降序次数为奇数的排列为奇排列. 例如排列(2,3,1):从左往右看,2 ...
- c语言中用伴随矩阵求逆,C语言求矩阵的行列式、伴随矩阵、逆矩阵
CSDN大神编写的求矩阵的行列式,intgetA(intarcs[N][N],intn),通过调用递归函数,按矩阵的第一行进行分解,虽然行列式的计算都学过,但是自己写起来还是得费一番功夫的,好在有MA ...
- java 计算矩阵行列式_Java 矩阵行列式算法(非高斯消元)
最近由于项目任务较少,手上有不少空闲的时间,所以抽空研究了一下矩阵行列式的算法. 先来说说行列式,以下摘自百度百科: 行列式在数学中,是由解线性方程组产生的一种算式.行列式的特性可以被概括为一个多次交 ...
- 行列式的计算(矩阵外面加个绝对值)
1.写在前面 我表示很难过,曾经线代,矩阵学的也不算太差,可惜太久没用,导致现在连最基本的行列式都不会了.以后还是要多用,多用,多用,重要的事情说三遍. 2.行列式的计算准则 定义:n阶行列式 等于所 ...
最新文章
- 小程序一次性上传多个本地图片,上拉加载照片以及图片加载延迟解决之道
- WCF学习笔记(基于REST规则方式)
- PicGo github配置
- 《“笨办法”学Python(第3版)》——习题3 数字和数学计算
- Oracle存储过程中使用游标来批量解析CLOB字段里面的xml字符串:
- django解决借用Model使用数据库时报错 AttributeError: Manager isn‘t accessible via xxxxxModel instances
- javascript数据结构与算法--二叉树遍历(中序)
- 【转】Linux删除文件未释放空间问题处理
- 机器学习-线性回归scikit-learn
- c#.net开发金融行情分析软件k线图蜡烛图之布林线指标计算
- oracle数据库导表操作
- AMD EPYC(霄龙)Genoa服务器 | 综合评测
- 【STM8】IAR 项目新建步骤
- 计算机网络的类型和特点
- java的mysql语句规范_mysql 规范
- 某视频播放公司笔试 2013
- 多线程相关知识点总结
- operator=、operator[]、operator()操作符重载
- python语句中end=‘ ‘的作用
- 如何使用graphpad做柱形图_Graphpad绘制柱形图&散点图