矩阵的逆

article/2025/10/6 19:07:48

矩阵的逆

原理:
连接:
https://baike.baidu.com/item/%E9%80%86%E7%9F%A9%E9%98%B5
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码:

QT c++版:

//求逆矩阵
QVector<QVector<double>> Matrix_inverse(QVector<QVector<double>> &A)
{int cols = A[0].size();int rows = A.size();QVector<double> col(cols,0);QVector<QVector<double>> res(rows,col);int i,j,k;double temp,temp2;//初始单位阵for (i = 0; i < rows; i++){for (j = 0; j < rows; j++){res[i][j] = (i == j) ? 1 : 0;}}// 求左下for (i = 0; i <= rows - 1; i++){//提取该行的主对角线元素temp2 = A[i][i];   //可能为0if (temp2 == 0)  //为0 时,在下方搜索一行不为0的行并交换{for (i = 0; i < rows; i++){k = i;for (j = i + 1; j < rows; j++){if (A[j][i] != 0) //不为0的元素{k = j;break;}}if (k != i) //如果没有发生交换: 情况1 下方元素也全是0{for (j = 0; j < rows; j++){//行交换temp = A[i][j];A[i][j] = A[k][j];A[k][j] = temp;//伴随交换temp = res[i][j];res[i][j] = res[k][j];res[k][j] = temp;}}else {//满足条件1cout<<"不可逆矩阵ERROR"<<endl;break;}}}//该行除以主对角线元素的值 使主对角线元素为1for(j = 0; j<rows; j++){A[i][j] = A[i][j] / temp2;   //分母不为0res[i][j] = res[i][j] / temp2;  //伴随矩阵}//下方的每一行减去该行的倍数for(k = i+1; k<rows; k++){temp2 = A[k][i];   //下方的某一行的主对角线元素for (j = 0; j < rows ; j++){A[k][j] = A[k][j] - temp2 * A[i][j];   //下方的每一行减去该行的倍数  使左下角矩阵化为0res[k][j] = res[k][j] - temp2 * res[i][j]; //左下伴随矩阵}}}temp2 = A[rows - 1][rows - 1];  //最后一行最后一个元素if (temp2 == 0) //条件2 初步计算后最后一行全是0 在只上步骤中没有计算最后一行,所以可能会遗漏{cout<<"不可逆矩阵,ERROR"<<endl;}A[rows - 1][rows - 1] = 1;for (j = 0; j < rows; j++){res[rows - 1][j] = res[rows - 1][j] / temp2;}// 求右上for (i = rows - 1; i >= 0; i--){for (k = i - 1; k >= 0; k--){temp2 = A[k][i];for (j = 0; j < rows; j++){A[k][j] = A[k][j] - temp2 * A[i][j];res[k][j] = res[k][j] - temp2 * res[i][j];}}}return res;
}

vs c++版:

#include <cmath>#include <iostream>using namespace std;double ffabs(double p)        //计算实数的绝对值{double q;q = fabs(p);return(q);}double ff(double p)         //计算1.0/p{double q;q = 1.0/p;return(q);}//a   原矩阵。返回逆矩阵。
//n   矩阵阶数template <class T>        //模板声明T为类型参数int inv(T a[], int n)       //若矩阵奇异,则返回标志值0,否则返回标志值非0。{ int *is,*js,i,j,k,l,u,v;double d, q;T p;is=new int[n];js=new int[n];for (k=0; k<=n-1; k++){ d=0.0;for (i=k; i<=n-1; i++)      //选主元for (j=k; j<=n-1; j++){ l=i*n+j; q = ffabs(a[l]);        //计算元素绝对值(模)if (q>d) { d=q; is[k]=i; js[k]=j;}}if (d+1.0==1.0)            //矩阵奇异{ delete[] is; delete[] js; cout <<"矩阵奇异!" <<endl;return(0);             //返回奇异标志值}if (is[k]!=k)for (j=0; j<=n-1; j++)     //行交换{ u=k*n+j; v=is[k]*n+j;p=a[u]; a[u]=a[v]; a[v]=p;}if (js[k]!=k)for (i=0; i<=n-1; i++)     //列交换{ u=i*n+k; v=i*n+js[k];p=a[u]; a[u]=a[v]; a[v]=p;}l=k*n+k;a[l] = ff(a[l]);            //计算1/a[l]for (j=0; j<=n-1; j++)      //归一化if (j!=k){ u=k*n+j; a[u]=a[u]*a[l];}for (i=0; i<=n-1; i++)      //消元计算if (i!=k)for (j=0; j<=n-1; j++)if (j!=k){ u=i*n+j;a[u]=a[u]-a[i*n+k]*a[k*n+j];}for (i=0; i<=n-1; i++)if (i!=k){ u=i*n+k; a[u]=(a[u]-a[u]-a[u])*a[l];}}for (k=n-1; k>=0; k--)      //恢复行列交换{ if (js[k]!=k)for (j=0; j<=n-1; j++){ u=k*n+j; v=js[k]*n+j;p=a[u]; a[u]=a[v]; a[v]=p;}if (is[k]!=k)for (i=0; i<=n-1; i++){u=i*n+k; v=i*n+is[k];p=a[u]; a[u]=a[v]; a[v]=p;}}delete[] is; delete[] js;return(1);}

