ラプラス方程式と共役勾配法の解法

このQ&Aのポイント
  • ラプラス方程式とポアソン方程式の境界値問題を解く方法には、SOR法や共役勾配法などがあります。
  • 連立一次方程式の解法としては、SOR法が使用されますが、ラプラス方程式やポアソン方程式を解く場合は、メモリ確保の前提条件は連立一次方程式の形ではないです。
  • マトリックス解法としての共役勾配法もありますが、より特化した解説がされている本はあまりありません。簡単な説明を求めるなら、ラプラス方程式やポアソン方程式に焦点を当てた専門書を探すと良いでしょう。
回答を見る
  • ベストアンサー

ラプラス方程式の解法(情報処理として)と共役勾配法

情報処理の数学はカテゴリ違いかもしれませんが、適当なところを見出せませんでしたので。 (以下、長文で申し訳ありません。) ラプラス方程式やポアソン方程式の境界値問題を解く方法にSOR法が あります。これは連立一次方程式の反復解法の1つだとも言えると思い ます。連立一次方程式の解法は通常AX=BとなってマトリックスAと既知 ベクトルBに対して未知ベクトルXを解くわけですが、ラプラス方程式 をSOR法で解く場合、AX=Bという形にはしません(そういう風に表現 はできますが)。例えば2次元を考えると100×100の2次元の領域を解く 場合、未知数は10000個です。これをAX=Bという風に考えたら、10000元 連立一次方程式を解くことになり、A(10000,10000)のようにメモリ確保 も大変ですが、実際にはそのように解きませんね。マトリックスAとい うメモリの取り方をしないのです。 100×100の格子領域でSOR法で解くとプログラムステップとしては数十 行ぐらいとなり、大したことはありませんね。 しかし、情報処理の連立一次方程式の解法の本を見ると、それはあくま でも連立1次方程式があった場合ということを前提としているのでその ようなメモリの確保から解説がスタートするようです。 そこで質問ですが、ラプラスやポアソン方程式を(前処理付)共役勾配 法などで解く場合、メモリ確保の前提条件としては連立一次方程式の形 ではないはずです。本を見るとマトリックス解法としての共役勾配法が 出ていますが、ラプラス方程式、ポアソン方程式の特化して解説してい る本などないでしょうか。また、簡単に説明できるのであれば教えて頂 きたいのですが。

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

  • ベストアンサー
noname#221368
noname#221368
回答No.1

 考え方だと思うのですが、通常の流れは以下のようになると思います。   ラプラス方程式を数値計算に持ち込むには    →何らかの手段で離散化(有限要素法や差分法など)    →連立方程式  上記において、離散化と連立方程式はペアで出てきます。連続的な偏微分方程式を数値計算に持ち込むには、何らかの手段で離散化する必要があり、必然的に連立方程式が現れる、という意味です。  しかし実際のコーディング作業では、必ずしもMatrix形式を用いなくてもよいのも事実です。たいていの場合、得られる係数マトリックスは疎行列なので、非零要素だけを1次元配列に保存する事は可能です。既知ベクトルも1次元配列に保存します。  共役勾配法では、それらベクトルの内積計算だけで事が済みますが、このとき問題になるのが、係数配列と既知配列の添字のマッピングです。  マッピングを行う際には、やはり連立方程式を念頭において考えるのが順当と思えます。それで解説書は、連立方程式を基本にしているのではないでしょうか?。  もう一回言いますが、連立方程式を念頭に置くけれど、実際のコーディングは違います。

skmsk19410
質問者

お礼

ご丁寧な回答、有難うございます。 連立方程式を念頭において作業はするもののコーディングは別とのこと、概ね腑に落ちるものです。疎行列の場合、メモリの使い方などが連立一次方程式(AX=B)とはかなり異なるのでむしろ連立(一次)方程式と言わない方が理解しやすいのではないかと思いますが。 一方で有限要素法の場合、これは疎行列ですが本当にマトリックスを構成するのでしょうか。境界要素法の場合は経験がありますが、密行列なので本当に連立1次方程式のAの行列を構成します。 解が存在するということの必要条件として連立方程式を構成することができるという事実はどの解法にも共通していることではあると理解しますが。

