ここから本文です

連立方程式において、係数がゼロの場合に、加減法では解けませんか。教えて下さい。

pet********さん

2013/3/1820:13:15

連立方程式において、係数がゼロの場合に、加減法では解けませんか。教えて下さい。

自作パソコンプログラムの加減法で、解く場合に、ゼロでの割算で止まる場合と、計算はできても不正解の場合があります。
またゼロの代用で、0.000000001のような数を使うと、元の数によりほどほどの精度で解が正しい場合がありますが、元の数が10程度以上では、大きく違ってしまいます。

加減法での、エラー回避の方法を教えて下さい。

また、代入法なら、必ず解に至れるでしょうか。

プログラムでの、係数がゼロの場合の、良く知られたの解法のアルゴリズムについて、教えて下さい。

補足aerile_reさん 有難うございます。
教えて下さった、リンク先でのソースは、ほとんど理解できる知識がないのですが、拙い私の感じでは、どちらもゼロの場合にプログラムが中断することを避けているように思えます。
ゼロの場合に、解に至れる別のルートを用意しているようには見えないのですが、違っているでしょうか。
Tiny Basic等の優れたビギナーズ言語に不満を感じていないので、C++等の言語の学習に進み難い者の感じです。

閲覧数:
503
回答数:
1
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

aer********さん

2013/3/2120:44:37

> 加減法での、エラー回避の方法を教えて下さい。
係数が0の場合は場合分けすれば良いと思います

> また、代入法なら、必ず解に至れるでしょうか。
実装方法によりますが代入法でも場合分けが必要になったりすると思います

> プログラムでの、係数がゼロの場合の、良く知られたの解法のアルゴリズムについて、教えて下さい。
ガウスジョルダン法という名前のが良く知られていると思います
http://www5d.biglobe.ne.jp/~tomoya03/shtml/algorithm/GaussJ.htm
に実装例がありましたが ここでも場合分けしています

クラメルの公式を使う方法だと場合分けしなくて良いと思いますが
計算量は増える気がします
http://searial.web.fc2.com/tools/renritu.html
はクラメルの公式を使っています。「ソースを見る」から一応コードが見れます。
=====================================

補足を読み、回答を追記しました。

1番目のURLは
「良く知られたの解法のアルゴリズムについて、教えて下さい。」
という文章に対する回答です。
URL先のソースを見ると係数が0だったら
「If Abs(a) < 0.0001 GaussJordan = False: Exit Function」
という処理をしている所が有るので、0の場合はあきらめるようです。

---------------
私が考えてみた所 例えば以下のような場合は
0a + 3b + 4c = -2
3a + 2b + 0c = 1
2a + 1b + 2c = 3
1番目と2番目の式を入れ替えれば良いのではないでしょうかと思います。
aの係数が0でない式を探してそれを1番目に持ってくれば良いと思います。
aの係数が全部0だったらaを求められないのでその連立方程式は正則でないです。

---------------
2番目のURLではクラメルの公式を使っています。
クラメルの公式は
http://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%A9%E3%83%A1%E3%83%AB%E...
などにも書いてあります。
det(A)と書かれた「行列式」を使って計算します。
行列式を知らない場合はまずそれを分かる必要が有ってちょっと大変です。

この方法では(解が不定・不能でなければ)必ず計算できるはずです。

質問した人からのコメント

2013/3/22 10:46:48

aerile_reさん 有難うございました。
いくつかのアルゴリズムで分担すれば、解けると感じています。
勉強します。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる