« すき家でマヨにんにくファイヤー牛丼(特盛)をいただく。ちょうどいい辛さ(でも七味唐辛子は大量投下)で、ファイヤーチキンカレーよりこのトッピングは合っていると思った。 | トップページ | 新型コロナウイルス、日本の陽性者数&ワクチン接種者数総計をプロット&中国、韓国、アメリカ、ドイツ、フランス、イギリスの陽性者数もプロット(2/20更新)。日本と韓国だけが相変わらず垂直に増えてる。ワクチン接種数は微増に収まってる。 »

2022年2月20日 (日)

ExcelでLAMBDA関数が使えるようになった(8) 4段4次のルンゲクッタ法をLAMBDAだけ(VBAもセルの計算も使わずに)で実現、RK4(t, x, y, z)だけで次の時間ステップが計算できるようにした。例はもちろんローレンツ方程式。

前回、離散フーリエ変換、逆変換が1つの関数として実現できた。で、過去にもルンゲクッタ法は実装したが、セルの計算と組み合わせていたのがいまいち。Advanced Foumula Environmentも入れたので面倒な式も簡単にかける。

そこでLAMBDAだけでルンゲクッタ法を1つの関数として計算しよう。

これをエディタで入れる。

fx = LAMBDA(t, x, y, z, -10 * (x - y));
fy = LAMBDA(t, x, y, z, -x * z + 28 * x - y);
fz = LAMBDA(t, x, y, z, x * y - (8 / 3) * z);
h = 0.01;
k_x1 = LAMBDA(t,x,y,z, fx(t,x,y,z));
k_y1 = LAMBDA(t,x,y,z, fy(t,x,y,z));
k_z1 = LAMBDA(t,x,y,z, fz(t,x,y,z));
k_x2 = LAMBDA(t,x,y,z, fx( t + h/2,
                x + h * k_x1(t,x,y,z) / 2,
                y + h * k_y1(t,x,y,z) / 2,
                z + h * k_z1(t,x,y,z) / 2));
k_y2 = LAMBDA(t,x,y,z, fy( t + h/2,
                x + h * k_x1(t,x,y,z) / 2,
                y + h * k_y1(t,x,y,z)/ 2 ,
                z + h * k_z1(t,x,y,z) / 2));
k_z2 = LAMBDA(t,x,y,z, fz( t + h/2,
                x + h * k_x1(t,x,y,z) / 2,
                y + h * k_y1(t,x,y,z)/ 2 ,
                z + h * k_z1(t,x,y,z) / 2));
k_x3 = LAMBDA(t,x,y,z, fx( t + h/2,
                x + h * k_x2(t,x,y,z) / 2,
                y + h * k_y2(t,x,y,z) / 2,
                z + h * k_z2(t,x,y,z) / 2));
k_y3 = LAMBDA(t,x,y,z, fy( t + h/2,
                x + h * k_x2(t,x,y,z) / 2,
                y + h * k_y2(t,x,y,z)/ 2 ,
                z + h * k_z2(t,x,y,z) / 2));
k_z3 = LAMBDA(t,x,y,z, fz( t + h/2,
                x + h * k_x2(t,x,y,z) / 2,
                y + h * k_y2(t,x,y,z)/ 2 ,
                z + h * k_z2(t,x,y,z) / 2));
k_x4 = LAMBDA(t,x,y,z, fx( t + h,
                x + h * k_x3(t,x,y,z),
                y + h * k_y3(t,x,y,z),
                z + h * k_z3(t,x,y,z)));
k_y4 = LAMBDA(t,x,y,z, fy( t + h,
                x + h * k_x3(t,x,y,z),
                y + h * k_y3(t,x,y,z),
                z + h * k_z3(t,x,y,z)));
k_z4 = LAMBDA(t,x,y,z, fz( t + h,
                x + h * k_x3(t,x,y,z),
                y + h * k_y3(t,x,y,z),
                z + h * k_z3(t,x,y,z)));
RK4_x = LAMBDA(t, x , y, z, 
   x + h * (k_x1(t,x,y,z) + 2 * k_x2(t,x,y,z) + 2 * k_x3(t,x,y,z) + k_x4(t,x,y,z))/6);
RK4_y = LAMBDA(t, x , y, z, 
   y + h * (k_y1(t,x,y,z) + 2 * k_y2(t,x,y,z) + 2 * k_y3(t,x,y,z) + k_y4(t,x,y,z))/6);
RK4_z = LAMBDA(t, x , y, z, 
   z + h * (k_z1(t,x,y,z) + 2 * k_z2(t,x,y,z) + 2 * k_z3(t,x,y,z) + k_z4(t,x,y,z))/6);

で、例はもちろんローレンツ方程式。結果はこちら。

Rk_excel_lambda01

さらに実用的になった!

過去にやったもの:

ExcelでLAMBDA関数が突然使えるようになった。4段4次のルンゲクッタ法がワークシートだけ(VBA使わずに)で簡単に計算できるようになった。まずはローレンツ方程式を計算してみる。

ExcelでLAMBDA関数が突然使えるようになった(2) 5次のルンゲクッタフェールベルグ法でローレンツ方程式をワークシートだけで(VBA使わずに)計算

ExcelでLAMBDA関数が突然使えるようになった(3) LET、SEQUENCE、IFSと組み合わせてワンライナー(1セル)で数値積分(シンプソンの積分公式)を計算

ExcelでLAMBDA関数が突然使えるようになった(4) LET、SEQUENCE、IFSと組み合わせてクロソイド曲線を計算するオリジナルの関数を作る。セルに=Clothoid_X(A2)とか入れるだけで計算できる。

ExcelでLAMBDA関数が突然使えるようになった(5)なんと再帰まで使える。階乗とフィボナッチ数列で試してみた。

ExcelでLAMBDA関数が使えるようになった(7) 離散フーリエ変換(DFT=Discrete Fourier Transform)(修正版)と逆変換(IDFT)をLAMBDA、LET、SEQUENCE、MAKEARRAY、MAP、複素数関数(IMEXP,IMPRODUCTなど)を組み合わせてVBAも分析ツールもなしに関数として実現する。

« すき家でマヨにんにくファイヤー牛丼(特盛)をいただく。ちょうどいい辛さ(でも七味唐辛子は大量投下)で、ファイヤーチキンカレーよりこのトッピングは合っていると思った。 | トップページ | 新型コロナウイルス、日本の陽性者数&ワクチン接種者数総計をプロット&中国、韓国、アメリカ、ドイツ、フランス、イギリスの陽性者数もプロット(2/20更新)。日本と韓国だけが相変わらず垂直に増えてる。ワクチン接種数は微増に収まってる。 »

パソコン・インターネット」カテゴリの記事

学問・資格」カテゴリの記事

日記・コラム・つぶやき」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

« すき家でマヨにんにくファイヤー牛丼(特盛)をいただく。ちょうどいい辛さ(でも七味唐辛子は大量投下)で、ファイヤーチキンカレーよりこのトッピングは合っていると思った。 | トップページ | 新型コロナウイルス、日本の陽性者数&ワクチン接種者数総計をプロット&中国、韓国、アメリカ、ドイツ、フランス、イギリスの陽性者数もプロット(2/20更新)。日本と韓国だけが相変わらず垂直に増えてる。ワクチン接種数は微増に収まってる。 »

最近の記事

最近のコメント

2022年8月
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
フォト
無料ブログはココログ