最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++利用伴隨陣法實(shí)現(xiàn)矩陣求逆

 更新時(shí)間:2023年02月10日 14:45:13   作者:convective rain  
這篇文章主要為大家詳細(xì)介紹了C++如何利用伴隨陣法實(shí)現(xiàn)矩陣求逆,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)和借鑒價(jià)值,需要的可以參考一下

先來一段百度百科上的搜索結(jié)果:

伴隨陣法

定理:n階矩陣為可逆的充分必要條件是A非奇異,且:

其中,是|A|中元素的代數(shù)余子式;矩陣

稱為矩陣A的伴隨矩陣,記作A*,于是有

用此方法求逆矩陣,對(duì)于小型矩陣,特別是二階方陣求逆既方便、快陣,又有規(guī)律可循。因?yàn)槎A可逆矩陣的伴隨矩陣,只需要將主對(duì)角線元素的位置互換,次對(duì)角線的元素變號(hào)即可。

若可逆矩陣是二階或二階以上矩陣,在求逆矩陣的過程中,需要求9個(gè)或9個(gè)以上代數(shù)余子式,還要計(jì)算一個(gè)三階或三階以上行列式,工作量大且中途難免出現(xiàn)符號(hào)及計(jì)算的差錯(cuò)。對(duì)于求出的逆炬陣是否正確,一般要通過來檢驗(yàn)。一旦發(fā)現(xiàn)錯(cuò)誤,必須對(duì)每一計(jì)算逐一排查。

下面我們來設(shè)計(jì)一下伴隨陣法矩陣求逆的C++代碼。

首先,需要自定義一個(gè)矩陣類型

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

然后,設(shè)計(jì)矩陣數(shù)乘的代碼

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;
}

再寫一段計(jì)算伴隨矩陣的代碼

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];  //當(dāng)A為一階矩陣時(shí),直接返回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);  //伴隨矩陣與原矩陣存在轉(zhuǎn)置關(guān)系
	return B;
}

最后,把我原創(chuàng)的代碼分享給大家

#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];  //當(dāng)A為一階矩陣時(shí),直接返回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);  //輸入階數(shù)
	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++利用伴隨陣法實(shí)現(xiàn)矩陣求逆的詳細(xì)內(nèi)容,更多關(guān)于C++矩陣求逆的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • QT5交叉編譯入門級(jí)教程(arm64、mips64)

    QT5交叉編譯入門級(jí)教程(arm64、mips64)

    交叉編譯就是在當(dāng)前系統(tǒng)平臺(tái)上,開發(fā)編譯運(yùn)行于其它平臺(tái)的程序,比如本文硬件環(huán)境是x86平臺(tái),但是編譯出來的程序是在arm64架構(gòu)、mips64等架構(gòu)上運(yùn)行,本文給大家分享QT5交叉編譯入門級(jí)教程(arm64、mips64),感興趣的朋友一起看看吧
    2023-11-11
  • 深入理解C++中的文件操作

    深入理解C++中的文件操作

    這篇文章主要給大家深入的介紹了C++中的文件操作,文件的操作對(duì)每個(gè)程序員來說都是很重要的,本文的介紹的很詳細(xì),有需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-01-01
  • c++ 深入理解歸并排序的用法

    c++ 深入理解歸并排序的用法

    歸并排序是典型分治思想的代表——首先把原問題分解為兩個(gè)或多個(gè)子問題,然后求解子問題的解,最后使用子問題的解來構(gòu)造出原問題的解
    2022-03-03
  • 如何用C++制作LeetCode刷題小技巧-錯(cuò)題記錄本

    如何用C++制作LeetCode刷題小技巧-錯(cuò)題記錄本

    這篇文章主要介紹了如何用C++制作LeetCode刷題小技巧-錯(cuò)題記錄本的方法,需要的朋友可以參考下
    2021-04-04
  • C++的類型轉(zhuǎn)換詳細(xì)介紹

    C++的類型轉(zhuǎn)換詳細(xì)介紹

    這篇文章主要介紹了C++的類型轉(zhuǎn)換詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • C語(yǔ)言實(shí)現(xiàn)魔方陣算法(幻方陣 奇魔方 單偶魔方實(shí)現(xiàn))

    C語(yǔ)言實(shí)現(xiàn)魔方陣算法(幻方陣 奇魔方 單偶魔方實(shí)現(xiàn))

    魔方陣是指由1,2,3……n2填充的,每一行、每一列、對(duì)角線之和均相等的方陣,階數(shù)n = 3,4,5…。魔方陣也稱為幻方陣,看下面的實(shí)現(xiàn)方法吧
    2013-11-11
  • C語(yǔ)言實(shí)現(xiàn)雙人貪吃蛇游戲?qū)嵗a

    C語(yǔ)言實(shí)現(xiàn)雙人貪吃蛇游戲?qū)嵗a

    大家好,本篇文章主要講的是C語(yǔ)言實(shí)現(xiàn)雙人貪吃蛇游戲?qū)嵗a,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • C++ 函數(shù)重載詳情介紹

    C++ 函數(shù)重載詳情介紹

    這篇文章主要介紹了C++ 函數(shù)重載詳情,函數(shù)重載還有一個(gè)別名叫函數(shù)多態(tài),函數(shù)多態(tài)是C++在C語(yǔ)言基礎(chǔ)上的新特性,它可以讓我們使用多個(gè)同名函數(shù),下面來看看文章具體內(nèi)容的介紹
    2021-11-11
  • C++超詳細(xì)講解模板的使用

    C++超詳細(xì)講解模板的使用

    這篇文章主要介紹了C++中模板(Template)的詳解及其作用介紹,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • C++ 詳細(xì)講解stack與queue的模擬實(shí)現(xiàn)

    C++ 詳細(xì)講解stack與queue的模擬實(shí)現(xiàn)

    C++ Stack(堆棧) 是一個(gè)容器類的改編,為程序員提供了堆棧的全部功能,也就是說實(shí)現(xiàn)了一個(gè)先進(jìn)后出(FILO)的數(shù)據(jù)結(jié)構(gòu),許多程序都使用了 queue 容器。queue 容器可以用來表示超市的結(jié)賬隊(duì)列或服務(wù)器上等待執(zhí)行的數(shù)據(jù)庫(kù)事務(wù)隊(duì)列
    2022-04-04

最新評(píng)論

平武县| 宁南县| 五华县| 高青县| 瓮安县| 称多县| 张家川| 蚌埠市| 宁武县| 新绛县| 包头市| 桃园县| 寻甸| 南和县| 西吉县| 永胜县| 中山市| 三明市| 中宁县| 文登市| 大兴区| 望谟县| 江门市| 巴彦县| 固安县| 县级市| 冷水江市| 镇平县| 肇州县| 久治县| 东阿县| 吉木萨尔县| 正安县| 江源县| 江津市| 栾城县| 常德市| 鹿泉市| 泰和县| 玛曲县| 阳山县|