kintoneの標準機能で対数を求める #2


前回はkintoneの標準機能で自然対数を求めてみました。

ただ、前回の内容だと底は$ e $限定、真数$ X $は$ 0<X\leqq2 $の範囲にしか対応していないので、
もっと自由度を高めたいところです。

というわけで、まずは真数$ X $の範囲をできるだけ大きくできるように工夫したいと思います。

真数Xを大きくする方針

$ log_eX $において$ X = x^n $ とおくと、
$ log_eX = log_ex^n = nlog_ex $ となります。

$ x = X^\frac{1}{n} $ なので、真数$ X $を$ \frac{1}{n} $ 乗した数 $ x (x > 0) $ を真数とする $ log_ex$ を求めて $ n $ 倍すれば、
進数 $ X>2 $ の自然対数を求めることができるはず。

というわけで、

1. Xのn乗根($ X $ の $ \frac{1}{n} $ 乗)を求めるアプリ(今回)
2. 真数 $ X>2 $ の自然対数 $ lnX $ を求めるアプリ
3. $ log_aX $ を求めるアプリ

の順に作っていきます。
今回はXのn乗根を求めるアプリを作成します。

Xのn乗根を求めるアプリ

kintoneの数式には整数でべき乗する演算子はありますが、$ \frac{1}{n} $ 乗( $ n $ は整数)できる演算子がありません。
なので、計算フィールドを使ってちょっと工夫して計算する必要があります。
理屈はいいやって方は「アプリを作る」まで飛ばしてね。

ニュートン法でn乗根を求める

ニュートン法については
kintoneのアプリでニュートン法で平方根を求める方法についての過去記事でちょっと説明しました。

今回は平方根ではなくて、n乗根です。とはいえ、そんなに方法は変わらないので、
上記記事の式③を利用して計算したいと思います。
※元の式のnは「n番目」のnですが、n乗根のnとの混同を防ぐためkに変えてみました。

 f'(x_k) = \frac{f(x_k)}{x_k-x_{k+1}} ・・・・③

$ X $ のn乗根を求めたいので、$ f(x) = x^n - X = 0 $ の解を求めるとします。

\ f(x) = x^n - X\\
\ f'(x) = nx^{n-1} \\

より、③の式に代入すると $ x_{k+1} $ と $ x_k $ の関係は

\begin{align}
 nx_k^{n-1} &= \frac{x_k^n - X}{x_k-x_{k+1}}\\
 x_k-x_{k+1} &=\frac{x_k^n - X}{nx_k^{n-1}}\\

 x_{k+1} &=\frac{-x_k^n + X}{nx_k^{n-1}} + x_k\\
よって、\\
x_{k+1}&=\frac{n-1}{n}x_k + \frac{X}{nx_k^{n-1}}
\end{align}

となります。

これをアプリの数式に入れていきます。

アプリを作る

アプリを作る準備

アプリの設定で、その他の設定→高度な設定の

数値と計算の精度の桁数は
全体の桁数:30
小数部の桁数:10
にしておきましょう。

フィールドの設定

フィールド数も多くて、ちょっと大変です。
x1~x41は 20個くらいでも良いかもしれないです。

アプリ名はXのn乗根(ニュートン法)としておきましょう。
※後でルックアップしてくるときに使います。

フィールド種類 フィールド名 フィールドコード 数式 備考
数値 X X n乗根を求めたい値
数値 n n 何乗根にしたいか。デフォルト10
計算 n乗根(≧0) x41 ((n-1)/n)*x40+X/(n*x40^(n-1)) 数値は$ x_k $ の$ k $の値。41回目で収束とする。
数値 初期値 x0 初期値2にしてみました。
計算 x1 x1 ((n-1)/n)*x0+X/(n*x0^(n-1))
計算 x2 x2 ((n-1)/n)*x1+X/(n*x1^(n-1))
計算 xk xk ((n-1)/n)*xk+X/(n*xk^(n-1)) x3~x39はkに番号入れてね
計算 x40 x40 ((n-1)/n)*x40+X/(n*x40^(n-1))

できあがり

こんな感じで計算します。