c++ - 矩阵的逆
问题描述
直到现在,我开发了一个可以打印用户输入的矩阵的代码。
并尝试在数学上计算倒数,但我无法收到正确的结果。它通过函数获取行列式,然后逐步获取与旧矩阵相反的新矩阵的每个新元素
我试着简单地做到这一点这是我的代码我想要一个更好的算法来完成这个任务
#include <iostream>
#include <stdlib.h>
using namespace std;
float Det (int arr [3][3] )
{
int res = arr[0][0]*(arr[1][1]*arr[2][2]-arr[2][1]*arr[1][2])-arr[0][1]*(arr[1][0]*arr[2][2]-arr[1][2]*arr[2][0])+arr[0][2]*(arr[1][0]*arr[2][1]-arr[1][1]*arr[2][0]);
return res ;
}
int main()
{
int arr [3][3] ={{0,0,0},{0,0,0},{0,0,0}};
float inv [3][3]={{0,0,0},{0,0,0},{0,0,0}};
for(unsigned i = 0 ; i<3 ;i++)
{
for(unsigned j= 0 ;j<3 ;j++)
{
cout << "Enter The Value Of The Element < " <<i+1<<" , "<<j+1<<" > :" ;
cin >> arr [i][j] ;
}
}
system("cls") ;
float det = Det(arr) ;
for(int i = 0 ; i < 3 ;i++)
{
for(unsigned j = 0 ; j< 3 ; j++)
{
unsigned m [2]={i+1,i+2} ;
unsigned n [2]={j+1,j+2} ;
for(unsigned k = 0 ; k< 2 ;k++)
{
if(m[k]>2)
{
m[k]=0;
swap(m[0],m[1]);
}
if(n[k]>2)
{
n[k]=0;
swap(n[0],n[1]) ;
}
}
inv [i][j] = arr[m[0]][n[0]]*arr[m[1]][n[1]]-arr[m[0]][n[1]]*arr[m[1]][n[0]] ;
if((i+j)%2!=0)
{
inv [i] [j] = -inv[i][j] ;
}
inv [i] [j] = (1/det) * inv[i] [j];
}
}
swap(inv[0][1],inv[1][0]);
swap(inv[2][1],inv[1][2]);
swap(inv[0][2],inv[2][0]);
cout << " Your Matrix is "<<endl ;
for(unsigned i = 0 ; i<3 ;i++)
{
cout<< " " ;
for(unsigned j= 0 ;j<3 ;j++)
{
cout<< arr [i][j]<< " " ;
}
cout <<endl<<endl ;
}
cout<< "DET = "<<det <<endl ;
cout << " Your Inverse is "<<endl ;
for(unsigned i = 0 ; i<3 ;i++)
{
cout<< " " ;
for(unsigned j= 0 ;j<3 ;j++)
{
cout<< inv [i][j]<< " " ;
}
cout <<endl<<endl ;
}
}
解决方案
推荐阅读
- python - 在 Python 中生成的单词
- ruby-on-rails - Rails - 如何将不兼容的语句与 OR (Rails 5) 结合使用
- swift - 使用枚举创建自定义视图
- r - 在 r 中合并两个大型数据集时的内存分配问题
- angular - 在服务应用程序时观看外部本地库
- android - 迁移到 androidX 后出现运行时错误
- python - Cythonize 在不同包下具有相同名称的 python 模块
- visual-studio - MSBuild 错误 - 程序不包含适合入口点的静态“Main”方法
- c++ - Boost.beast http::read() 返回 `bad version`
- react-native - React Native /查找并应用平面列表背景颜色的第n个孩子?