ゼミが終わって寝て起きたら「3元1次連立方程式の解を求めるプログラムを実装してください!C言語で!」という地獄のようなDMが来てました。DM内では全て係数が既知である場合の解を求めよというのだったので、C言語滅べと思いながら実装しました。
しかし、係数がすべて既知のコードを書いても一切面白くなかったので、係数が任意の場合に解を求めるコードを書きました。流石にこっちはC++で書きました。
連立方程式の解を求める方法は色々あります。掃き出し法だったり、余因子を用いて逆行列を出したり。今回は3元1次連立方程式なので、Cramerの公式を用いました。一番実装がわかりやすいので。
書いたコードは次の通り。
ぶっちゃけ愚直に実装しただけなので、もっとエレガントに実装できそうです。
vectorのコピーをするときは、operator=が使えますが、43行目にcopy関数を使っています。バグってたときにここだろと思って変えた部分を戻し忘れただけなのですが、vectorのコピーもいろいろな方法があるようです。
コードの確認は、適当にサンプルケースを作って確認しました。多分合ってるはず。(ケース漏れありそう)