C++で余因数展開を用いた行列式の計算
線形代数のレポート課題でこんな課題が……
4次元行列の行列式を”途中式付きで”、”余因数展開を用いて”求めよ。
手計算でよるのは面倒すぎる……そこで、C++によってパソコンで求めてくれるプログラムを作成!もちろん計算過程も出力します。
これで、パソコンが求めてくれた答えをレポート用紙に写すだけで良し!!!
ソースコード
#include<bits/stdc++.h> using namespace std; //cofactor expansion ver int det(vector<vector<int>> a){ int res=0; if(a.size() == 2){ res = a[0][0] * a[1][1] - a[0][1] * a[1][0]; for (auto &&i : a) { for (auto &&e : i) { cout << e << " "; } cout << endl; } cout << "=" << res << endl << endl; return res; } for(int i = 0; i < a.size(); i++){ vector<vector<int>> v = a; v.erase(v.begin()); for(int j = 0; j < v.size(); j++){ v[j].erase(v[j].begin() + i); } int op; if(i%2) op = -1; else op = 1; res += op * a[0][i] * det(v); } for (auto &&i : a) { for (auto &&e : i) { cout << e << " "; } cout << endl; } cout << "=" << res << endl << endl; return res; } int main(){ //N次行列 cout << "N>"; int n; cin >> n; //行列の中身を入力 cout << "Matrix>\n"; vector<vector<int>> v(n, vector<int>(n)); for(int i = 0; i < n; i++){ for(int j = 0; j < n; j++){ cin >> v[i][j]; } } cout << det(v) << endl; return 0; }
あとは、これをコンパイルして、行列の要素を入力するだけ。簡単でしょ。
こんなのを書くより、手計算で求めた方が速いって?キコエナイキコエナイ大事なのはロマンです?