関連するQ&A

  • 共役勾配法の解法について

    Ax = b の形の式を共役勾配法で解く方法は,インターネットでいくつか見つけることができました. しかしながら,Ax = b の解が1つでない場合などに, ||Ax-b||^2+α||Cx||^2 (ノルムは2ノルム)を最小にする問題を,共役勾配法によって解く方法がわかりません. 最小自乗法に関する知識が必要なのかと思うのですが,どうにもならないのが現状です. どなたかご存知ありませんでしょうか?

  • 連立方程式の解法

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

  • 不完全LU分解前処理つき双共役勾配法についておしえてください。

    連立方程式を解くために不完全LU分解前処理つき双共役勾配法 について勉強しています。 前処理の際に、行列Aを不完全LU分解しその逆行列(LU)^(-1)というのを使用します。LU分解まではできたのですが、この逆行列は普通にLU分解+直接法という形でもとめるのでしょうか。だとしたら、直接法をつかっていてあまり高速化が期待できない様な気がしました。 不完全コレスキー分解つき共役勾配法(ICCG)のときは、不完全コレスキー分解後、間接的にAの逆行列をもとめて使用する方法がありましたのでなにかいい方法があるのかと思い質問しました。 はじめてのプログラミングで見当違いなことをいっているかもしれませんがよろしくおねがいします。

  • 偏微分方程式 ラプラス方程式 ポアソン方程式

    微分方程式で用いられる線形,非線形の意味がよくわかりません。 どのように区別されるのでしょうか? また、ラプラス方程式は、一階の偏微分方程式の例でよくでてきて、 ポアソン方程式は、二階の偏微分方程式の例でよくでてきます。 ラプラス方程式,ポアソン方程式はどちらも線形なのでしょうか? テキストや参考書にある解法に習えば、例題や練習問題は解けるのですが、 用語の意味がまるで理解できていません・・・ ご回答よろしくお願い致します。

  • ラプラス方程式→連立方程式

    楕円型ラプラス方程式を連立方程式に近似して解きたいと思っています。 そこで、いろいろ調べてみたのですが、どうしても、 連立方程式の基本形 Ax=b のうち、ラプラス方程式の差分近似方程式のどの部分がどの文字に当たるのかが理解できません。 例として以下のラプラス方程式を連立方程式Ax=bの形そのものに、直していただけないでしょうか。 (∂^2 * u) / (∂^2 * x) + (∂^2 * u) / (∂^2 * y) = 0 (0<x<1 , 0<y<1) u(x,0)=sinπx , u(x,1)=0 (0≦x≦1) u(0,y)=u(1,y) (0≦y≦1) 近似方程式は u(x_i,y_j) = (u(x_i+h , y_j) + u(x_i-h , y_j) + u(x_i , y_j+h) + u(x_i , y_j-h)) / 4 です。 よろしくお願いします。

  • 共役勾配法 (Conjugate Gradient)の失敗?

    共役勾配法で線形方程式を解く時に、誤差を10の-8乗 として計算をしています。 たいていの計算はこの誤差で解けるのですが、ある計算 では、誤差が10の-3乗くらいまで減った後に、誤差が増加 していってしまいます。 共役勾配法を使っていると、こういうことが起きるのでしょうか? 数値計算プログラムの作成ミスだろうかと考えてチェックしていますが、 今の所おかしな部分は見つかっておりません。

  • SOR法による差分方程式の解法

    プログラミングのカテゴリーか少し悩んだのですが、 物理関係で差分方程式を解いている人が多いかと思い、 こちらで質問させて頂きます。 解きたいのは、2Dポアソン方程式です。(1Dでも構いません) 微分方程式を差分化してSOR法を使用します。 SOR法は若干ながらメッシュサイズ、加速係数に 解(ポテンシャル形状)が依存します。 しかし、できるだけこういった条件に依存せずに、 正確な解を得たいです。 より安定に正しい(メッシュサイズなどに依存しない)解が得られる 方法など、SOR法について何かご存知の方、何でも構いませんので、 ご教授のほど宜しくお願いします。 又、複雑な構造(ダブルHEMT構造、局所的に高ドープなど)でも、計算を 収束し易くする方法など、何かありましたらアドバイスをお願いします。

  • 連立1次方程式の数値解法の使用条件

    数値計算で物理現象を解いていく問題では多くの場合、最終的には大規模な連立1次方程式を解くというところに行きつきます(行列を解く)。その場合、解く物理問題によって行列の形式が決まってくる場合とか、あるいはその性質は期待できない問題とがあると思います。例えば、行列が必ず(正値の?)対称行列になることがわかっている問題とか、です。では行列の性質を期待しない場合の高速解法にはどのようなものがあるでしょうか。ガウスの消去法はまるで紙と鉛筆で解いていくことをプログラミングしたようなところがあります。ピボットの問題とかはありますが。でもたぶん遅いんだろうなあとは思いますが。 教科書を読んでみるとだいたい、細かい解説が書いてありますが、ユーザという立場からは内容はどうでもいいから、自分の問題に対して早くて正確な解を得る方法だけ教えて欲しいと思うのですが。共役勾配法を使った計算例があったので、勉強してプログラムを作って走らせてみたら全く結果がおかしいのですが、よく読んでみたら、共役勾配法は正値対象行列に限定だそうで、がっかりしました。 行列の性質を限定しない高速解法にはどのようなものがあるのでしょうか。なお、よく問題になる条件数の問題とか10^10と10^(-10)が係数に含まれるとかいろいろ問題がありますが、今回の問題としてはそのような極端なことが起こらないということではあります。共役勾配法はいろんなファミリーがありますが、その中で正値対象行列でなくてもいいというものあるでしょうか。解説書には解法の冒頭に書いてもらいたいものですが。 よろしくお願いします。

  • 連立方程式解法に代入法、加減法はあるが、乗除法は?

    連立方程式の解法に代入法と加減法がありますが、 なぜ乗除法とは言わないのでしょうか? 連立方程式で、辺々割ることで、変数を消去してる時に思ったのですが。 googleにもヒットしません。 考えてみたら不思議ですよね。 どなたか参考意見でもよいので何か教えてください。 よろしくお願いいたします。

  • 最小2乗法における連立方程式の計算法を教えて下さい

    最小2乗法に関して E=Σ(y-ax-b)^2 ∂E/∂a=Σ(y-ax-b)×2×(-x)=0 ∂E/∂b=Σ(y-ax-b)×2×(-1)=0 ここまでは分かるのですが、aとbを求めるにあたって、恥ずかしながらどのように連立方程式の計算をすればいいのか分かりません。 どなたかこの連立方程式の計算過程を分かりやすく教えて下さい。宜しくお願い致します。 それとこの計算に関してある本を見たところ、Σb=n として計算するとありました。 なぜΣb=nとしていいのかも合わせて教えて頂けると嬉しいです。