• ベストアンサー

連立一次方程式における正のみの解

連立一次方程式を掃き出し法で解いているのですが、負の値が出てしまって困っています。 物理的には正の値しか出ないはずのものを計算しているので。 解に正の値しか持たなくさせる方法はないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • ibm_111
  • ベストアンサー率59% (74/124)
回答No.5

要するに、式(条件)の数が変数より多い場合に もっともらしい解を出力したいという事でよいですか? 以前、この問題を調べた時に、共役勾配法が最適という結論に達しました。 https://www.google.co.jp/search?client=ubuntu&channel=fs&q=%E5%A4%89%E6%95%B0%E3%81%AE%E6%95%B0%E3%80%80%E5%BC%8F%E3%81%AE%E6%95%B0%E3%80%80%E9%80%A3%E7%AB%8B%E4%B8%80%E6%AC%A1%E6%96%B9%E7%A8%8B%E5%BC%8F%E3%80%80&ie=utf-8&oe=utf-8&hl=ja#channel=fs&hl=ja&q=%E5%85%B1%E5%BD%B9%E5%8B%BE%E9%85%8D%E6%B3%95%E3%80%80%E9%80%A3%E7%AB%8B%E4%B8%80%E6%AC%A1%E6%96%B9%E7%A8%8B%E5%BC%8F&safe=off ただし、共役勾配法はいろいろと拡張があり、 それぞれに得手不得手があるようなので、 自分の問題に応用できるかどうか調べてから利用することをお勧めします。

wrusagi
質問者

お礼

ありがとうございます。 私も共役勾配法に行き着いたのでさっそく実装して試してみました。 逆問題になっているので、良い評価関数を考えるのが難しく、まだ満足行く解にはなっていませんが。

その他の回答 (5)

  • ibm_111
  • ベストアンサー率59% (74/124)
回答No.6

間違えました。 式の数=12 変数の数=1000 だから、変数のほうが多いんですね。 そうしますと、解はパラメータ表示することになって 「解に正の値しか持たなくさせる」という目的は そのパラメータ次第ということになりますが。 それとも、どんなパラメータを持ってきても正になりそうにないので 困っているということですか?

  • bgm38489
  • ベストアンサー率29% (633/2168)
回答No.4

問題を示してくれないと、答えようがありません。物理的に正の値しか出ないはずの問題を解いてるのであれば、問題・解き方が間違っているか、「この条件からは物理的にありえない負の値が答えとなってしまう。よって、解なし」と言うのが答えかもしれない。

wrusagi
質問者

お礼

修正 >ここからどうにかしてもっともらしいa1~a12を得たいのです。 ここからどうにかしてもっともらしいa1~a1000を得たいのです。

wrusagi
質問者

補足

a1・f1(1) + a2・f1(2) + … + a1000・f1(1000) = b1 a1・f2(1) + a2・f2(2) + … + a1000・f2(1000) = b2 ・ ・ ・ a1・f12(1) + a2・f12(2) + … + a1000・f12(1000) = b12 という式があり、 未知数 a1 ~ a1000 定数 f1() ~ f12()、 b1~b12(測定値、誤差を含む) となっています。 ここからどうにかしてもっともらしいa1~a12を得たいのです。 今はとりあえず1000を12で割ったところで区切って、A1 ~ A12を定義し、 A1・f1(0 ~ 83) + A2・f1(83 ~ 166) + … + A12・f1(917 ~ 1000) = b1 A1・f2(0 ~ 83) + A2・f2(83 ~ 166) + … + A12・f2(917 ~ 1000) = b2 ・ ・ ・ A1・f12(0 ~ 83) + A2・f12(83 ~ 166) + … + A12・f12(917 ~ 1000) = b12 として式の数と未知数を一致させて連立方程式で解いてみたのですが、負の値は出るし(数学的にはただしのでしょうが)無理やり当てはめたような結果が出てしまって散々でした。 何か良い方法ないでしょうか?

noname#190065
noname#190065
回答No.3

 ちょっと反則かもしれませんが、数学ソフトを使って計算してみたらどうでしょうか。

wrusagi
質問者

補足

検算して正しいのでプログラムミスではないです

  • alice_44
  • ベストアンサー率44% (2109/4759)
回答No.2

(1) 正でも何でも好きな解をひと組好きに作る。 (2) その解が満たす方程式をでっち上げる。 (3) 方程式を入れ換える。 この手法が使えないケースでは、 出てきた解を信じるか、計算ミスを探すしかない。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

そもそも数値が間違っている という可能性は無視していいんですか? 例えば ・数値を入れる場所を間違えた ・(計測値を使って計算しているとして) 計測を間違えた という可能性は考えられる. あるいは, 「数値が間違っている」というわけではないけど ・計測値の誤差の影響 という状況だってあり得る. もちろん ・計算を間違える ということも不可能ではない.

wrusagi
質問者

補足

たしかにそのとおりです。 誤差を含んでいます。 今の結果は誤差を含めて無理やり当てはめたような感じになっています。 誤差の影響を最小にした結果を求めたいと考えています。

関連するQ&A

専門家に質問してみよう