返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++利用伴随阵法实现矩阵求逆
  • 585
分享到

C++利用伴随阵法实现矩阵求逆

C++伴随阵法实现矩阵求逆C++实现矩阵求逆C++矩阵求逆 2023-02-10 15:02:49 585人浏览 独家记忆
摘要

先来一段百度百科上的搜索结果: 伴随阵法 定理:n阶矩阵为可逆的充分必要条件是A非奇异,且: 其中,是|A|中元素的代数余子式;矩阵 称为矩阵A的伴随矩阵,记作A*,于是有 用

先来一段百度百科上的搜索结果:

伴随阵法

定理:n阶矩阵为可逆的充分必要条件是A非奇异,且:

其中,是|A|中元素的代数余子式;矩阵

称为矩阵A的伴随矩阵,记作A*,于是有

用此方法求逆矩阵,对于小型矩阵,特别是二阶方阵求逆既方便、快阵,又有规律可循。因为二阶可逆矩阵的伴随矩阵,只需要将主对角线元素的位置互换,次对角线的元素变号即可。

若可逆矩阵是二阶或二阶以上矩阵,在求逆矩阵的过程中,需要求9个或9个以上代数余子式,还要计算一个三阶或三阶以上行列式,工作量大且中途难免出现符号及计算的差错。对于求出的逆炬阵是否正确,一般要通过来检验。一旦发现错误,必须对每一计算逐一排查。

下面我们来设计一下伴随阵法矩阵求逆的c++代码。

首先,需要自定义一个矩阵类型

#include<vector>
typedef vector<double> vec;
typedef vector<vec> mat;

然后,设计矩阵数乘的代码

mat num_mul(mat A, double num) {
	mat B(A.size(), vec(A[0].size()));
	for(int i = 0; i < B.size(); i++)
		for(int j = 0; j < B[0].size(); j++)
			B[i][j] = A[i][j] * num;
	return B;
}

再写一段计算伴随矩阵的代码

mat cutoff(mat A, int i, int j) {  //切割,划去第1行第i列
	mat B(A.size() - 1, vec(A.size() - 1));
	for(int c = 0; c < B.size(); c++)
		for(int r = 0; r < B.size(); r++)
			B[c][r] = A[c + (c >= i)][r + (r >= j)];
	return B;
}

double det(mat A) {
	if(A.size() == 1)
		return A[0][0];  //当A为一阶矩阵时,直接返回A中唯一的元素
	double ans = 0;
	for(int j = 0; j < A.size(); j++)
		ans += A[0][j] * det(cutoff(A, 0, j)) * (j % 2 ? -1 : 1);
	return ans;
}

mat company_mat(mat A) {
	mat B(A.size(), vec(A.size()));
	for(int i = 0; i < B.size(); i++)
		for(int j = 0; j < B.size(); j++)
			B[j][i] = det(cutoff(A, i, j)) * ((i + j) % 2 ? -1 : 1);  //伴随矩阵与原矩阵存在转置关系
	return B;
}

最后,把我原创的代码分享给大家

#include<iOStream>
#include<vector>
using namespace std;
typedef vector<double> vec;
typedef vector<vec> mat;

mat cutoff(mat A, int i, int j) {  //切割,划去第1行第i列
	mat B(A.size() - 1, vec(A.size() - 1));
	for(int c = 0; c < B.size(); c++)
		for(int r = 0; r < B.size(); r++)
			B[c][r] = A[c + (c >= i)][r + (r >= j)];
	return B;
}

double det(mat A) {
	if(A.size() == 1)
		return A[0][0];  //当A为一阶矩阵时,直接返回A中唯一的元素
	double ans = 0;
	for(int j = 0; j < A.size(); j++)
		ans += A[0][j] * det(cutoff(A, 0, j)) * (j % 2 ? -1 : 1);
	return ans;
}

