n次正方行列の逆行列をTeX形式で出力するプログラムを作成してみました。
言語はC++です。

  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4.  
  5. using namespace std;
  6.  
  7. void make_permutation(vector<int>& a, int d, int k, vector<int> ids[])
  8. {
  9.         int n = a.size();
  10.         if(== n){
  11.                 for(int j=0; j<n; ++j)
  12.                         ids[% 2].push_back(a[j] + 1);
  13.         }
  14.         else{
  15.                 for(int i=d; i<n; ++i){
  16.                         swap(a[i], a[d]);
  17.                         make_permutation(a, d + 1, k + (!= d), ids);
  18.                         swap(a[i], a[d]);
  19.                 }
  20.         }
  21. }
  22.  
  23. void expand_determinant(int n, int i, int j, const char* str, ostream& out)
  24. {
  25.         vector<int> a(n);
  26.         for(int k=0; k<n; ++k)
  27.                 a[k] = k + (<= k);
  28.  
  29.         vector<int> ids[2];
  30.         make_permutation(a, 00, ids);
  31.        
  32.         bool sign = (+ j) % 2;
  33.         for(int k=0; k<2; ++k){
  34.                 int id = (sign + k) % 2;
  35.                 for(int l=0; l<static_cast<int>(ids[id].size())/n; ++l){
  36.                         if(|| l)
  37.                                 out << (? "-" : "+");
  38.                         for(int m=0; m<n; ++m)
  39.                                 out << str << "_{{" << (+ (<= m) + 1) << "}{" <<ids[id][n*l+m] << "}}";
  40.                 }
  41.         }
  42. }
  43.  
  44. int main()
  45. {
  46.         int n;
  47.         cin >> n;
  48.        
  49.         cout << "\\frac{1}{";
  50.         expand_determinant(n, n, n, "a"cout);
  51.         cout << "}";
  52.        
  53.         if(2 <= n){
  54.                 cout << "\\begin{pmatrix}";
  55.                 for(int i=0; i<n; ++i){
  56.                         cout << (? "\\\\" : "");
  57.                         for(int j=0; j<n; ++j){
  58.                                 cout << (? "&" : "");
  59.                                 expand_determinant(n-1, j, i, "a"cout);
  60.                         }
  61.                 }
  62.                 cout << "\\end{pmatrix}";
  63.         }
  64.        
  65.         cout << endl;
  66.         return 0;
  67. }


試しに、幾つか出力させてみたのを貼りつけてみました。

1次正方行列
A^{-1}=\frac{1}{a_{{1}{1}}}

2次正方行列
A^{-1}=\frac{1}{a_{{1}{1}}a_{{2}{2}}-a_{{1}{2}}a_{{2}{1}}}\begin{pmatrix}a_{{2}{2}}&-a_
{{1}{2}}\\-a_{{2}{1}}&a_{{1}{1}}\end{pmatrix}