test 测试:

#include <cmath>
#include <iostream>using namespace std;int main(){ int i,j;double a[4][4]={ {0.2368,0.2471,0.2568,1.2671},{1.1161,0.1254,0.1397,0.1490},{0.1582,1.1675,0.1768,0.1871},{0.1968,0.2071,1.2168,0.2271}};double b[4][4];for (i=0; i<=3; i++)for (j=0; j<=3; j++)  b[i][j]=a[i][j];i=inv(&b[0][0],4);if (i!=0){ cout <<"实矩阵 A:" <<endl;for (i=0; i<=3; i++){ for (j=0; j<=3; j++)  cout <<a[i][j]<<"    ";cout <<endl;}cout <<"逆矩阵 A-:" <<endl;;for (i=0; i<=3; i++){ for (j=0; j<=3; j++)  cout <<b[i][j]<<"    ";cout <<endl;}}return 0;}

http://chatgpt.dhexx.cn/article/RXhCBeJu.shtml

相关文章

矩阵求逆

矩阵求逆 初等变换求逆参考文章 初等变换求逆 1&#xff09;初等变换求逆矩阵时不能同时使用初等列变换和初等行变换&#xff0c;使用初等列变换或者初等行变换来求逆矩阵都是可以的&#xff0c;但是不能二者同时使用&#xff0c;只能用一种方法来得到逆矩阵。 2&#xff09;初…

卡西欧计算器矩阵求逆

记录一下&#xff0c;防止忘记 1 按开机键 打开计算器 2 按 菜单设置键 进去计算模式选择模块 3 按“ 4 ”选择矩阵运算 4 有四个矩阵可以编辑 选择按 4 编辑矩阵D 5 输入矩阵的行数 我按了3 6 输入矩阵的列数 我按了 3 7 建了一个3*3空矩阵 输入第一个数 12 然后按“”键完…

如何用计算机求矩阵的逆矩阵,逆矩阵的求法

逆矩阵是数学知识的一种&#xff0c;很多学习数学的同学们应该很了解吧。逆矩阵计算器是一款可以对矩阵的逆进行计算的免费程序,本程序引入了分数算法,可以对分数元素计算并得出分数结果。那么这款软件怎么样呢&#xff1f;接下来&#xff0c;介绍一下。 逆矩阵的求法 A^(-1)(1…

python求逆矩阵的方法,Python 如何求矩阵的逆

我就废话不多说了,大家还是直接看代码吧~ import numpy as np kernel = np.array([1, 1, 1, 2]).reshape((2, 2)) print(kernel) print(np.linalg.inv(kernel)) 注意,Singular matrix奇异矩阵不可求逆 补充:python+numpy中矩阵的逆和伪逆的区别 定义: 对于矩阵A,如果存在一…

Maple矩阵求逆

如何使用Maple进行矩阵求逆 调用包 with(LineAlgebra);输入我想要的矩阵&#xff1a; R : Matrix([[cos(a), sin(a), 0], [-sin(a), cos(a), 0], [0, 0, 1]]);然后我使用了Inverse命令 simplify(Inverse(R));结果并没有生成矩阵的逆。 查了一下说明手册加上mod好像也不行&a…

线性代数 --- 矩阵求逆的4种方法

线性代数 --- 矩阵求逆的4种方法 写在最前面&#xff1a;在大多数情况下&#xff0c;我们学习线性代数的目的是为了求解线性方程组Axb&#xff0c;而不是为了求A的逆。 单就解方程而言&#xff0c;LU分解是最实用的算法。只需按照ALU——>Axb,LUxb——>Lyb(正向回代求得y…

求解逆矩阵的常用三种方法

1.待定系数法 矩阵A 1, 2 -1,-3 假设所求的逆矩阵为 a,b c,d 则 从而可以得出方程组 a 2c 1 b 2d 0 -a - 3c 0 -b - 3d 1 解得 a3; b2; c -1; d -1 2.方程组求逆矩阵 伴随矩阵是矩阵元素所对应的代数余子式&#xff0c;所构成的矩阵&#xff0c;转置后得到的新矩阵。 …

矩阵求逆四种方法

