手習ひデジタル信号処理(188) Scilab、{Scilabデモ}、化学プロセス

Joseph Halfmoon

信号処理素人老人がScilabの「信号処理のデモ」を物色中だった筈が、いつの間にかカテゴリ脱出。今回は「シミュレーション」カテゴリの中の「常微分方程式」、さらにその中の「ケミカルな」シミュレーション2つです。化学素人老人には何が反応しているのやらサッパリなんであります。陽解法、陰解法、スティッフ、その辺らしいっす。

※「手習ひデジタル信号処理」投稿順 Indexはこちら

※Windows11上の    Scilab2024.0.0を使用させていただいております。(Scilabについては御本家 Scilab 様へ)

前回は、車輪やらバイクやらの物理モデルのシミュレーションからのアニメーション表示で、アニメ表示は「手に汗握る」盛り上がり?でしたが、肝心の計算本体は外部で終わっていてScilabは表示ばかり。しかし、今回はフルScilabで計算までやってます。表示はフツーのグラフで淡々としたもんですが。

今回のデモは2点

以下のデモ選択ウインドウの「常微分方程式」カテゴリから、赤矢印つけた2件が今回「鑑賞」させていただくデモです。selectChem

デモに使用されるScilabのスクリプトファイルは以下の2つです。

    1. ode_chstiff.dem.sce
    2. ode_chimpl.dem.sce

どちらも同じ「常微分方程式系」を数値的に解くものです。ただし、差異は解法にあるみたいです。1の「Stiff」の方は、ode関数を使って解いています。2の「Implicit」の方は、impl関数を使って解いています。

通常、ode関数は陽解法、impl関数は陰解法向けであるらしいので、ExplicitとImplicitの比較?と思うとタイトルにある通り違いました。ode関数は、常微分方程式のソルバへのインタフェース関数であって、実際のソルバは複数から選択可能となっているらしいです。デフォルトソルバはlsodaと呼ばれているソルバらしいです。これは以下の2つを自動選択してくれるのだそうな。

    • Adams法、非スティッフな問題用
    • 後退差分法(BDF)、スティッフな問題用

helpによると、まずはAdams法で挑み、はかばかしくないとBDFに切り替えるみたいっす。知らんけど。

2つのデモを実施して得られるグラフが以下に。chemEC

それにしてもこのグラフからはどんな物質とどんな物質が、どのような反応をしておるのか分からんなあ。一応、昔、化学やったんだけどなあ。ほぼ半世紀前じゃ手も足もでんぞなもし。なお、どちらのスクリプトもグラフタイトルに「implicit」をいただいてます。別なデモに同じタイトルつけるなよなあ~。

Implicitな方法がStiffに向いている

お楽でExplicitな陽解法(ルンゲ・クッタ法とか)はStiffな問題には向かず、Stiffな問題だったらImplicitらしいっす。数値解析素人老人は、いつものとおり、Googleの生成AI、Gemini 2.5 Flash様にそのあたりの解説をばお願いしてしまいました。geminiStiff1

おお、stiffな方程式、分かったような気になるなあ。ホントか?geminiStiff2

Gemini様の説明、わかりやすいな、どこかから拾ってきているのか?そして問題点の指摘も的確。ここにおいてようやく ExplicitとImplicit登場、やったね。何か?geminiStiff3

そして、対処法の部分に、impl関数の実体である陰解法、そしてode関数が選択的に呼び出しているらしいBDF法も登場geminiStiff4

分かったような、分からぬような。いつものことか。

手習ひデジタル信号処理(187) Scilab、{Scilabデモ}、車輪とバイク へ戻る

手習ひデジタル信号処理(189) Scilab、{Scilabデモ}、ODEの相平面解析? へ進む