3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【kintone】標準機能だけで平方根の計算をしてみる

Last updated at Posted at 2020-11-05

こんにちは!
平方根の計算ができたらいいなぁ・・・(´-`).。oO
と思うこと、ありますでしょうか?
ないですよね?

平方根が必要になることはナイもしれませんが、
標準機能だけで(無理やり感はありますが)計算できましたので記事にしてみます^0^

ニュートン法を使う

平方根を求めるには、ちょっと数値計算の知識が必要そうです。
ニュートン法という方法を使ってみたいと思います。
仕組みをまとめてみたので気になる方は読んでみてください。
ニュートン法のことはいいからやり方~という方は「アプリを作る」まで飛んでください

他の方法も試したのですがニュートン法が一番楽そうだったのでこれにしました。

ニュートン法とは

今回は平方根たとえば$x^2=A$のような$x$を求めたいので

f(x)=x^2-A

な、$y=f(x)$の2次関数のグラフがあるとします。↓こんな。

20201104_041120164_iOS.png

とある$x$座標を$x_n$として、$f(x_n)$に接する直線と$x$軸の交点の$x$座標を$x_{n+1}$とします。
$n$から$n+1, n+2, n+3,...$と続けていくと、$y=f(x)$のグラフと$x$軸との交点(つまり$x^2=A$の解)が求められるという仕組みです。

直線の傾きを求める

直線の傾きを求めていきます。
先程の図から、2種類の方法で直線の傾きを求めることができます

まずは微分です。$y=f(x)$のグラフに接する直線の傾きは「微分」で求めることができます。

傾き= f'(x) ・・・・①

次は見た目の傾き。傾きは、三角形で言うところの、$\frac{高さ}{底辺}$で求めることができます。
図の青線と赤線でできる三角形を見てください。
image.png

底辺は$x_n-x_{n+1}$、高さは$f(x_n)$で表すことができます
というわけで、

傾き = \frac{f(x_n)}{x_n-x_{n+1}} ・・・・②

①も②も同じ傾きのことを表しているので、

 f'(x_n) = \frac{f(x_n)}{x_n-x_{n+1}} ・・・・③

と表すことができます。

一番最初に$f(x) = x^2 - A $としていました。これを式に代入していきたいと思います。
まずは微分して・・・

\\f(x) = x^2 - A

\\f'(x) = 2x

\\つまり

\\f(x_n)=x_n^2 -A

\\f'(x_n) = 2x_n

③に代入していきます

\\ f'(x_n) = \frac{f(x_n)}{x_n-x_{n+1}} 

\\ 2x_n = \frac{x_n^2-A}{x_n-x_{n+1}} 

これを$x_{n+1}=$の形にしてまとめると、最終的に↓のような形になります。


x_{n+1}=\frac{1}{2}(x_n + \frac{A}{x_n})

この、最後のまとまった式を使って、平方根を計算していきます。

$x_0$に適当な値を入れて、$x_1, x_2, ..., x_{10}$ のように10回くらい繰り返すとだんだん平方根の値に近づいていきます。

$x_0$の初期値を適切な値にするのが大切ですが、今回はAの値を初期値にしたいと思います。
また、平方根なので、プラスとマイナスがありますが、プラスの方だけ求めます。

アプリを作る

こんなふうに数値フィールド1つと、計算フィールドを10個並べます。
Aの最小値を0にしておくといいと思います。

数式は後述します。

image.png

フィールドの種類 フィールドコード 計算式
数値 A (手入力)
計算 Aの平方根 IF(A=0,0,x9)
計算 x0 (A + 1) / 2
計算 x1 (x0 + A/x0) / 2
計算 x2 (x1 + A/x1) / 2
計算 x3 (x2 + A/x2) / 2
計算 x4 (x3 + A/x3) / 2
計算 x5 (x4 + A/x4) / 2
計算 x6 (x5 + A/x5) / 2
計算 x7 (x6 + A/x6) / 2
計算 x8 (x7 + A/x7) / 2
計算 x9 (x8 + A/x8) / 2

動作確認&まとめ

大きい数になるともしかしたら、収束しないなどあるかもしれませんが、その時は$x_n$の数を増やしてください^^
というわけで、平方根(プラス)を求めることができました。
heihou.gif

世の中のいろんな公式等を他にも試してみたいと思います^0^

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?