バディ〜のブログ

バディ〜のブログ

 バディ〜のブログ

こんにちは

 

 

「その3」に続いて今回はいよいよ、

μ≠0 のときの方程式の解を考えてみます。

 

ここからが、とてもおもしろく(?)なってきます。(私だけか?)

 

 

あらためて微分方程式は

Van del pol 方程式と呼ばれているものです。

これは

   d^2y(t)/dt^2  +  y(t)  = μ(1-y(t)^2)dy(t)/dt 

 但し、μ>0 

と表せます。

 

 

 

ちなみに、

この方程式の歴史的な話や全体像の解説が

ネット検索したらPDFで見つかりました。

 

情報はこちらです。↓

「 電気学会雑誌 J. I. E. E. J. 7/'73 技術総説 

 電気工学における非線形問題 」

電気屋さん、特にハード屋さんには

なじみがあるかもしれません。

 

 

話を戻します。

 

 

 

 

まず、

μを一定値に固定して初期値を変えた場合の動きを調べてみます、

いくつでもいいのですが、今回はμ=0.5 としました。

 

 

線形の微分方程式では初期値が変われば

その解も変わるのが当然なのですが、

この方程式の場合全く異なる動きになります。

とりあえず、

初期値を色々変えて数値積分して

その解を相平面に表したものが図1です。

積分の刻み幅は

0.1/(2の13乗)=0.1/8192のものを使用しています。

 

あとでグラフが出てきますが

推定残差(比率)の最大値は

およそ1e-3、最小値はおよそ5e-7です。

 

あくまで「その3」の結果から類推したものですが、

かなりザックリ言って

解の桁の上から4桁目が怪しいことになります。

 

(やっとこれを書くことができました。)

 これを知ることが私の本来の目的なのでした。

 (^.^)

「その1」から「その3」の内容は

たったこれだけを知るためだったのですが・・・

知るのと知らないのは大違いなのであります。

 

では、話を本筋に戻します。

 

 

          図1

 

 

グラフにマーカ(太い丸印)があると太すぎて見づらいので、

直線だけの表示にしたものが図2です。

 

 

*****