mat company_mat(mat A) {
	mat B(A.size(), vec(A.size()));
	for(int i = 0; i < B.size(); i++)
		for(int j = 0; j < B.size(); j++)
			B[j][i] = det(cutoff(A, i, j)) * ((i + j) % 2 ? -1 : 1);
	return B;
}

void output(mat A) {
	cout << "......\n";
	for(int i = 0; i < A.size(); i++) {
		for(int j = 0; j < A[0].size(); j++)
			printf("%.2lf ", A[i][j]);
		cout << '\n';
	}
	cout << "......\n";
}

mat num_mul(mat A, double num) {
	mat B(A.size(), vec(A[0].size()));
	for(int i = 0; i < B.size(); i++)
		for(int j = 0; j < B[0].size(); j++)
			B[i][j] = A[i][j] * num;
	return B;
}

int main() {
	int n;
	scanf("%d", &n);  //输入阶数
	if(n == 0)
		return 0;
	mat A(n, vec(n));
	for(int i = 0; i < n; i++)
		for(int j = 0; j < n; j++)
			scanf("%lf", &A[i][j]);  //输入A各行各列的元素
	mat B = num_mul(company_mat(A), 1 / det(A));
	output(B);
	return 0;
}

以上就是C++利用伴随阵法实现矩阵求逆的详细内容,更多关于C++矩阵求逆的资料请关注编程网其它相关文章!

--结束END--

本文标题: C++利用伴随阵法实现矩阵求逆

