逆行列に分数が3つ以下しか現れない3次正方行列を自動生成する【Mathematica】

期末試験や演習問題の都合で、3次正方行列の逆行列を求める問題を作問するときに、適当に行列を書くと答えに分数が多くて汚い形になってしまいます。余因子行列を用いた解法ならいいのだけど、分数が多いと、掃き出し法でやろうとするとかなりやっかいです。Mathematicaで逆行列に分数が3つ以下しか現れない3次正方行列を自動生成するコードを書いたので、その覚書です。

For[i = 1, i <= 1000, i++,
  mat = ReplacePart[RandomInteger[{-5, 5}, {3, 3}], {1, 1} -> 1];
  inv = Inverse[mat];
  If[Count[inv, _Integer, 2] >= 6 && Det[mat] != 1 && Det[mat] != -1 &&
     Det[mat] != 0, Break[]];
  ];
Print[mat];
Print[inv]

RandomIntegerで行列をランダムに作成(数字が大きすぎると嫌なので成分は-5〜5まで)
条件に合うものをひたすらFor関数で回しながら探す仕組みです。

掃き出し法で計算しやすいように
RelpacePart[…, {1, 1} -> 1] で(1,1)成分が1になるように設定しています。

いったんランダムに行列を作成しているので、逆行列をもたないときに、「〜は特異行列です」というエラーコードがでることがありますが、そのあたりはご愛嬌で

コメント

タイトルとURLをコピーしました