• ベストアンサー

連立一次方程式を解くプログラム

すこし煩雑な(21×11です)の連立一次方程式を解くプログラムを作りたいのですが 何か良い文献、HPなどは無いでしょうか? いろいろなものを見ましたが大体縦横が同じ(n次元?)の 計算のヒントみたいなのしか見つけれませんでした。 プログラムはほとんどやったことが無いので、 ソースなどが公表されていてそれをちょっと書き換えれば 目的のものがつくれるというのが理想ですが・・・。 解法はガウスジョルダンとかガウスサイデル あるいは他にもっとよいものがあればそちらで構いません。 また、連立一次方程式のちゃんとした答え(言い方悪いですね)が求まらない場合、 近似解を算出することになると思うのですが これはどういった基準で「解」とされるのでしょうか? 計算の反復回数とかでしょうか? まとまりのない質問ですがよろしくお願いします。 何かあれば補足をお願いします。

  • 19san
  • お礼率59% (171/286)

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

  • ベストアンサー
  • foobar
  • ベストアンサー率44% (1423/3185)
回答No.3

連立方程式の解き方にはいろいろ有って、それぞれ長所短所あります。 手元の書籍では Numerical recipes in C (技術評論社) に結構詳しく載っています。(別冊で、プログラムの入ったディスクも販売されていたと思います) ガウスジョルダンももちろん掲載されていますし、変数と式の数が一致しない場合の扱いなども記述されています。 一読の価値はあるかと。 ご質問の式では、係数に0の多い、疎な方程式に思えます。疎な式の場合には、計算量を下げることも可能です (詳細は、上記書籍に記載されています) ご参考になれば。

19san
質問者

補足

回答していただきありがとうございます。 教えていただいた書籍ですがソースコードの方は掲載されているのでしょうか? アマゾンで検索したところ少しばかり価格が高いので購入すべきか 図書館などで探すか迷っています。 よろしければお教えください。お願いします。

その他の回答 (3)

  • foobar
  • ベストアンサー率44% (1423/3185)
回答No.4

Newmerical... ソースコードは記載されています。 (ただ、手で打ち込むのは、結構面倒かも) 他にもCを使った数値計算関係の書籍はいくつかありますので、一度大きめの書店で見て見られたほうが良いかも。 (Numerical..の訳者である奥村先生が執筆された書籍もいくつかあるはず) プログラムの用途にもよりますが、業務に使うなら、きちんと誤差評価(や計算量評価、安定性の評価)に関して記載している書籍を選ばれたほうが良いと思います。 (仕事用なら、(市販などの)の数値演算パッケージを導入するのが一番いいのかもしれません)

19san
質問者

お礼

度々の回答ありがとうございます。 書店、図書館などで色々な本を探してみることにします。

  • foobar
  • ベストアンサー率44% (1423/3185)
回答No.2

係数行列が正方でないということは、変数の数と式の数が一致していない(普通には解けない)のでは? 式の数の方が多い場合には、全ての式を同時に満足する数値の組は無いので、評価関数を定義して、それが最小(もしくは最大)になる数値の組み合わせを探すことになるような。 式の数が少ないと、解けないし。 今一度、問題を見直す必要があるかと思います。

19san
質問者

お礼

回答ありがとうございました。 実は長々と補足を書いたのですが、gooの禁止事項に触れたらしく編集されました。 それも相当簡素なものに編集されており自分でもびっくりしています。 係数行列はなんといいますか規則的に配列しており、 係数の中でゼロじゃないものは6つだけですので問題的には計算できるとは思うのですが未だに解決できずにおります。 ちなみに解は{0,0,...,1,...,0,0}ですのでこのことから考えても 正方行列を解くプログラムでもあればそれをちょっと書き換えてできるのかなと考えた次第です。 しかし、正方行列を解くプログラムもいまいちうまくできずに困っています。

19san
質問者

補足

21×11という書き方はもしかしたら間違っていたかもしれません。

回答No.1

最適化アルゴリズムをくめばいいんじゃないですかね? そうすれば,最適解が求まると思いますよ. 計算終了条件は「計算回数」であったり,「誤差が○○以下」であったり,様々です. 下記URLの「さ」を選択すると,最適化アルゴリズムが載っています.

参考URL:
http://www.sist.ac.jp/~suganuma/cpp/sakuin.htm#sa
19san
質問者

お礼

回答していただきありがとうございました。 参考URLの方も大変参考になりました。 また機会がありましたらお願い致します。