3次正方行列
A^{-1}=\frac{1}{a_{{1}{1}}a_{{2}{2}}a_{{3}{3}}+a_{{1}{2}}a_{{2}{3}}a_{{3}{1}}+a_{{1}{3}
}a_{{2}{1}}a_{{3}{2}}-a_{{1}{1}}a_{{2}{3}}a_{{3}{2}}-a_{{1}{2}}a_{{2}{1}}a_{{3}{
3}}-a_{{1}{3}}a_{{2}{2}}a_{{3}{1}}}\begin{pmatrix}a_{{2}{2}}a_{{3}{3}}-a_{{2}{3}
}a_{{3}{2}}&a_{{1}{3}}a_{{3}{2}}-a_{{1}{2}}a_{{3}{3}}&a_{{1}{2}}a_{{2}{3}}-a_{{1
}{3}}a_{{2}{2}}\\a_{{2}{3}}a_{{3}{1}}-a_{{2}{1}}a_{{3}{3}}&a_{{1}{1}}a_{{3}{3}}-
a_{{1}{3}}a_{{3}{1}}&a_{{1}{3}}a_{{2}{1}}-a_{{1}{1}}a_{{2}{3}}\\a_{{2}{1}}a_{{3}
{2}}-a_{{2}{2}}a_{{3}{1}}&a_{{1}{2}}a_{{3}{1}}-a_{{1}{1}}a_{{3}{2}}&a_{{1}{1}}a_
{{2}{2}}-a_{{1}{2}}a_{{2}{1}}\end{pmatrix}
4次正方行列
A^{-1}=\frac{1}{a_{{1}{1}}a_{{2}{2}}a_{{3}{3}}a_{{4}{4}}+a_{{1}{1}}a_{{2}{3}}a_{{3}{4}}
a_{{4}{2}}+a_{{1}{1}}a_{{2}{4}}a_{{3}{2}}a_{{4}{3}}+a_{{1}{2}}a_{{2}{1}}a_{{3}{4
}}a_{{4}{3}}+a_{{1}{2}}a_{{2}{3}}a_{{3}{1}}a_{{4}{4}}+a_{{1}{2}}a_{{2}{4}}a_{{3}
{3}}a_{{4}{1}}+a_{{1}{3}}a_{{2}{2}}a_{{3}{4}}a_{{4}{1}}+a_{{1}{3}}a_{{2}{1}}a_{{
3}{2}}a_{{4}{4}}+a_{{1}{3}}a_{{2}{4}}a_{{3}{1}}a_{{4}{2}}+a_{{1}{4}}a_{{2}{2}}a_
{{3}{1}}a_{{4}{3}}+a_{{1}{4}}a_{{2}{3}}a_{{3}{2}}a_{{4}{1}}+a_{{1}{4}}a_{{2}{1}}
a_{{3}{3}}a_{{4}{2}}-a_{{1}{1}}a_{{2}{2}}a_{{3}{4}}a_{{4}{3}}-a_{{1}{1}}a_{{2}{3
}}a_{{3}{2}}a_{{4}{4}}-a_{{1}{1}}a_{{2}{4}}a_{{3}{3}}a_{{4}{2}}-a_{{1}{2}}a_{{2}
{1}}a_{{3}{3}}a_{{4}{4}}-a_{{1}{2}}a_{{2}{3}}a_{{3}{4}}a_{{4}{1}}-a_{{1}{2}}a_{{
2}{4}}a_{{3}{1}}a_{{4}{3}}-a_{{1}{3}}a_{{2}{2}}a_{{3}{1}}a_{{4}{4}}-a_{{1}{3}}a_
{{2}{1}}a_{{3}{4}}a_{{4}{2}}-a_{{1}{3}}a_{{2}{4}}a_{{3}{2}}a_{{4}{1}}-a_{{1}{4}}
a_{{2}{2}}a_{{3}{3}}a_{{4}{1}}-a_{{1}{4}}a_{{2}{3}}a_{{3}{1}}a_{{4}{2}}-a_{{1}{4
}}a_{{2}{1}}a_{{3}{2}}a_{{4}{3}}}\begin{pmatrix}a_{{2}{2}}a_{{3}{3}}a_{{4}{4}}+a
_{{2}{3}}a_{{3}{4}}a_{{4}{2}}+a_{{2}{4}}a_{{3}{2}}a_{{4}{3}}-a_{{2}{2}}a_{{3}{4}
}a_{{4}{3}}-a_{{2}{3}}a_{{3}{2}}a_{{4}{4}}-a_{{2}{4}}a_{{3}{3}}a_{{4}{2}}&a_{{1}
{2}}a_{{3}{4}}a_{{4}{3}}+a_{{1}{3}}a_{{3}{2}}a_{{4}{4}}+a_{{1}{4}}a_{{3}{3}}a_{{
4}{2}}-a_{{1}{2}}a_{{3}{3}}a_{{4}{4}}-a_{{1}{3}}a_{{3}{4}}a_{{4}{2}}-a_{{1}{4}}a
_{{3}{2}}a_{{4}{3}}&a_{{1}{2}}a_{{2}{3}}a_{{4}{4}}+a_{{1}{3}}a_{{2}{4}}a_{{4}{2}
}+a_{{1}{4}}a_{{2}{2}}a_{{4}{3}}-a_{{1}{2}}a_{{2}{4}}a_{{4}{3}}-a_{{1}{3}}a_{{2}
{2}}a_{{4}{4}}-a_{{1}{4}}a_{{2}{3}}a_{{4}{2}}&a_{{1}{2}}a_{{2}{4}}a_{{3}{3}}+a_{
{1}{3}}a_{{2}{2}}a_{{3}{4}}+a_{{1}{4}}a_{{2}{3}}a_{{3}{2}}-a_{{1}{2}}a_{{2}{3}}a
_{{3}{4}}-a_{{1}{3}}a_{{2}{4}}a_{{3}{2}}-a_{{1}{4}}a_{{2}{2}}a_{{3}{3}}\\a_{{2}{
1}}a_{{3}{4}}a_{{4}{3}}+a_{{2}{3}}a_{{3}{1}}a_{{4}{4}}+a_{{2}{4}}a_{{3}{3}}a_{{4
}{1}}-a_{{2}{1}}a_{{3}{3}}a_{{4}{4}}-a_{{2}{3}}a_{{3}{4}}a_{{4}{1}}-a_{{2}{4}}a_
{{3}{1}}a_{{4}{3}}&a_{{1}{1}}a_{{3}{3}}a_{{4}{4}}+a_{{1}{3}}a_{{3}{4}}a_{{4}{1}}
+a_{{1}{4}}a_{{3}{1}}a_{{4}{3}}-a_{{1}{1}}a_{{3}{4}}a_{{4}{3}}-a_{{1}{3}}a_{{3}{
1}}a_{{4}{4}}-a_{{1}{4}}a_{{3}{3}}a_{{4}{1}}&a_{{1}{1}}a_{{2}{4}}a_{{4}{3}}+a_{{
1}{3}}a_{{2}{1}}a_{{4}{4}}+a_{{1}{4}}a_{{2}{3}}a_{{4}{1}}-a_{{1}{1}}a_{{2}{3}}a_
{{4}{4}}-a_{{1}{3}}a_{{2}{4}}a_{{4}{1}}-a_{{1}{4}}a_{{2}{1}}a_{{4}{3}}&a_{{1}{1}
}a_{{2}{3}}a_{{3}{4}}+a_{{1}{3}}a_{{2}{4}}a_{{3}{1}}+a_{{1}{4}}a_{{2}{1}}a_{{3}{
3}}-a_{{1}{1}}a_{{2}{4}}a_{{3}{3}}-a_{{1}{3}}a_{{2}{1}}a_{{3}{4}}-a_{{1}{4}}a_{{
2}{3}}a_{{3}{1}}\\a_{{2}{1}}a_{{3}{2}}a_{{4}{4}}+a_{{2}{2}}a_{{3}{4}}a_{{4}{1}}+
a_{{2}{4}}a_{{3}{1}}a_{{4}{2}}-a_{{2}{1}}a_{{3}{4}}a_{{4}{2}}-a_{{2}{2}}a_{{3}{1
}}a_{{4}{4}}-a_{{2}{4}}a_{{3}{2}}a_{{4}{1}}&a_{{1}{1}}a_{{3}{4}}a_{{4}{2}}+a_{{1
}{2}}a_{{3}{1}}a_{{4}{4}}+a_{{1}{4}}a_{{3}{2}}a_{{4}{1}}-a_{{1}{1}}a_{{3}{2}}a_{
{4}{4}}-a_{{1}{2}}a_{{3}{4}}a_{{4}{1}}-a_{{1}{4}}a_{{3}{1}}a_{{4}{2}}&a_{{1}{1}}
a_{{2}{2}}a_{{4}{4}}+a_{{1}{2}}a_{{2}{4}}a_{{4}{1}}+a_{{1}{4}}a_{{2}{1}}a_{{4}{2
}}-a_{{1}{1}}a_{{2}{4}}a_{{4}{2}}-a_{{1}{2}}a_{{2}{1}}a_{{4}{4}}-a_{{1}{4}}a_{{2
}{2}}a_{{4}{1}}&a_{{1}{1}}a_{{2}{4}}a_{{3}{2}}+a_{{1}{2}}a_{{2}{1}}a_{{3}{4}}+a_
{{1}{4}}a_{{2}{2}}a_{{3}{1}}-a_{{1}{1}}a_{{2}{2}}a_{{3}{4}}-a_{{1}{2}}a_{{2}{4}}
a_{{3}{1}}-a_{{1}{4}}a_{{2}{1}}a_{{3}{2}}\\a_{{2}{1}}a_{{3}{3}}a_{{4}{2}}+a_{{2}
{2}}a_{{3}{1}}a_{{4}{3}}+a_{{2}{3}}a_{{3}{2}}a_{{4}{1}}-a_{{2}{1}}a_{{3}{2}}a_{{
4}{3}}-a_{{2}{2}}a_{{3}{3}}a_{{4}{1}}-a_{{2}{3}}a_{{3}{1}}a_{{4}{2}}&a_{{1}{1}}a
_{{3}{2}}a_{{4}{3}}+a_{{1}{2}}a_{{3}{3}}a_{{4}{1}}+a_{{1}{3}}a_{{3}{1}}a_{{4}{2}
}-a_{{1}{1}}a_{{3}{3}}a_{{4}{2}}-a_{{1}{2}}a_{{3}{1}}a_{{4}{3}}-a_{{1}{3}}a_{{3}
{2}}a_{{4}{1}}&a_{{1}{1}}a_{{2}{3}}a_{{4}{2}}+a_{{1}{2}}a_{{2}{1}}a_{{4}{3}}+a_{
{1}{3}}a_{{2}{2}}a_{{4}{1}}-a_{{1}{1}}a_{{2}{2}}a_{{4}{3}}-a_{{1}{2}}a_{{2}{3}}a
_{{4}{1}}-a_{{1}{3}}a_{{2}{1}}a_{{4}{2}}&a_{{1}{1}}a_{{2}{2}}a_{{3}{3}}+a_{{1}{2
}}a_{{2}{3}}a_{{3}{1}}+a_{{1}{3}}a_{{2}{1}}a_{{3}{2}}-a_{{1}{1}}a_{{2}{3}}a_{{3}
{2}}-a_{{1}{2}}a_{{2}{1}}a_{{3}{3}}-a_{{1}{3}}a_{{2}{2}}a_{{3}{1}}\end{pmatrix}
2011-06-07 00:22:11
このエントリーをはてなブックマークに追加