本文链接: https://lsjlt.com/news/195576.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C++利用伴随阵法实现矩阵求逆
    先来一段百度百科上的搜索结果: 伴随阵法 定理:n阶矩阵为可逆的充分必要条件是A非奇异,且: 其中,是|A|中元素的代数余子式;矩阵 称为矩阵A的伴随矩阵,记作A*,于是有 用...
    99+
    2023-02-10
    C++伴随阵法实现矩阵求逆 C++实现矩阵求逆 C++矩阵求逆
  • java实现的n*n矩阵求值及求逆矩阵算法示例
    本文实例讲述了java实现的n*n矩阵求值及求逆矩阵算法。分享给大家供大家参考,具体如下:先来看看运行结果:java版的写出来了,用的跟c语言相同的算法,然后看看能不能以后加个框做成程序:import java.math.*;import ...
    99+
    2023-05-31
    java 矩阵 算法
  • 使用Python怎么求逆矩阵
    使用Python怎么求逆矩阵?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。import numpy as np kern...
    99+
    2023-06-08
  • C语言求逆矩阵案例详解
    一般求逆矩阵的方法有两种,伴随阵法和初等变换法。但是这两种方法都不太适合编程。伴随阵法的计算量大,初等变换法又难以编程实现。 适合编程的求逆矩阵的方法如下: 对可逆矩阵A...
    99+
    2024-04-02
  • 怎么在Java项目中实现一个求逆矩阵算法
    这篇文章给大家介绍怎么在Java项目中实现一个求逆矩阵算法,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。实现方法如下:package demo;public class MatrixInverse { public ...
    99+
    2023-05-31
    java 求逆矩阵算法 ava
  • 快速计算矩阵逆的方法 - Numpy实现
    Numpy是Python中著名的科学计算库,为处理大型多维数组和矩阵提供了丰富的功能和高效的计算方法。在数据科学和机器学习领域,矩阵的逆运算是一项常见的任务。在本文中,我将介绍使用Numpy库快速求解矩阵逆的方法,并提供具体的代...
    99+
    2024-01-24
    Numpy 求解 逆阵
  • python实现矩阵乘法
    矩阵相乘需要前面矩阵的行数与后面矩阵的列数相同方可相乘。第一步,先将前面矩阵的每一行分别与后面矩阵的列相乘,作为结果矩阵的行列;第二步算出结果即可。 # 2 3 3 4 # 1 2 ...
    99+
    2024-04-02
  • C++实现求动态矩阵各元素的和
    本文实例为大家分享了C++实现动态矩阵各元素的求和,供大家参考,具体内容如下 一、n阶方阵求和 功能:输入方阵维度,点击<Enter>,然后根据提示输入矩阵各阶元素,点击...
    99+
    2024-04-02
  • 使用python实现矩阵
    文章目录 矩阵__init____getitem____setitem__reshape__repr____add__ 与 __mul____matmul__LU分解转置利用LU分解求行列式 ...
    99+
    2023-10-25
    python 矩阵 算法 学习
  • C++实现LeetCode(73.矩阵赋零)
    [LeetCode] 73.Set Matrix Zeroes 矩阵赋零 Given a m x n matrix, if an elemen...
    99+
    2024-04-02
  • C++怎么实现矩阵赋零
    这篇文章主要介绍“C++怎么实现矩阵赋零”,在日常操作中,相信很多人在C++怎么实现矩阵赋零问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++怎么实现矩阵赋零”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-06-20
  • C++怎么实现螺旋矩阵
    本篇内容介绍了“C++怎么实现螺旋矩阵”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!螺旋矩阵Given a positive integer...
    99+
    2023-06-20
  • C++稀疏矩阵怎么实现
    这篇文章主要讲解了“C++稀疏矩阵怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++稀疏矩阵怎么实现”吧!稀疏矩阵矩阵与稀疏矩阵的定义Q:什么是矩阵A:数学上,一个矩阵由 m 行 ...
    99+
    2023-06-30
  • 详解使用Numpy库求解矩阵的逆的步骤
    利用Numpy库求解矩阵逆的步骤详解 概述:矩阵逆是线性代数中一个重要的概念,它是指对于一个方阵A,如果存在一个方阵B,使得A与B的乘积为单位矩阵(即AB=BA=I),则称B是A的逆矩阵,记为A^{-1}。矩阵逆的求解在很多实际...
    99+
    2024-01-24
    存在一个矩阵B
  • NumPy矩阵乘法的实现
    目录NumPy矩阵乘法逐元素矩阵乘法矩阵乘积运算矩阵点积NumPy矩阵乘法 矩阵乘法是将两个矩阵作为输入值,并将 A 矩阵的行与 B 矩阵的列对应位置相乘再相加,从而生成一个新矩阵,...
    99+
    2023-02-10
    NumPy矩阵乘法
  • C++矩阵运算的实现简单
    利用C++实现矩阵的构造,通过运算符的重载实现矩阵的乘法、加法等。并且实现矩阵形状的打印,矩阵的打印。 #include<iostream> #include<...
    99+
    2024-04-02
  • C++实现转置矩阵的循环
    目录前言一、思路分析二、代码实现1.转置矩阵函数2.调用函数实现转置矩阵总结前言 矩阵的转置主要考查我们对循环的使用,通过简单的循环结构,我们可以很方便的完成矩阵的转置。 一、思路...
    99+
    2024-04-02
  • NumPy如何实现矩阵乘法
    这篇文章主要介绍NumPy如何实现矩阵乘法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!NumPy 支持的几类矩阵乘法也很重要。元素级乘法你已看过了一些元素级乘法。你可以使用 multiply 函数或 * 运算符来实...
    99+
    2023-06-14
  • python如何实现矩阵乘法
    小编给大家分享一下python如何实现矩阵乘法,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!矩阵相乘需要前面矩阵的行数与后面矩阵的列数相同方可相乘。第一步,先将前面矩阵的每一行分别与后面矩阵的列相乘,作为结果矩阵的行列;第...
    99+
    2023-06-26
  • python中怎么利用numpy.matmul实现矩阵相乘
    这篇文章将为大家详细讲解有关python中怎么利用numpy.matmul实现矩阵相乘,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。说明该函数返回两个数组的矩阵乘积。虽然返回二维数组的正常乘...
    99+
    2023-06-20
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作