関連するQ&A

  • 連立一次方程式を解くプログラムについて

    数値計算の本を見たら必ず載っている連立1次方程式の解法ですが、どのようなタイプの行列でも解くことができるものにはどのような解法があるでしょうか。もちろん、解くことができる範囲でということではあります。その意味でガウスの消去法(ピボット付)になるでしょうか。ガウスの消去法は解き方に基本的な制約はないですね。一方、共役勾配法の説明を見ると"対称正定値行列の場合、..."となっており、その範囲でしか考えていないということでしょうか。そうなるとかなり絞られることになってしまいます。任意の行列は変換して対称正定値に変換できる、ということでもないと思いますが。 有限要素法に関連した連立方程式解法についても書籍1冊分の解説とかありそうですが。高速化のために長い解説があったとしても前提によって使える範囲が狭いものが多いように思えるのですが。よろしくお願いします。

  • 連立方程式

    こんばんは。 本来はN元連立方程式を考えているのですが、ここでは5元連立方程式として質問させていただきます。 今、下記の5元の連立方程式を考えます。 u[0]-2*u[1]+u[2]=a u[1]-2*u[2]+u[3]=b u[2]-2*u[3]+u[4]=c u[3]-2*u[4]+u[5]=d u[4]-2*u[5]+u[6]=e (a~eは定数で、左辺はu"を差分表示したものです) これでは方程式の数が2つ少なくて解けないので、条件としてu[0]=u[5]、u[1]=u[6]とします。 上の条件を考慮して行列になおすと、 -2 1 0 0 1 1 -2 1 0 0 0 1 -2 1 0 0 0 1 -2 1 1 0 0 1 -2 となり、これをガウス・ジョルダン法で解こうと思っているのですが、行列式が0になってしまい解けません。つまりこの連立方程式は自明な解しか存在しないと言うことでしょうか?ガウス・ジョルダン法以外の別の解く方法か良いテクニックがありましたらアドバイスお願いします。 また分かりにくい場合は補足要求お願いいたします。

  • 連立方程式

    C言語で反復法の「ヤコビ法」と「ガウス・ザイデル法」、消去法を用いて連立方程式を解くプログラムを作りたい。 また、プログラムは任意の元数に対応できるように作りたい。 分かる方がいましたら、回答よろしくお願いします。

  • 連立方程式の解法

    有限要素法のプログラムにおいて、連立方程式を解く方法にガウスの消去法を使用しています。ガウスの消去法の他に、行列を解く方法や計算精度が上がるテクニックなどあれば教えてほしいのですが‥‥

  • 連立方程式について

    連立方程式について 連立方程式の解を求める際、係数を揃えるために、両辺に同じ数をかける時 がありますが、 ふたつの方程式が組み合わさった、連立方程式の場合、一方の方程式ともう一方の方程式に当てはまる解を求めているのに、なぜ一方の式の両辺に同じ数をかけた方程式ともう一方の方程式とを計算できるのですか?数をかける前と後の方程式は同じということですか?そうだとしたら、なぜ数をかけているのに同じということになるのでしょうか。 分かりずらい文章ですみません、、

  • 3連立非線型方程式の解法プログラム(ニュートン法)を教えてください

     未知数が3つで非常に難解な非線型方程式を3連立方程式にして解きたいと思っています。  ですが、手計算による代入法等の解法を行うと、とんでもなく式が長くなってしまいとても解けません。そこでc言語のプログラミングにて計算し、3連立方程式から3つ未知数の解を求めたいのですが、プログラミングはまったくの初心者であるため、いまいちよく分かりません。  解法プログラミングとしてはニュートン法が最も適切だとお聞きしました。ニュートン法にて例として下記のような式を解く場合、どのようにプログラムすれば良いか教えていただけたら幸いです。 例 2*x*x*x + 4*x*y + cos(z) = 0 x*x*y*z + logz + 2*y = 0 2*x*x + y*z +z*z*z +4 + e~(-xy) =0  この例は私が勝手に作成したので解は存在しているかわかりませんが、実際にこのような3連立非線型方程式を解く場合はどのようなプログラムになるか教えていただけたら幸いです。また、実際に私が解こうと思っている式はこの例より非常に長いものとなっています。あつかましいようですがそのことを考慮に入れてお教え頂けたら幸いです。何卒お願いいたしします。

  • 連立方程式について・・・

    連立方程式の解法でガウス法に代表される直接法と傾斜法の簡単な原理や長所・短所を知りたいのですが、ネット検索ではわかりやすいサイトがみつかりませんんでした。。。授業のノートを見ても微妙な感じで、テストも近いのでかなり焦っています。 どなたか教えていただけませんか??お願いします!!

  • 連立方程式について教えて下さい。

    多元連立方程式について教えて下さい。 資料では、次式は、X,Y,Z,Q1,Q2,Q3,Q4が未知数の多元連立方程式で、 Q1=0.5*√(X-Y-0.5) Q2=0.4*√(Y-X-0.3) Q3=0.3*√(Y-Z-0.4) Q4=0.2*√(Z-Y-0.4) ΣQ=Q1+Q2+Q3+Q4=0 Q1+Q2+Q3+Q4=0になるようなX,Y,Zを求めることに帰する、と書いてあるのですが、 このような方程式の解を手計算で求めることはできるのですか? 手計算で可能だとしたら、その解法を教えて下さい。 また、手計算で無理だとしたら、どのように考えればよろしいのですか? なお、参考の書籍&URLなどがありましたら教えて下さい。 どうかよろしくお願いいたします。

  • 分数を含む連立方程式の効率のよい計算の仕方。

    分数を含む連立方程式の効率のよい計算の仕方。 連立方程式 2x+3y=1/2 x-y=-1/2 上記の方程式の効率のよい解き方とは、どういったものでしょうか? または、採点者に評価してもらえる回答とはどのようなものでしょうか? 数学が得意な方、解説をお願いします。 因みに、上記の解を求めると x=-1/5 y=3/10 です。 解だけなら地道に計算をすれば出るので、解法にもこだわりを持ちたいと思い質問をしました。

  • 連立方程式の解法

    連立方程式: Ax=B (A;係数行列、x;未知数、B;右辺行列) において detA = 0 であった場合、この解は一義的には定まらない という事なのですが、 このことはSOR法などの反復法も 使えないと言うこと言ってるのですか? detA = 0 の連立方程式はどうしても解けないのですか?

専門家に質問してみよう