c++ - 扩展此程序以计算最大 10x10 矩阵的逆矩阵的最简单方法是什么?

标签 c++ c++11 matrix matrix-inverse

我下面的程序只找到一个 3x3 矩阵的逆矩阵,但我想知道是否有一种简单的方法可以扩展它以找到用户输入的最大 10x10 矩阵的逆矩阵。谢谢

#include<iostream>
using namespace std;

int main()
{
    int mat[3][3], i, j;
    float determinant = 0;

    cout<<"Enter elements of the matrix:"<<endl;
    for(i = 0; i < 3; i++)
        for(j = 0; j < 3; j++)
           cin>>mat[i][j];


    //finding determinant
    for(i = 0; i < 3; i++)
        determinant = determinant + (mat[0][i] * (mat[1][(i+1)%3] * mat[2][(i+2)%3] - mat[1][(i+2)%3] * mat[2][(i+1)%3]));


    cout<<"\n\nInverse of matrix is: "<<endl;
    for(i = 0; i < 3; i++){
        for(j = 0; j < 3; j++)
            cout<<((mat[(j+1)%3][(i+1)%3] * mat[(j+2)%3][(i+2)%3]) - (mat[(j+1)%3][(i+2)%3] * mat[(j+2)%3][(i+1)%3]))/ determinant<<"\t";

        cout<<endl;
    }

    return 0;
}

最佳答案

或者您实际上是在问“我将如何构建它”以支持高达 10x10 的矩阵?您可以自己编写一个类,该类由维度构成,在内部调整 vector 大小,并在外部发布数组运算符方法作为外部数组维度。

class SquareMatrix
{
  std::vector<int> storage;
  unsigned int innerSize;
  SquareMatrix(unsigned int innerSize):
    innerSize(innerSize),
    storage(innerSize*innerSize,0)
  {}
  int* operator[](size_t index)
  {
    /* please do some error checking */
    return storage.data()+index*innerSize;
  }
};

您可以在输入维度后声明该矩阵的一个实例,然后像使用 3x3 矩阵一样使用它,但是您需要更多外部脚手架来计算尺寸并确保您不会t 超出尺寸。

理想情况下,如果数组索引运算符返回另一个包含指向内部数组的指针和最大维度的对象会更好,这样它的数组运算符可以再次进行错误检查。

正确的面向对象的答案是你的反函数应该是你的矩阵类的成员。

是的,您将不得不进行数学计算以处理更多的列和行。

关于c++ - 扩展此程序以计算最大 10x10 矩阵的逆矩阵的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48981167/

相关文章:

c++ - 在没有 malloc 和 free 的情况下存储和回收堆分配的可变大小对象

matlab - 如何在 MATLAB 中删除矩阵的对角线元素?

c++ - 非相关语法错误 - SURF 算法

c++ - Vulkan 中绘制调用之间的同步

c++ - 如何将类中的静态常量结构用作真正的常量 - 即数组大小

c++ - 如何在 C++ 中查找字符串中出现的字符串?

c++ - 当作为 Function 的参数传递给线程时,为什么仿函数的 dtor 调用两次(多次)?

c++ - 卡在字符串库的使用上

image - 将图像数组 reshape 为列向量,对每个图像逐行排序

c# - 通过与任何其他矩阵具有最大 N 相似性的矩阵生成所有路径