徒然電脳

日々のプログラミング(とその他)忘備録 このサイトは独自研究のみに基づきます マサカリ歓迎しますというかよろしくお願いします

ぎょうれつのらんくをもとめるたのしいぷろぐらむ

たのしいぎょうれつ

C言語で行列のRankを求めたい人から依頼が。
行列?うっ・・・頭が・・・

一時間で書いたんで、時給発生しませんかねぇ・・・?

たのしいあるごりずむ

Rankを求めるのに、今回は次のような手順を考えました。

  1. 対角成分を見て、0であれば行の交換を試みる
  2. 対角成分と、0にしたい成分同士で行の成分を掛けあわせ、掃き出す
  3. すべてが0の行をカウント
  4. n-カウントした値 を返す

このような方法を掃き出し法(ガウスジョルダン法)と言います。

きたないこーど

1時間で書いたプログラムとはいえ、かなり汚いプログラムになっている気がします。
対角成分が0の時には行の交換を行っているが、もっとスマートに書けないものか。
3回もforをネストしているが、もっと簡単にならないか。

良い書き方があったら、是非教えていただきたいです。
もしくは、みなさんのRankプログラムを見たいです。