さて、反復計算、ニュートン・ラフソン法が使えるようになったということで、このブログで一番ヒット数が多い計算
「円の弧長,弦長,矢高,半径のどれか2つを与えて残りを計算」をkeisan.casio.jpにUP!
円の弧長,弦長,矢高,半径のどれか2つを与えて残りを計算
をLAMBDA関数を使ってやってみよう。

ソースコード(画像)

ソースコード(テキスト)
弧長と矢高から弦長
= lambda(r,
let(L, index(r,1,1),
h, index(r,2,1),
a, 2*h/L,
x_0, 2*a,
s, sequence(100),
x_1,reduce(x_0, s,
lambda(x, dummy,
mod(x-(-a*x*x+x*(1.-cos(x)))/(x*sin(x)-1.+cos(x)),2*pi())
)
),
q, sequence(3),
th, 2*x_1,
r, L/th,
d, 2*r*sin(x_1),
ifs(q=1,th*180/pi(), q=2, r, q=3, d)
)
);
弧長と弦長から矢高
= lambda(r,
let(L, index(r,1,1),
d, index(r,2,1),
c, d/L,
x_0, sqrt(3*(1-c)),
s, sequence(100),
x_1,reduce(x_0, s, lambda(x, dummy,mod(x-((x*sin(x)-c*x*x)/(x*cos(x)-sin(x))),2*pi()))),
q, sequence(3),
th, 2*x_1,
r, L/th,
h, r*(1-cos(th/2)),
ifs(q=1,th*180/pi(), q=2, r, q=3, h)
));
弦長と矢高から弧長
= lambda(r,
let(d, index(r,1,1),
h, index(r,2,1),
a, h/d,
x_0, 4*a,
s, sequence(100),
x_1,reduce(x_0, s, lambda(x, dummy,mod(x-((1.-cos(x))/(2.*sin(x)) - a)/((1.-cos(x))/(2.*sin(x)*sin(x))),2*pi()))),
q, sequence(3),
th, 2*x_1,
r, d/(2*sin(x_1)),
L, r*th,
ifs(q=1,th*180/pi(), q=2, r, q=3, L)
));
使い方:
弧長と矢高から弦長 (A1:A2), 弧長と弦長から矢高(A1:A2),弦長と矢高から弧長(A1:A2)のように2つのセル範囲を選ぶ。
パラメータが入っているが、並びは関数の名前と以下の図を参照。すると3つの出力(中心角、半径、未知数)が自動で出てくる。

これもLAMBDA関数さえ使えるExcelバージョンなら結構実用的ではなかろうか。
過去にやったもの:
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も分析ツールもなしに関数として実現する。
ExcelでLAMBDA関数が使えるようになった(8) 4段4次のルンゲクッタ法をLAMBDAだけ(VBAもセルの計算も使わずに)で実現、RK4(t, x, y, z)だけで次の時間ステップが計算できるようにした。例はもちろんローレンツ方程式。
ExcelでLAMBDA関数が使えるようになった(9)リーマン・ゼータ関数ζ(z)をLAMBDA、REDUCE、SEQUENCE、複素数関数を組み合わせて=Zeta(1/2+2i)などで計算できるようにした。
ExcelでLAMBDA関数が使えるようになった(10) Sパラメータのような複素数データの実部・虚部のRIとデシベル、位相のdBを2列を選択するだけで dB2RI(範囲), RI2dB(範囲)でLAMBDA, MAKEARRAY,LETを使って相互に計算できるようにする。
ExcelでLAMBDA関数が使えるようになった(9の追記)リーマン・ゼータ関数ζ(z)をLAMBDA、REDUCE、SEQUENCE、複素数関数を組み合わせて=Zeta(1/2+2i)などで計算できるようにしたので、それをMAP関数を使って3次元グラフにしてみる。
ExcelでLAMBDA関数が使えるようになった(11) 複数のセルの並びから1つ飛ばしとか2つ飛ばしとかでデータを取り出す関数PickOut(範囲、何行ずつか、何列ずつか)を作った。よく変なデータの並びで取り出すのがめっちゃ困ることがあるので。
ExcelでLAMBDA関数が使えるようになった(12) VBAを使わずに複素行列の積、逆行列などをLET, MAKEARRAY, INDEXと実行列のMMULT, MINVERSEなどを組み合わせて実現する(IMMULT, IMINVERSE)
ExcelでLAMBDA関数が使えるようになった(13) 工程能力指数Cpkと平均と標準偏差、最大、最小、変動係数CVを一度に求める関数DataAnalysisを作った。=DataAnalysis(データ範囲, 上限値, 下限値)のようにつかう。
ExcelでLAMBDA関数が使えるようになった(14) REDUCEやSCANを使えば反復計算もできる、ということでニュートン・ラフソン法をやってみる。関数f(x)と導関数、初期値を与えると一気に計算してくれる。
コメント