化学平衡式の近似

「化学」の方でレスポンスがないのでクロスポストです。両方見てる方、すみません。

酵素反応のシミュレーションをしていて、シミュレータには数値積分の計算エンジンを使っています。
一部の反応は酵素の関与しない化学平衡反応で、
A x B = k1 x C
B x D = k2 x A
.
.
.
A + C + D + F + G = c1
A + B + 2E = c2
.
.
.
(A,B,C....は変数、k1,k2...,c1,...は定数)
といった式で表現されます(実際には連立16元方程式)。
この連立方程式を近似的に解きたいのですが、こうした形式の連立方程式を、連立微分方程式に近似するような数値計算的方法やアルゴリズムがあればご教授ください。他の数値計算法でも構いません。
 Newton-Raphson法で正面からぶつかるのはやってみましたが、それだと計算量が大きすぎるのです。ひとつひとつの平衡式は単純なので、そのへんを活かして、うまく計算量を減らす工夫がないものかと思案しています。

 参考書や論文、キーワード等糸口になりそうなものでも構いませんので、ご教授ください。

投稿日時 - 2000-10-06 19:20:44

QNo.10195

困ってます

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

 こんばんは、TCMと申します。
 仕事で数値解析がちょっと関係ありの私は、下記参考書を重宝しております。そのp278に衝撃的なことが書いてあります。いわく「非線形連立方程式を解くための一般的な優れた方法はないし、将来にわたって(おそらく)ないであろう」 i(@o@)i 上記方程式は非線形連立方程式ですので「ご愁傷さまです」と終わらせようかとも思いましたが、それでは申し訳ありません。
 さて、非線形連立方程式を解くのにNewton-Raphson法を使うのはごく一般的です、それ以外の方法は寡聞にして聞きません。根の近くの点がわかれば、優れた方法であることに間違いはありません。一度、p280の関数mnewtを試されてはいかがでしょうか?

> シミュレータには数値積分の計算エンジン
> を使っています
というのがいまいちわからないのですが、上記関数では連立方程式を解く部分にLU分解を使っています。ひょっとして早くなるかもしれません。ただし、実数はdoubleにして関数を作ることをお勧めします。数値解析で単精度で計算を行うのはダメダメです。

 最後にマルチポストはよくないですねえ。もう一方はWebmasterに削除依頼を出しましょうね。

参考URL:「NUMERICAL RECIPES in C」技術評論社

投稿日時 - 2000-10-06 21:06:04

お礼

回答ありがとうございます。すでに「NUMERICAL RECIPES in C」を参考に、Newton-Raphson法→LU分解で試行しておりました。
シミュレータの件は、最終的に、他の微分方程式と一緒に積分計算エンジンに放り込むということです(一応代数式も解いてくれますが、負荷になる)。時系列でのダイナミクスを観察したいので、積分のタイムステップごとにこの連立式の解を求めなければならないのです。ですから、微分式に近似できると都合がよいのです。
この質問をしたのは、大昔(30年前)のプログラムに、連立の化学平衡式を連立微分方程式に近似するものがあったからです(論文中で見かけただけで、具体的にどういうプログラムかは不明)。
非線形連立方程式とはいえ、式の形はかなりシンプルなので、何か工夫があるのかなあ、と(現在図書館に、数値計算の大きめの教科書を発注しております)。
重ねて、ご回答ありがとうございました。

投稿日時 - 0000-00-00 00:00:00

ANo.1

このQ&Aは役に立ちましたか?

14人が「このQ&Aが役に立った」と投票しています

[  前へ  |  次へ ]

ベストアンサー以外の回答(1件中 1~1件目)

ANo.2

TCM

 そうですか、もうすでにmnewtは試されたと。では思いつくことを並べてみますが、ご存知の際はお読み捨てください。
 「連立微分方程式に近似する」と聞いてピンと来るのは変分法です。汎関数の停留値を与えるように未知関数を定める方法で、有限要素法などでよくお世話になります。物理現象の汎関数は大抵現象のエネルギを表す式になっていますから、停留値を与える関数を求めることでエネルギ極小の状態、つまり自然界で実現されているであろう状態を求めるという寸法です。
 汎関数を求めるのが困難な場合には、重みつき残差法(なかでもお勧めはガラーキン法)を使います。現象の支配方程式の偏微分方程式を作り、その残差平方和を零とおいて連立方程式を解くものです。
 ま、現象がどうあろうと最終的にはAx=bを解いてベクトルxを求める問題に還元できるわけですよね。とすると、そんなに選択の幅はないように思いますよ。連立方程式の解法は、直接法か反復法しかありません。(ちなみにLU分解は直接法です)それぞれに特徴があり、一般的に反復法の方がメモリも計算時間も少ないのですが、今回の問題では対角項に零がはいる可能性がありそうな気がするので、直接法をお勧めします。
 あんまりいい回答ではなくて申し訳ありません。

投稿日時 - 2000-10-07 16:59:53

補足

お返事遅れましたが、詳しい回答をありがとうございました。有限要素法、計算力学の勉強をはじめました。問題となっていた連立平衡式の近似については、平衡式の特徴を活かして反復法をうまく作ってやることで高速、高精度に収束するものを実現できそうです。いろいろ参考になりました。ありがとうございます。

投稿日時 - 2000-10-19 14:07:49

あなたにおすすめの質問

[PR] お役立ち情報

PR

PR

おすすめ特集

あなたの疑問にお答えします!
あなたの疑問にお答えします!

産経新聞社会部が、あなたの身の回りで起きている問題や疑問を徹底調査した上でご報告します。