あ、前回の記事{その3」はこちらです。↓

サムネイル(?)の画像にどうしても図1を入れたかったので、

ここに入れました。必要のないかたはスルーで。 (^^;

 

 

 

*****

 

 

 

 

 

             図2

 

 

図1(図2)では6種類の初期値を適当に選んで、その解を計算し

x(t)とy(t)をプロットしたものです。

(ひとつは別のカーブに完全に重なって見えませんが・・・)

 

 

原点を除いた任意の初期値x(0)、y(0)がら初めても、

時間が経過するにつれて同じ周期解に収束しています。

まるで巻き付いているようですね。

 

これがこの非線形微分方程式のおもしろい特徴のひとつです。

この周期解はリミットサイクルと呼ばれ、

色々な非線形現象にも出てきます。

 

単純に数値積分をやった

(正しくはPCがエクセルのマクロのプログラムを実行した)

だけですが、とりあえずリミットサイクルは確認できました。

よかった 、よかった  (^^;

 

電気・電子系のかたはご存じかも知れませんが、

有限桁の数値計算でフィルタリングする

IIRデジタルフィルタにも

リミットサイクルが発生する場合があることがわかっています。

普通は好ましくないのですが、

現在も有効な解決策はないようです。

40年ほど前にデジタルフィルタを設計する機会があり、

そのときに初めてこの現象を知ったのですが、

いまだに未解決のようです。

結局IIRは止めてFIRデジタルフィルタにした経験があります。

若干話がそれました。

 

もとに戻します。

 

 

相平面では解の波形がピンとこないので、

時間変化をグラフで表してみます。

6種類の解のなかから変化の大きい2種類を選びました。

これが図3と図4です。

 

ふたつとも赤い丸印のところが初期値で、

ここから急激に変化して周期解になるようすがわかりますね。

 

 

 

            図3

 

 

            図4

 

 

 

さて、

肝心の残差(比率)ですが、

この非線形微分方程式は解析的な厳密解はない

(近似的に求める方法はあります)ので、

推定残差(比率)だけになります。

これを6種類の解について求めてみました。

6種類のx(t)、y(t)はほぼ同じ形になったので、

ここではその中の一つを図5に示します。

 

 

            図5

 

図5の赤い丸印の刻み幅(最も推定残差(比率)が小さいもの)

の解を図1(図2)に使いました。

 

 

 

ということで、

6種類の解の推定残差(比率)をひとつにまとめたもの

図6です。

最小値に凸凹がありますが、

桁的にはほぼ同じなのがわかりますね。

 

 

            図6

 

 

 

では、

ここで条件を変えて

初期値を一定にして、

パラメータμを変化させたときのようすをみてみます。

 

初期値はx(0)=0、y(0)=1の一定値で、

μは0.1から0.9まで、0.1刻みで変えてみました、。

 

その前に各々の推定残差(比率)を確認しておきます。

図7と図8がそのグラフです。

最大値、最小値のいずれも若干の変動はありますが、

桁的にはほぼ同じと言えますね。

 

 

           図7

 

 

 

          図8

 

 

 

それでは

相平面のグラフが図9、図10、図11です。

9種類の解をひとつにまとめると見づらいので

3種類をまとめて、3枚のグラフにしました。

(マーカも見づらいので省略し、直線だけにしています。)

 

 

 

          図9

 

 

 

           図10

 

 

 

          図11

 

 

 

μが増加するにつれて、

リミットサイクルが次第に円から形がくずれ、

歪んでいくのがわかりますね、

 

ただ、x(t)つまり横軸方向は歪みが大きいのですが、

y(t)=縦軸方向の歪みは横軸ほど大きくはないですね。

 

さらに、縦軸y(t)の最大値(=振幅)はμの値に無関係に

ほぼ2になります。

この方程式の解のおもしろい特徴です。

(実は若干増加しますが、これはこのあとで調べます。)

 

 

 

 

相平面よりも時間変化のほうがピンとくるので

初期値(=0秒)から30秒までの時間を横軸とした

y(t)の3枚のグラフを図12、図13、図14に示します。

 

 

          図12

 

 

          図13

 

 

 

          図14

 

 

 

 

最初の30秒は、さほと大きな差は見当たりませんが・・・

今度は終わり辺りの時間、

400秒から409.5秒までのy(t)の時間変化を見てみます。

これが図15,図16、図17です。

 

 

 

          図15

 

 

           図16

 

 

          図17

 

 

 

 

この3枚は明らかに違いますね。

波の形が時間的にずれています。

これを位相がずれていると言い、

一般的に連続した周期波形では周波数が違うとこうなります。

 

また、

波形の縦軸の大きさ(振幅)はどれも

±2でグラフでは同じように見えます。

(マーカが太いのでやや見づらいですが)

 

 

ついでに

y(t)の時間微分x(t)の時間変化も400秒から409.5秒まで

グラフに表してみました。

これが図18、図19、図20です。

 

 

 

           図18

 

 

           図19

 

 

          図20

 

これら3つのグラフのカーブは、

個人的には全く違和感がなく、どこかで見たことがある(気がする)

波形ばかりです。

どこで見たかは思い出せませんが・・・

 

 

 

 

 

ではでは

ここからはμが変わるとy(t)の周波数が変わっていることと

振幅が2から僅かに増加することの

ふたつについて調べてみます。

 

 

 

 

ます、μに対する周波数の変化です。

図12から図17のような時系列データy(t)について、

各々のμことにエクセルでフーリエ解析を行い

周波数分布を求めたものが図21です。

 

横軸はスペクトル番号Nで、

周波数fとの関係は

分解周波数Δfを

Δf= 時系列のサンプリング周波数 / 時系列データ数

  = (1/0.1) / 4096

  = 0.00244140625 (Hz))  (=一定値)

としたとき

 f = N * Δf

となります。

ここでのフーリエ解析では、

Nは 0,1,2,3,・・・,2045,2046,2047の自然数で、

Nから求めた周波数fはΔfに比例し離散化された値となります。

 

縦軸は振幅レベル(デシベル)で表しています。

 

 

9種類のμについて1枚のグラフにまとめました。

これだけでは概略しかわかりませんが・・・

図21の赤い丸印が最も低い周波数(基本周波数)で、

その奇数倍の高調波を含んだ周波数分布になっていますね。

 

また、高調波の減衰度(対数表記)は、

周波数に対し直線的に変化しています。

普段よく見るパターンは周波数(横軸)も対数表示にしたときに

縦軸が直線的に変化するのですが・・・

この形も特徴になりそうです、

 

 

 

           図21

 

 

図21の基本周波数部分を部分拡大したものが図22です。

どの解の振幅もほぼ2なので、

グラフでは20*log10(2)=6デシベルにピークを持ちます。

 

μが増加するに従い

ピークの周波数が小さくなっているのがわかります。

 

 

 

             図22

 

 

ここで、μに対する周波数変化を示す2次の近似式を

手持ちの本から見つけました。

基本周波数をfbとすると

   fb ={ 1- (μ^2)/16 } / 2π

となります。

これをスペクトル番号Nに対応させると

   N = fb / Δf

になり、プロットしたものが図23になります。

μが増加するとNが減少します、

 

 

 

 

            図23

 

さらに

図22を縦横の各方向に拡大して、

図23のNの値を追加したものが図24です。

比較が簡単なように

図23のNは縦軸の値が10dBの直線としました。

 

図24の赤い矢印がμ=0のときのNになり、

緑色の矢印が図23のNと

そのときのμに対応する周波数分布のピークとをつないだものです。

矢印がまっすぐ下に降りていればふたつのNは同じになります。

 

 

           図24

 

 

グラフでの比較なので定性的になりますが、

μが小さいときは

フーリエ解析したスペクトルのピーク(エクセルでの近似カーブ)と

図23のNは殆ど違いはなく

μが大きくなるにつれて差が大きくなる傾向です。

図23は2次の近似式なので、

おそらくμが増加するにつれて確度が下がるためだと思いますが、

詳細は調べていません、

ということでこの話題はここで終了です。

 

 

 

 

 

では、次の話題です。

 

図9,図10,図11のところにも書きましたが、

この方程式の解y(t)の周期解の振幅は

約2で微小増加することがわかっています。

 

たまたま、ネット検索で、

とある修士論文要旨にμと振幅の数値データを見つけました。

μの範囲は0.1から0.9まで刻み幅が0.1だったので、

実は、これに合わせて数値積分をやってみた次第です。

(そのほかにも色々と条件を変えては計算しています。)

 

では、

入手したデータ(これを理論値とします)の値はいくつかというと

 

  μが0.1のとき  2.00010398

        :

        :

  μが0.9のとき  2.00724521

という殆ど2と変わらない程度のものです。

このグラフが図25です。

図25の横軸がμを、縦軸がy(t)の周期解の振幅です。

ここに数値積分した結果

(2種類:数値積分結果の最大値と最小値の絶対値))も入れたので

3本のカーブになりますが、

完全に重なってしまい1本に見えます

 

 

 

 

            図25

 

 

 

では、ここで各μごとに残差を比較します。

今回は真値(=理論値)がわかっているので

真値残差(比率)が計算でき、推定残差(比率)とも比較できますね。

 

図26は、図8のy(t)だけを表記したグラフに

振幅の真値残差(比率)を追加したもので赤い丸印で囲みました、

とりあえず最大値と最小値の間にあるので、

おかしくはありませんね。

 

 

           図26

 

 

次に、真値残差(比率)と推定残差(比率)の比較です。

これが図27です。

それぞれ振幅のプラス側とマイナス側に分けて、

4種類のデータになります。

横軸はμの値で、縦軸は2種類の残差(比率)です。

 

 

 

           図27

 

4個の残差(比率)は

μ=0.9のところが違いがあり

その他も多少の凸凹はありますが

ザックリ桁的には(図26の丸い囲みのように)

ほぼ同じとみていいでしょう。

 

この桁、つまり7e-6の各残差(比率)は

図26では最大値と最小値のちょうど中央あたりになります。

これはどこから来るのか?なぜそうなるのか?

を今までのデータから調べてみました。

 

 

図28がμ=0.9のときのy(t)とその推定残差(比率)の関係です。

横軸がy(t)でこの最大値は、

右側の縦長の赤い丸印付近にあたります。

また、この位置に相当する縦軸、

つまり横長の赤い丸印付近の値が推定残差(比率)になります、

ということで、この部分を横方向に拡大したものが図29です。

 

 

          図28

 

 

図29のグラフの緑色の丸印の位置がy(t)の最大値で、

これに対応する縦軸の値(緑色の丸印)が

残差(比率)になります。

この位置は推定残差(比率)の最大値より

3桁ほど低くなっています。

ということでこの違いが説明できました。

 

 

 

 

 

             図29

 

 

 

 

 

とここまで書いたところで、

重大な(?)思い違いに気が付きました。

 

入手した振幅の値(=理論値)は、

周期解の極大値かつ最大値なのですが、

数値積分した結果の最大値は

0.1秒刻みで計算した中の最大値であり、

必ずしも極大値と一致しているわけではない

ということです。

例えば、

極大値が0.1秒刻みの中間の時間0.05秒にあるかもしれない・・・

極大値こなる保証がまったくないまま

議論していたことになりますね。

なので、

残念ながら

今までの周期解の振幅については真値残差、推定残差の両方とも

意味がないことになります。

 

現状での計算結果で言えることは、

少なくとも真値残差(比率)の極性(プラスマイナスの符号)は

(最大値が極値に完全に一致しない限り)

必ずマイナスでなければならないはずが、

プラスになっているということくらいです。

これは

おそらく積分の刻み幅を数桁小さくすれば改善されるでしょう。

今までの実績から見て、

PCのマクロ実行時間が10日以上掛かるとは思いますが・・・

 

 

まあ、

推定残差(比率)が三桁とか四桁とか言っているところに

文字通り、桁違いの話をするのもどうかと思うのですが・・・

(^^;

 

 

 

 

最後の問題、というか課題はやや厄介ですね。

 

尤も

本来の目的とはずいぶんかけ離れているので

おそらくやらないとは思いますが

もし、やるとすれば

 

極大値の検出は

現在の方法、つまり

0.1秒の刻み幅表示(=エクセルのセルへの書き込み)する方法だと

ほぼ不可能です。

基本的なアルゴリズムを変更して

積分処理の最小ループの中に

最大値と最小値の検出処理を入れて

最小の刻み幅単位での検出を毎回実行するように

プログラムを変更する必要がありますね。

おそらくPCのマクロ実行時間が一けた以上増えると思います。

さらに

最大値と最小値の検出は

周期解(=リミットサイクル)に入ったあとの時間から

行わなければなりません。

初期値を限定すればなんとかなりそうですが、

あまり汎用性のないプログラムにはしたくないので、

この検出方法も考える必要があります。

気が向いて、気分がいいときにやるときが来るか・・・な??

 

色々使えるプログラムにするには

想定される問題を事前に明確にしたあとで ←これ大事!

ひとつひとつ解決しないといけないものです。

どこかの国のなんとかカードの問題とよく似ていますね。

 

 

こんばんは

 

相変わらず前回の続きになります。

 

 

前回、前々回の記事はこちら↓

 

 

 

 

 

 

 

前回、前々回と1階の(非)線形微分方程式を数値解法して

その推定残差と真値残差(比率)を比較してみました。

 

 

今回は

本来の目的だった2階の非線形微分方程式を数値積分してみます。

非線形になると一般に厳密解は求められないので、

とりあえず

非線形要素のパラメータをゼロとおいて線形の微分方程式について

真値残差と推定残差を比較してみます。

そのあとで非線形微分方程式の数値積分解法の推定残差や

その他の解の性質をみることにします。

 

 

 

そういえば、映画「ジュラシックパーク」のなかで、

とある数学者が

「非線形微分法形式を知っているか?カオス理論は?」

というというようなセリフを言っていましたね。

監督のスピルバーグも

このような分野に興味があるのでしょうか?

 

 

 

さて、話題を元に戻して、

 

解きたい方程式は、Van del pol 方程式と呼ばれているものです。

これは

   d^2y(t)/dt^2  +  y(t)  = μ(1-y(t)^2)dy(t)/dt 

 但し、μ>0 

と表せます。
 

ここで、μ=0とおけば

理系のひとにはなじみ深い

2階の線形微分方程式

   d^2y(t)/dt^2  +  y(t)  = 0

になります。

 

一般的には

   d^2y(t)/dt^2  +  (ωn)^2・y(t)  = 0

のほうが

よく見る形ですね。

ここでは ωn=1として話を進めます。

 

よく知られているように一般解y(t)は

 y(t)= c1・cos(t) + c2・sin(t)

 ただし、c1,c2は任意の定数

と書けます。

 

初期値:t=0のとき、  dy(0)/dt=0、y(0=1とすれば

c1=1、c2=0 になりますね。

よって この初期値での厳密解は

y(t)= cos(t)となります。

なお、y(t)の周期Tは、T=2π=6,28・・・ 秒となり

周波数fは、f=1/T=1/2π Hz

ですね。

 

一方、ルンゲクッタ法による数値積分では
 dy(t)/dt = x(t) とおいて
 dx(t)/dt = -y(t) と式を変形して

連立方程式として数値解を求めます。

ということで二つの解 x(t)とy(t)が得られます。

 

厳密解y(t)を時間微分すれば

dy(t)/dt = -sin(t) = x(t) なので、

 

厳密解をまとめると

 y(t) = cos(t)

 x(t) = dy(t)/dt = -sin(t)

になります。

これを図で表す方法は次のようにふたつがあります。

ひとつめは横軸に時間を縦軸に

x(t)とy(t)の振幅を取ったものです。

これが図1です。

 

 

          図1

 

また、別の表現として

x(t)を横軸にy(t)を縦軸にとった

相空間として表すことができます。

これが図2です。リサジュー図形とも言いますね。

半径が1の円になります。

 

 

 

          図2

 

 

 

 

 

 

では、ここから数値積分した結果です。

 

積分する刻み幅は時間軸tで t=0.1秒を初回の刻み幅にして

tの範囲は0から409.6秒までとします。

計算結果のステップも0.1秒刻みにします。

そのあとは、前回と同様、刻み幅を1/2、1/4、1/8・・・

と小さくして積分を繰り返します。

そして、計算されたx(t)、y(t)と厳密解から

真値残差(比率)を求め

刻み幅との関係をグラフ化する手順になります。

 

まず、

積分の刻み幅と真値残差(比率)の関係は

x(t)とy(t)についてそれぞれ図3と座4のようになります。

 

ます気が付くのは、右下がりのカーブの傾きです。

1階の微分方程式のときは、刻み幅が

1/2になると残差は(1/2)の4乗になっていましたが、

今回の図3、図4は

刻み幅が1/2になると残差も1/2)になっています。

したがって刻み幅を小さくしても、

残差は1階の方程式のように急激には小さくなりません。

さらに、図3と図4を比べると

ほぼ同じになっていることがわかります。

 

 

 

 

刻み幅は初回(=0.1秒)のものから、1/2、1/4、1/8、・・・

とし最後は1/(2のお23乗)までにしました。

エクセルのマクロの処理ループさえ増やせば

いくらでも小さくできますが・・・

とりあえず10数時間程連続で動かしてここで止めました。

 

 

          図3

 

 

          図4

 

 

 

ついでに今回は、

3種類の刻み幅に対する相空間のグラフ(図5,図6、図7)

も追加してみました。

図3のグラフの赤い楕円がその刻み幅に該当します。

 

この3つは、

積分区間0から409.5秒の範囲の400から409.5秒まで、

つまり

残差が最も大きいであろう積分区間の最後の部分としてみました。

図5から図7の青いカーブは厳密解=半径1の円です。

 

まず、図5は刻み幅=0.1秒としたときの数値積分した結果です。

原点の青い点が厳密解で・・・

この刻み幅でこの区間まで積分すると

厳密解とは全くかけ離れた解になります。

真値残差(比率)の最大値が1e5なので当然か・・・

 

 

 

 

                図5

 

 

図6は刻み幅を小さくして0.1秒の1/(2の5乗)、

つまり、(0.1/32)秒としたものです。

真値残差(比率)がまだ大きいですね。

 

 

 

        図6

 

 

さらに刻み幅を小さくして図6の刻み幅の1/32つまり(01./1024)秒

としたものです。

このときの真値残差(比率)の最大値は約0.5です。

 

見た目は厳密解にかなり近くなりましたが、

グラフでもまだ違いが見えます。

 

 

 

          図7

 

 

 

ちょっとブレイクして、図5の動きが面白いので

時間tについて全積分区間の相空間を見てみます。

図8は、解としては意味を持ちませんが、

模様あるいはアート(?)

として使えそうかもですね。

 

 

          図8

 

 

 

 

 

 

 

 

 

では、話をもとに戻して

 

刻み幅が一番小さいときの解と真値残差(比率)の

相関を図にしてみました。(図9から図11)

図3と図4の横軸の一番右側の刻み幅に対応します。

真値残差(比率)の最大値はx(t)、y(t)とも約1e-5です。

 

図9はx(t)とその真値残差(比率)です。

横軸はx(t)=-sin(t)で t=0のときx(0)=0から始まり(図の赤い矢印)

-1→0→1→0→-1・・・とサインカーブで振れます。

グラフの中央x=0の周辺が開いているのは、

真値残差(比率)の分がゼロになるので、

定義できず除外しているためです。

また、x=0周辺では真値残差(比率)の分母がゼロに近づくので、

黄色い矢印「のように増加します。

さらに数値積分自体が累積加算のため、

緑の矢印のように積分が進行するにつれて

残差も増加していきます。

 

               図9

 

 

図10は積分の開始位置(赤い矢印)から

約2サイクル弱程度を取り出したものです。
 

 

           図10

 

 

図11はy(t)とその真値残差(比率)です

 

 

               図11

 

 

図12はその部分拡大です。

 

 

            図12

 

 

 

 

x(t)とy(t)の真値残差の傾向は、

初期値以外ほぼ同じになることがわかりました。

 

 

図13はx(t)とy(t)の相関をとったものです。

図の2か所のオレンジの丸印のところにピークがあり、

x(t)とy(t)が直交していて、

他方が極大若しくは極小値をもつとき、

つまり時間に対する傾きがゼロのとき

他方の時間に対する傾きが最大になり、

シーソーのような動きになります。

 

 

 

             図13

 

 

 

図14は対数表示にしたものです。

ピークになっているところ以外は特に特徴がなく

まんべんなく広がっているように見えます。

 

 

 

 

            図14

 

 

 

 

 

 

真値残差(比率)のようすが概略わかったので、

次は推定残差(比率)です。

x(t)とy(t)の推定残差(比率)はぞれぞれ図15と図16です。

 

最大値の横軸が水平になっている部分があります。

これは判定条件を満たさないデータは除外したため

結果としてこの形になりました。

いづれにしてもこの部分のデータは使用しないので、

あまり気にしないことにします。

 

 

 

          図15

 

 

 

図16も同じ傾向です。

 

 

            図16

 

 

真値残差(比率)と相対残差(残差)を比較したものが

図17から図20です。

 

図17を見ると、両者は一見一致しているようにみえますが・・・

縦軸を拡大して違いがわかるようにすると、図18になります。

 

 

 

          図17

 

図18を見ると、

真値残差と推定残差には

刻み幅の一目盛り分の差異がありますね。

これを一致させるのは、

推定残差を刻み幅ひとつ分シフトすれば良さそうです。

 

 

          図18

 

 

 

y(t)についても同じ傾向で、

図19、図20のようになります。

 

 

 

             図19

 

 

 

 

 

           図20

 

 

 

 

ということで、

x(t)について、図18の丸印の刻み幅のふたつの残差について

その相関を調べてみました。

 

すると驚くべきというか拍子抜けというか・・・

図21のように傾きが1の直線で相関係数1になってしまいました。

 

 

 

 

            図21

 

 

 

念のため、

エクセルで最小2乗法を使って直線の傾きと切片を求てみると

  y=0.999998 x  - 3.5e-13

   ≒ x

となり、一致していると言っていい結果になりました。

 

 

 

y(t)についても調べてみると、図22のように同様な結果です。

 

 

           図22

 

 

同じ計算をやってみると

 y= 0.999998084 x  - 4.25004e-13

  ≒ x

 

となりました。

 

つまり、推定残差(比率)は真値残差(比率)と等しいので、

真値残差(比率)について調べたことは

すべて推定残差(比率)に適応できることがわかります。

 

 

 

ということで、

この2階の線形微分方程式でも

推定残差(比率)と真値残差(比率)は

ほぼ一致していることがわかりました。

 

 

 

 

 

せっかくエクセルを使って解析をやっているので、

ついでに

この解の周波数をエクセルの機能を使って求めてみます。

 

実は時間データ数4096個はこのために設定したものでした。

メニューの「データ分析」の中の「フーリエ解析」機能を

マクロプログラムに取り込んで実行します。

FFTを実行するので

入力データ数は2のべき乗であることが前提で、

最大の入力データ数は4096個になっています。

 

エクセルの入出力セルを指定すれば

複素スペクトルが出力されます。

が・・・

残念ながら、マクロには複素数を扱う機能は標準ではありません。

対応方法は調べればいろいろありますが、

今回は複素数の絶対値を求めるだけなので、

これだけはマクロプログラムから文字列として

セルに直接数式を書き込んで、

セルの処理として実行させる方法をとりました。

文字列の操作はわかってしまえば意外と簡単でしたよ。

 

FFTの実行前にはハニング窓を掛けてあるので、

周波数軸上ではメインローブが広がります。

また、スペクトルの計算結果の値はFFTの原理上、

時系列データ数だけ積算され(結果として今回は4096倍され)

またスペクトルの折り返しで1/2になり、

さらに窓関数のため1/2になります。

したがって、

今回は4096/2/2=1024の値で

得られた結果を割り算しています。

 

 

ということで、x(t)についての結果の縦軸を

デシベルで表現したグラフが図23です。

x(t)、y(t)のどちらの振幅も1なので、

デシベルで表せば、20*log10(1)=0 (dB)となります。

 

必要なデータは周波数領域でこの左半分ですが、

とりあえず全データを載せてみました。

横軸は周波数で数字は

基本周波数ΔFの整数倍の値にしています。

ここでΔF=サンプリング周波数/時系列データ数

      =(1/0.1)/4096

      =0.002441・・・   Hz   です。

本来の理論周波数は 1/2π なので、これをΔFで割ると

 Ñ= 65..189・・・ になります。が

FFTでは横軸の周波数は整数となるのでピークは65になります。

 

 

 

厳密解と数値積分した時系列データに対するスペクトルの両方を

載せましたが、両者は完全に重なってしまいました。

当然と言えば当然ですが高調波は見当たらず、基本波のみですね。

赤い丸印部分を拡大したものが図24です。

 

 

          図23

 

 

         図24

 

 

さらに、窓関数の特性を考慮して 

理論上のカーブを入れてみました

図25の青い矢印が、

左から順に-6dB、0DB、-6dBとなる周波数です。

 

 

グラフ上での確認なので定量的なことまではわかりませんが

傾向は同じですね。

 

 

               図25

 

 

なお、

y(t)はx(t)と全く同じ結果になったので、ここでは省略します。

 

 

 

 

 

今回はx(t)とy(t)の2種類の解があるので、両方を調べました。

データ量も2倍になって、ちと大変でした。 (^^;

 

 

今回も前回に続いて、

厳密解のわかっている

1階の線形微分方程式と非線形微分方程式を解いて、

真値残差と推定残差(比率)を比べてみます。

 

 

 

ひとつめは

微分方程式    dy/dx = 1/x

で表されるものです。

 

これも簡単に解くことができて、

初期値をY(0.1)= log(e)[x] とすると

        y = log(e)[x] 

となりますね。

xの範囲を例えば0.1から10として、

グラフ化すると図1になります。

 

 

                図1

 

図1で丸印のついた部分を拡大したものが図2です。

 

 

 

                 図2

 

 

この図には、の刻み幅を0.1で数値積分したものを

重ねてみましたが、グラフ上では完全に重なってしまい

区別がつきません。(当然それなりに違いはあります。)

 

では、

刻み幅と真値残差(比率)の関係を図3に示してみます。

 

ただし、今回はx=1のとき真値y=0になって、

真値残差(比率)の分母がゼロになるので、

真値残差(比率)は無限大になります、

したがって、この1点は除外します。

 

図3の横軸が刻み幅で右方向が小さくなります。

また、

縦軸は対数スケールで示した真値残差(比率)で

下方向が小さくなります。

 

 

 

図3

 

 

この図3も前回と同様な傾向を示していますね

つまり、刻み幅が小さくなれば真値残差も小さくなっていきますが、

ある閾値を超えると、(図3の赤と緑色の矢印の部分)

逆に増加方向に転じます

図3では最小値がひとつ抜けていますが

これは結果がゼロになって

対数表示では表せないので抜かしています。

 

さらに、図4のように

推定真値(比率)についても同様な結果になります。

なお、分母がゼロになるy=0の1点は除外します。

 

 

 

 

                図4

 

 

図3のような抜けは見られませんが、ほぼ同じなのがわかります。

このとき、矢印に相当した刻み幅のときの

変数xと推定残差との関係をグラフにしたものが図5です。

規則性がありますが、

この理由は・・・深く追求しないことにします。  (^_^;)

数値積分のルンゲクッタ法のアルゴリズムと

関係があるかもしれないのですが、

よくわかりませんでした。

 

 

 

 

                図5

 

 

では、真値残差と推定残差の差を比較するために

グラフを重ねたものが図6です。

これも前回と同様にほぼ重なってしまいました。

ただし、縦軸は対数表示なので小さな差異は不明瞭です。

 

 

 

 

             図6

 

この例の場合も、

評価式の推定残差(比率)をそのまま使ってよさそうですね。

 

さらに真値残差と推定残差の最大値、最小値が変数xに対して

とのようになっているかを調べたものが図7です。

図6の刻み幅は図6の赤い矢印に対応しています。

図7で赤い丸印が各々の最大値を、

緑色の丸印が各々の最小値を示しています。

ます、ふたつの残差カーブは明らかに違っていて、

推定残差はxの値の最大値で最大になっています。

それに対し、真値残差はxがややY小さいときに

最大値になっています。ふたつの赤い丸印=

最小となる位置xも違っています。

が、

今考えているのは、

積分範囲の推定残差(絶対値)のおおよその値が

わかればいいので

図7の黄色い線より下に真値残差があれば

それはそれで充分ということですね。

 

 

 

 

 

                  図7

 

図7ではそのようになっています。

ここで、図7の縦軸を対数表示に変えたものが図8です。

 

 

 

                図8

 

これも表現を変えただけです。

 

では残差(比率)の分母がゼロになるy=0の周辺、

つまりx=1の周辺をみてみます。これが図9です。

 

 

 

 

 

図9

 

当然といえば当然ですが、

x=1周辺では残差が増加しています。

 

図10は、ふたつの残差の相関です。

表現を変えただけですね。.

 

 

               図10

 

 

 

ということで、ふたつめの例でも

推定残差の評価式(の最大値)は

おおよそ一致して、良さそうな結果になりました。

 

 

 

 

 

次は、いよいよ(?)1階の非線形微分方程式です。

とは言っても厳密解がわかっている珍しい(?)例です。

 

微分方程式は

     dy/dx + y^2 + 2y  - 3 = 0

です。

初期値は x=0のときy=5 とすると 

解は  y = 1 + 4/ { 2*exp(4*x) - 1}

になります。

図11がこのグラフです。

変数xは0から5としています。

 

 

 

 

                 図11

 

横軸xを対数表示にしたものが図12です。

ただしx=0は表現できないのでx=0.1からにしています。

この図では厳密解と数値積分した値を表示してみましたが、

完全に重なって区別がつきません。

 

 

 

               図12

 

 

では、相対刻み幅と真値残差(比率)の関係です。(図13)

これも前例と似たような傾向ですね。

 

 

               図13

 

図14は変数xに対する真値残差(比率)の関係です。

xの増加に伴って残差が一見小さくみえるカーブですが・・・

 

 

 

               図14

 

 

図15は、図14の縦軸を部分拡大したものです。

一旦残差が小さくなった後、また増加に転じています。

特に丸印をつけた黄色の刻み幅が小さいカーブが顕著です。

 

 

           図15

 

 

 

図16のようにさらに拡大すると、

ごちゃごちゃしてわけがわからなくなります。

 

 

 

              図16

 

 

 

ということで、図15の丸印に着目したものが図17です。

刻み幅が小さくなると

積分の積算による残差の影響だと思うのですが

詳細は不明です。

 

 

 

               図17

 

 

 

 

 

 

では、ここから推定残差(比率)になります。

まず、相対刻み幅と推定残差(比率)の関係が図18です

赤い矢印が極小になった部分です。

 

 

                 図18

 

 

 

変数xに対する推定残差(比率)が図19です。

 

 

               図19

 

 

 

図20が図19の縦軸を部分拡大したものです。

 

 

                図20

 

 

 

では真値残差と推定残差の比較です。

ふたつの残差(比率)を重ねたのが図21です。

対数表示ですが、ほぼ重なっています。

 

 

               図21

 

 

図22は変数xに対するふたつの残差(比率)も関係です。

パッと見て規則性はなさそうですが、

赤い丸印の位置の最大値は両者はほぼ一致しています。

緑色の丸印の最小値はバラバラですね。

しかし少なくとも、

推定残差の最大値を示す黄色い横線よりも

真値残差はぼぼ同じかそれ以下なのがわかります。

 

 

 

図22

 

 

 

図23はふたつの残差の相関の対数表示です。

黄色の直線はy=xで完全な正の相関ならば、

このカーブ上に乗りますが・・・バラバラですね。

 

 

 

                図23

 

 

図24は、縦軸、横軸のスケールを変えたものです。

 

 

 

 

               図24

 

 

今回のふたつの例でも

推定残差(比率)の最大値は真値残差(比率)の最大値

とザックリ言って同じになることがわかりました。

 

ということで、この例でも

推定残差の評価式(の最大値)は

おおよそ一致して、良さそうな結果がでました。

 

 

こんばんは

 

 

 

またまた小難しいテーマになりますが、

興味のあるかたはお読みくださいませ。

 

 

 

解析的に解けないが、数値積分すれば解が求められるという

非線形微分方程式の解法には昔から興味がありました。

 

10年くらい前に、一度、表計算ソフトのエクセルを使って

解いてみようとトライしたことがあります。

計算式をチマチマとセルに入力して、コピペを繰り返して、

なんとか解らしきものはグラフの形になったのですが、

解の質=有効桁数・・・

要するに、

この答えはどれくらいの桁まで正しいのかわからない・・・

一桁?、二桁?、・・・・・?

とりあえず計算の条件を変えて違いを調べるとなにかわかるかも?

ということでやり始めたところ、

エクセルの使用セルの量が爆発的に増えて、

ファイルの容量も数100メガバイトに膨らんでしまい、

開くだけでも10分近くかかるような状態でした。

 

エクセルは、セルの中の計算式はファイルを開いたときに

実行するのですね。

計算式の量が少ないときには開いたとたんに終了するのですが、

(ふつうは問題ない時間です、)

その量が膨大になると開くだけでも時間が掛かってしまいます。

そんなこんなで、中途半端なまま、自主的に終了していました。

まあ、誰に言われたことでもなく、

興味本位で始めたことなので、大勢に影響はないのですが・・・・・

それでもときどきファイルを開いては、

これなんとかしたいなあ・・・と思いつつ、

気が付けば10年ほど月日が経っていました。 (´・ω・`)

 

 

最終的には非線形微分方程式を解くのが目標ですが、

まずは厳密解がわかtっている簡単な線形の方程式を解いて

その性質、

とくに推定残差(厳密解との差)を評価する計算式

(らしきものでもいいので)が見つかれば、

それを使って解析的な厳密解の残差を推定したいなあ

と思っています。 

 

 

 

さて、数値積分の計算結果は一般に次の式になります。

 

 

  計算結果の値 = 真値 + 残差

 

になるので、変形すると、

  残差 = 計算結果の値 ー 真値

両辺を真値で割って。

残差 / 真値= (計算結果の値 ー 真値) / 真値

になります。

 

具体的な数字では、

例えば 

計算結果の値=11、真値=10 とすると

残差 / 真値= (計算結果の値 ー 真値) / 真値

         = (11 ー 10) / 10

         = 0.1

です。

 

ここで、今、計算結果の値だけはわかっていて、

もし、

何らかの方法で 「残差 / 真値」 を知ることができれば

計算結果の値 x 「残差 / 真値」 

を計算すればおおよその残差を推定できます。

 

上の例では

   推定残差 

 = 計算結果の値 x 「残差 / 真値」

 = 11 x 0.1 = 1.1

です。

推定残差にも±の幅があると考えて、

計算結果は 11±1.1 程度の範囲内にあることになります。

かなりザックリ言えば、

二けた目が怪しいから信用できるのは一けただけ 

ということですね。

この 「残差 / 真値」に相当する式を探していきます。

 

実際に数値積分に使うツールは表計算ソフトのエクセルです。

とは言っても、セルに計算式を埋め込む普通の方法では、

あまりにも作業時間やファイルの容量が増えてしまうので、

やってられない・・・

 

これ過去に経験済みということで、

今回はエクセルのマクロ機能を使ってプログラムを組みました。

エクセルのマクロは2000年代くらいから10年ほど使っていましたが、

ここ10年くらいはとんとご無沙汰しています。

それで、復習の意味もあって、改めてプログラミングです。

 

とは言っても(この言葉多いですね。)、

 

セロから始めたわけではなく世の中に出回っている

数値積分のサンプルプログラムをベースに

アレンジしてみました

 

前置きが長くなりましたね。

 

 

 

 

では、ここからが本筋です。

 

 

まず、

サンプルプログラムにも入っている1階の線形微分方程式が

こちらです。

 

  dy/dx=-2xy

 

この微分方程式は変数分離すると簡単に解けてしまいます。

式を変形して

     dy/y=ー2xdx

これを積分して

  ∫(1/y)dy=-∫(2x)dx

 ∴  loge(y)=-x^2 +c1

  (c1は任意の定数)

さらに変形して

   y=c・exp(-x^2)

  (cは任意の定数で、c=exp(c1) )

ですね。

 

このように方程式の厳密解がわかっていますから、

数値積分で解いた結果と比較できますね。

 

積分にはサンプルプログラムに使っている

ルンゲクッタ法で行いました

 

計算するにあたって、決めないといけないのは、

xとyの初期値とxの範囲、それにxの刻み幅hですね。

特に刻み幅hの値は重要です。

hを決めれば、淡々と計算すればそれで終わりですが、

今回はhをあるひとつの値(これをhの初期値とします。)にして

決めたxの範囲の各々のyを計算します。

次にhを半分にして同じように計算し、さらにその半分・・・

というように複数回同じことを繰り返します。

 

つまり、刻み幅hを

h、h/2、h/4、・・・、h/(2のべき乗)  のように繰り返すわけです。

ケースバイケースですが、

今回は、1/(2の10乗)から1/(2の20乗)くらいで

様子をみながら試行錯誤でやってみました。

同じ計算範囲で刻み幅hを小さくするので、

当然計算量は増えます。

hを半分にすれば2倍、・・・・1/1024にすれば1024倍・・・

1/(2の20乗)にすればとてつもなく膨大な量になります。

まあ、私が計算するわけでもなく、

PCの解散が終わるまで

数時間程度待てばいいだけのことですが。

 

マクロ内で定義した繰り返し数の設定を変えるだけで済むように

プログラムを作ったので、

デバッグするときはこれを小さくしたりと

いろいろ工夫したつもりです。

 

同じ処理(計算)が何度でも簡単にできるのも

マクロの強みですね。

ただ、長時間(例えば数時間)マクロを走らせっぱなしだと

windowsから応答なしのメッセージが返ってきて

気持ち悪い状態になります。

マクロ自体は動作しているので問題はないのですが・・・

これを回避するためにマク処理のきりのいいところに

「Doevents」コマンドを入れて、

一旦windousに返すという処理を入れたりしています。

 

 

 

さて、出てきた計算結果の料理方法です。

 

刻み幅hを設定して変数xを変えながらyを計算していきます。

ひとつのhについて計算が終わると

さらにhを半分にして同じことを繰り返します。

 

このとき、

真値をy_ture=f(x)、積分結果をy_cal=g(x,h)とおくと、

積分結果は真値と残差ε(x,h)の和になるので

  y_cal = y_ture + ε(x,h)

  または

  g(x,h) = f(x) + ε(x,h)

と表すことができます。

残差ε(x,h)は未知数で、

真値f(x)も不明ならばこれも未知数になります。

刻み幅hを変えたときの計算結果について考えると

変数xが同じ値ならば

真値は変わらず残差だけが異なることになります。

つまり

x=x1、h=h1及びh=h2(h1≠h2)とおくと

  g(x1,h1) = f(x1) + ε(x1,h1)

及び

  g(x1,h2) = f(x1) + ε(x1,h2)

なので、辺々の差を取れば

 g(x1,h1) - g(x1,h2) = ε(x1,h1) - ε(x1,h2)

となります。

ただ、このままでは「残差 / 真値」の形にならないので、

若干発想を転換して、式を変形します。

  y_cal = y_ture + ε(x,h)

      = y_ture ・  { 1 + ε(x,h) / y_ture }

または

  g(x,h) = f(x) + ε(x,h)

      = f(x)  ・{ 1 + ε(x,h) / f(x) }

と変形しておいて、 先に計算した g(x1,h1) - g(x1,h2) を

y_cal またはg(x,h) で割り算します。

 

すると、一応「残差 / 真値」の形が出てきます。

まず、g(x1,h1) で割ると

 

{g(x1,h1) - g(x1,h2)} / { g(x1,h1) ]

= { ε(x1,h1) - ε(x1,h2) } 

      /    [ f(x1)  ・{ 1 + ε(x1,h1) / f(x1) } ]

= { ε(x1,h1) - ε(x1,h2) }  /  f(x1) 

      /   { 1 + ε(x1,h1) / f(x1) ]

≒ { ε(x1,h1) - ε(x1,h2) }  /  f(x1) 

      ・  { 1 - ε(x1,h1) / f(x1) }

 ただし、 

ε(x1,h1) / f(x1) << 1 が成立するものとします。

 

次に g(x1,h2) で割ると

{g(x1,h1) - g(x1,h2)} / { g(x1,h2) ]

= { ε(x1,h1) - ε(x1,h2) } 

      /    [ f(x1)  ・{ 1 + ε(x1,h2) / f(x1) } ]

= { ε(x1,h1) - ε(x1,h2) }  /  f(x1) 

      /   { 1 + ε(x1,h2) / f(x1) ]

≒ { ε(x1,h1) - ε(x1,h2) }  /  f(x1) 

      ・  { 1 - ε(x1,h2) / f(x1) }

 ただし、 

ε(x1,h2) / f(x1) << 1 が成立するものとします。

 

二つの式を辺々引き算すると

 

左辺 = {g(x1,h1) - g(x1,h2)}

 ・ [ {1 / g(x1,h1) } - {1 / g(x1,h2) } ]

 

 

右辺 = { ε(x1,h1) - ε(x1,h2) }  /  f(x1) 

・  [ 1 - ε(x1,h1)/f(x1)  - 1 + ε(x1,h2)/f(x1) ]

 = -1 ・ { { ε(x1,h1) - ε(x1,h2) }  /  f(x1)  }^2

 =-1・{ (ふたつの刻み幅の残差の差/ 真値)の2乗 }

 

となります。

右辺のマイナスは両辺に-1を掛けて正の値にしておきます。

 

左辺は

刻み幅の異なるふたつの数値積分した計算結果から求められ

これが「残差 / 真値」の形の2乗になることがわかります。

したがって。左辺のルート

(これを評価式と呼ぶことにします)

を計算すれば

「残差 / 真値」の形となります。

これを「推定残差(比率)」と呼ぶことにします。

 

問題は

この「ふたつの刻み幅の残差の差 { ε(x1,h1) - ε(x1,h2) } 」

と現実の残差の関係です。

直観的には何らかの関係がありそうに思えますが

この挙動が見えないので、

実際に計算して、「真値残差」と比較していきます。

 

 

 

 

 

ではまた  

部分方程式 dy/dx=-2xy に話題を戻します。

 

 

 

まず、図1がdy/dx=-2xyの厳密解のグラフです。

初期値はx=0のときy=1としました。

y=exp(-x^2)をxが0から10までプロットしました。

数値積分もこの範囲で行います。

 

普通に見るグラフですね。

 

 

                図 1

 

このままでは縦軸yの範囲が狭くて見ずらいので、

図2のように縦軸を対数表示に変えて

さらに数値積分した結果をふたつ重ねて比較します。

xが4より小さいときは3本のカーブはほぼ重なっていますが、

xがそれより大きくなると次第にずれが大きくなりますね。

 

 

               図 2

 

 

図2の丸印辺りを拡大したものが図3です。

拡大すると文字通り桁違いの差がみえてきます。

 

               図 3

 

 

もっとも、その大きさ自体十分小さくてほぼゼロになりますが・・・

 

 

では、数値積分した結果について。

まず、相対刻み幅と真値残差(比率)の関係が図4です。

ここで、横軸の刻み幅は初回を0.1として

これを1とした相対値で示しています、

右方向で刻み幅が小さくなります。

縦軸は真値残差(比率)を対数表示で表しています。

上方向で残差が大きくなります。

なお、青いカーブは残差の最大値を、

オレンジ色は最小値を示しています。

なお、真値残差(比率)は絶対値としています。

 

 

 

              図 4

 

 

 

直観的には刻み幅が小さくなれば残差も小さくなるはずで、

図4の赤色と緑色の矢印の刻み幅の位置までは

確かにそうなっています。

が、

さらに刻み幅が小さくなるとそれ以後は逆に増加に転じます。

これは数値積分が本質的に積算処理の連続であることに

起因していて、

積算回数は刻み幅に反比例して増加し、

わずかな残差が回数分積算された結果です。

刻み幅は

やみくもに小さくすればいいものではないということです。

まさに「塵も積もれば山となる」ですね。

 

 

次に、

評価式を使った推定残差(比率)と相対刻み幅の関係が図5です。

図4と同じ条件にしています。

二つの図を比べると同じ傾向なのがわかります。

 

 

             図 5

 

図6が刻み幅をパラメータにして

変数xと推定残差(比率)の関係です。

横軸がxで右方向で増加します。

また、縦軸は推定残差(比率)で対数表示しています。

パラメータは刻み幅で下方向で小さくなります。

 

 

             図 6

 

変数xが増加すると推定残差(比率)も増加していて、

数値積分の積算の結果ですね。

 

 

図7は、

図5に重ねて推定残差(比率)の漸近カーブを加えたもので、

緑色と水色の破線がそれぞれ減衰方向の最大値、最小値の

漸近カーブになります。

水色の矢印方向の傾きは刻み幅の4乗です。

また紫色とオレンジ色の破線は増加方向の漸近カーブで

色の矢印方向の傾きは刻み幅の-1乗になっています。

推定残差(比率)の最大値、最小値の極小点は

それぞれ赤色と緑色の矢印で示しています。

 

 

 

            図 7

 

 

 

では、図4と図5を重ねてみましょう。

図8になります。

対数表示ですが、ほぼ一致しているといえますね。

 

 

 

            図 8

 

 

 

次に、

変数xに対する二つの残差(比率)の違いを調べてみました。

刻み幅は図8の赤色の矢印に対応した値としました。

図9では

真値残差(比率)は絶対値ではないので、±の極性があります。

 

              図 9

 

 

xの増加とともに単調増加とおもいきや、

どちらも増加したり減少したりやや複雑な動きをしています。

 

 

次に、

図9の絶対値をとって、

最大値と最小値にマークしたものが図10です。

赤い丸印が最大値、緑色の丸印が最小値で、

オレンジ色の直線が推定残差(比率)の最大ラインです。

このラインより下なら問題無しです。

 

 

 

                図 10

 

 

 

図11では、

横軸に真値残差(比率)、縦軸には推定残差(比率)として

相関図としてみました。

赤と緑の丸印は図10と同じでオレンジ色も同じ意味です。

 

 

 

               図 11

 

 

 

というわけで

今回の例の結論は、

図8のように真値残差(比率)と評価式の相対残差(比率)が

ほぼ一致したというこどですね。

 

次は、

やはり厳密解がわかっている別の微分方程式について

調べてみます、

 

 

最後までお読みくださったかた、

大変お疲れ様でした。

& ありがとうございました。。

 

こんばんは

 

またまた久しぶりの更新です。 (^_^;)

 

 

なにやら 不思議なタイトルですが、

説明はあとにして

まずは図形(グラフ)をご覧ください。

 

 

下に下がるにつれて時間が進行します。

 

始めは普通の立方体ですが・・・・

 

 

 

立方体の角に少しずつ亀裂(?)が出てきます。

不穏な雰囲気?

 

 

次第に角全体に広がって・・・

 

 

 

なぜかツノ(?)が出てきました。やや不気味です。

 

 

 

 

 

これは上面から見た図です。

 

次第にツノが成長して上に伸びた分、

中央の平面が下がってきました。

 

これも上面から見た図ですね。

 

 

ツノの高さ(縦軸の目盛り)がどんどん大きくなってきます。

 

 

 

とうとう最後には、

縦軸の目盛りがとてつもなく大きな値になりました。

 

 

 

これも上面から見た図です。

 

 

 

この一連の流れは私が勝手に作ったものではなく、

実は薄い板(平面)の中央1/4に熱を加えたときの

熱の伝わり方をエクセルのマクロを使って計算したものでした。(^^;

ただし、

安定した解になる条件を満たしていない結果のグラフです。

 

この条件を気にせずにプログラムしていたら

たまたま面白い結果が出てきました。

これこれで楽しいものです。

 

もとになった数式は、

空間2次元の拡散方程式という偏微分方程式で、

これをPCで計算するように離散化したものです。

ネット検索すればいくらでも情報は手に入りますね。

 

PCで微分方程式を解くのは昔から興味がありまして、

ときどき思いついてはチャレンジしています。

が・・・めんどくさい・・・いづれまた・・・の繰り返しです。

今回はエクセルのマクロの復習を兼ねて、若干本気モードです。

 

 

ついでに条件を満足した解のグラフは、このようになります。↓

きれいなんですが、あまり面白みはないですね。