注&#xff1a; 用A、B表示某矩阵, E表示单位矩阵 用Aˊ表示A逆 用|A|表示A的行列式 &#xff3b;A|E&#xff3d;表示拼接矩阵 一、公式法 先求A行列式结果&#xff0c;再求A伴随矩阵&#xff0c;最后再求A逆矩阵 |A| &#xff01; 0 则 AˊA*/|A| 注&#xff1a;图片中det…

浏览器渲染页面和加载页面机制

为什么有些网站打开的时候会加载会很慢&#xff0c;而且是整个页面同时显示的&#xff0c;而有些网站是从顶到下逐步显示出来的&#xff1f;弄懂这些对前端性能优化有很大帮助。要搞懂这个可以先从下面这个常规流程开始&#xff1a; 常规流程 1. 浏览器下载的顺序是从上到下&am…

页面实现加载进度条

文章目录 一、定时器实现进度条二、css3实现进度条三、加载状态事件实现进度条 一、定时器实现进度条 原理&#xff1a;设置了固定的时间后将图片和遮罩层隐藏,显示出页面的内容 效果1&#xff1a; 定时器实现的进度条效果 代码实现 <!DOCTYPE html> <html langen>…

VUE页面中加载外部HTML

方法1&#xff0c;用iframe vue页面 <template><button click"invokeHtmlMethod">调用html种方法</button><div class"iframestyleset"><iframe name "iframeMap" id"iframeMapViewComponent" v-bind…

页面还未加载完成显示loading

页面未加载完成&#xff0c;显示loading的图标 html代码 <div id"loading"><i></i> </div> css 代码 #loading{width: 100%;height: 100%;background-color: #fff;position: fixed;top:0;left: 0;z-index: 9999; }#loading >i{width: …

浏览器加载页面的过程

开源浏览器一般以8k每块下载html页面。 1、然后解析页面生成DOM树&#xff0c; 2、遇到css标签或JS脚本标签就新起线程去下载他们&#xff0c;并继续构建DOM。 3、下载完后解析CSS为CSS规则树&#xff0c;浏览器结合CSS规则树和DOM树生成Render Tree。 注意&#xff1a;构建…

浏览器加载网页过程

1.概要&#xff1a;从用户在浏览器输入域名开始&#xff0c;到web页面加载完毕&#xff0c;这个过程叫做网页加载过程&#xff0c;个人总结&#xff0c;长期更新 2.分析&#xff1a;打开一个网页&#xff0c;浏览器会因为页面上的css/js/image等静态资源多次发起连接请求&#…

登录页面加载效果

说明&#xff1a;我们在做后台管理系统的时候&#xff0c;都会有一个登录页面&#xff0c;有的时候网速比较慢&#xff0c;登录速度比较慢&#xff0c;有的用户就会一直点登录按钮&#xff08;图1&#xff09;&#xff0c;体验不是特别好&#xff0c;基于此&#xff0c;优化一下…

加载页面的几种方法

通常js中的方法是window.onload方法&#xff0c;但是&#xff0c;这有一个缺点&#xff0c;就是当出现多个加载事件时&#xff0c;后面的内容会直接覆盖前面的内容&#xff0c;譬如拿控制台输出为例子&#xff1a; window.onload function () {console.log("BOM方法1&quo…

js重新加载页面的方法

方法/步骤 1、window.location.reload()&#xff0c;刷新页面&#xff0c;不重复提交页面。 2、window.location.hrefwindow.location.href,刷新页面&#xff0c;不重复提交页面。 3、location location 4、location.replace(location.href),刷新页面&#xff0c;不重复…

页面加载的过程

1、创建Document对象&#xff0c;开始解析web页面。解析HTML元素和他们的文本内容后添加Element对象和Text节点到文档中。这个阶段document.readyState ‘loading’。 2、遇到link外部css&#xff0c;创建线程加载&#xff0c;并继续解析文档。 3、遇到script外部js&#xf…

HTML 页面加载过程

window.onload 和 DOMContentLoaded 的区别从输入 url 到得到 html 的过程浏览器渲染页面的过程 window.onload 和 DOMContentLoaded 的区别 DOMContentLoaded&#xff1a;DOM结构加载完毕window.onload&#xff1a;DOM结构和静态资源加载完毕 从输入 url 到得到 html 的过程 …

html运行页面一直处在加载状态的解决

前两天在制作一个页面的时候&#xff0c;发现左上方浏览器一直在加载&#xff0c;如下图所示&#xff1a; 并且我的一些图片也不显示了 查看代码&#xff0c;引用图片整合部分的图片路径出现错误&#xff1a; 改正如下&#xff1a; 重新运行界面&#xff1a; 界面运行完毕&am…