- ベストアンサー
化学平衡式の近似
- 化学平衡式の連立方程式を近似的に解く方法について教えてください。
- 数値積分の計算エンジンを使って化学平衡式の近似的な解法を探しています。
- Newton-Raphson法では計算量が大きくなるため、より効率的な解法を探しています。参考書や論文、キーワードなども教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは、TCMと申します。 仕事で数値解析がちょっと関係ありの私は、下記参考書を重宝しております。そのp278に衝撃的なことが書いてあります。いわく「非線形連立方程式を解くための一般的な優れた方法はないし、将来にわたって(おそらく)ないであろう」 i(@o@)i 上記方程式は非線形連立方程式ですので「ご愁傷さまです」と終わらせようかとも思いましたが、それでは申し訳ありません。 さて、非線形連立方程式を解くのにNewton-Raphson法を使うのはごく一般的です、それ以外の方法は寡聞にして聞きません。根の近くの点がわかれば、優れた方法であることに間違いはありません。一度、p280の関数mnewtを試されてはいかがでしょうか? > シミュレータには数値積分の計算エンジン > を使っています というのがいまいちわからないのですが、上記関数では連立方程式を解く部分にLU分解を使っています。ひょっとして早くなるかもしれません。ただし、実数はdoubleにして関数を作ることをお勧めします。数値解析で単精度で計算を行うのはダメダメです。 最後にマルチポストはよくないですねえ。もう一方はWebmasterに削除依頼を出しましょうね。
その他の回答 (1)
- TCM
- ベストアンサー率44% (81/181)
そうですか、もうすでにmnewtは試されたと。では思いつくことを並べてみますが、ご存知の際はお読み捨てください。 「連立微分方程式に近似する」と聞いてピンと来るのは変分法です。汎関数の停留値を与えるように未知関数を定める方法で、有限要素法などでよくお世話になります。物理現象の汎関数は大抵現象のエネルギを表す式になっていますから、停留値を与える関数を求めることでエネルギ極小の状態、つまり自然界で実現されているであろう状態を求めるという寸法です。 汎関数を求めるのが困難な場合には、重みつき残差法(なかでもお勧めはガラーキン法)を使います。現象の支配方程式の偏微分方程式を作り、その残差平方和を零とおいて連立方程式を解くものです。 ま、現象がどうあろうと最終的にはAx=bを解いてベクトルxを求める問題に還元できるわけですよね。とすると、そんなに選択の幅はないように思いますよ。連立方程式の解法は、直接法か反復法しかありません。(ちなみにLU分解は直接法です)それぞれに特徴があり、一般的に反復法の方がメモリも計算時間も少ないのですが、今回の問題では対角項に零がはいる可能性がありそうな気がするので、直接法をお勧めします。 あんまりいい回答ではなくて申し訳ありません。
補足
お返事遅れましたが、詳しい回答をありがとうございました。有限要素法、計算力学の勉強をはじめました。問題となっていた連立平衡式の近似については、平衡式の特徴を活かして反復法をうまく作ってやることで高速、高精度に収束するものを実現できそうです。いろいろ参考になりました。ありがとうございます。
お礼
回答ありがとうございます。すでに「NUMERICAL RECIPES in C」を参考に、Newton-Raphson法→LU分解で試行しておりました。 シミュレータの件は、最終的に、他の微分方程式と一緒に積分計算エンジンに放り込むということです(一応代数式も解いてくれますが、負荷になる)。時系列でのダイナミクスを観察したいので、積分のタイムステップごとにこの連立式の解を求めなければならないのです。ですから、微分式に近似できると都合がよいのです。 この質問をしたのは、大昔(30年前)のプログラムに、連立の化学平衡式を連立微分方程式に近似するものがあったからです(論文中で見かけただけで、具体的にどういうプログラムかは不明)。 非線形連立方程式とはいえ、式の形はかなりシンプルなので、何か工夫があるのかなあ、と(現在図書館に、数値計算の大きめの教科書を発注しております)。 重ねて、ご回答ありがとうございました。