C++で行列の転置と固有値を計算する方法


まず、行列の転置方法を見てみましょう。以下のC++のコード例を使用して、行列の転置を行うことができます。

#include <iostream>
#include <vector>
using namespace std;
// 行列の転置関数
vector<vector<int>> transposeMatrix(const vector<vector<int>>& matrix) {
    int rows = matrix.size();
    int cols = matrix[0].size();

    vector<vector<int>> transposed(cols, vector<int>(rows));

    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            transposed[j][i] = matrix[i][j];
        }
    }

    return transposed;
}
int main() {
    // サンプル行列の定義
    vector<vector<int>> matrix = {{1, 2, 3},
                                  {4, 5, 6},
                                  {7, 8, 9}};

    // 行列の転置
    vector<vector<int>> transposedMatrix = transposeMatrix(matrix);

    // 転置した行列の表示
    for (const auto& row : transposedMatrix) {
        for (const auto& element : row) {
            cout << element << " ";
        }
        cout << endl;
    }

    return 0;
}

上記のコードでは、transposeMatrixという関数を定義しています。この関数は、与えられた行列を転置した行列を返します。transposeMatrix関数を使用すると、行列を転置することができます。

次に、行列の固有値を計算する方法について説明します。行列の固有値を計算するには、行列の特性方程式を解く必要があります。以下のC++のコード例を使用して、行列の固有値を計算することができます。

#include <iostream>
#include <eigen3/Eigen/Dense>
using namespace std;
using namespace Eigen;
int main() {
    // サンプル行列の定義
    Matrix3f matrix;
    matrix << 1, 2, 3,
              4, 5, 6,
              7, 8, 9;

    // 固有値計算
    EigenSolver<Matrix3f> eigensolver(matrix);

    if (eigensolver.info() != Success) {
        cout << "固有値の計算に失敗しました。" << endl;
        return 1;
    }
// 固有値の表示
    cout << "固有値:" << endl;
    cout << eigensolver.eigenvalues() << endl;

    return 0;
}

上記のコードでは、Eigenライブラリを使用して行列の固有値を計算しています。Matrix3fは3x3の行列を表す型であり、EigenSolverクラスを使用して固有値を計算しています。計算結果はeigensolver.eigenvalues()で取得できます。