ソフトウェア実験室 |
指数関数近似値 |
最終更新:2006/05/05 |
既に、.NETライブラリにこれらは関数として準備されており、わざわざ自分で計算する必要はないが、ここでは指数関数の近似式(テーラ展開式)の実験として行った。
●原理
T8117 長いネイピア数 で、e のテーラ展開を、
e = (1/n!) [n:0 to ∞]
と紹介しているが、この式は、ex の X = 1 の時の形で、一般には、
ex = (Xn/n!) [n:0 to ∞]
である。ところで、
ax = exln(a)
であるから、
ax = ((Xln(a))n/n!) [n:0 to ∞、 a > 0]
となる。ここで、a = 10 とすれば、10 の指数関数値、x = 0.5 にすれば、a の平方根などが計算できることになる。
●実験方法
10x
、Xの平方根、立方根を求める。Xは任意の自然数とし、展開の回数は、結果の変化がなくなった時か、100回のどちらかとする。収束することが分かっているし、この演算は有限長なので、ある有限の回数で結果が一定になることが予測される。
●結果
○10x
○平方根
○立方根
●考察
いずれも、20-40回で収束している。これは、Doubleの打ち切り誤差のお陰で、もし、無限長演算であれば、永遠に収束しないだろう。無限に真値に近づき続けるからである。
●実験のコード
Dim JOB As Integer
Dim X, W, V, Z, A, PW, Er, Cf As Double
Dim Hdr() As String = {"N", "近似値", "誤差[%]"}
W = 1
Select Case JOB
Case 0
'10x
If Abs(X) > 20 Then
MsgBox("X の値が制限外です。",
MsgBoxStyle.Critical)
Exit Sub
Else
V = 10 ^ X
txtC.Text = V.ToString
Cf = Log(10)
A = X
End If
Case 1
'平方根
If X <= 0 Then
MsgBox("X の値が制限外です。",
MsgBoxStyle.Critical)
Exit Sub
Else
V = Sqrt(X)
txtC.Text = V.ToString
Cf = Log(X)
A = 0.5
End If
Case 2
'立方根
If X <= 0 Then
MsgBox("X の値が制限外です。",
MsgBoxStyle.Critical)
Exit Sub
Else
V = X ^ (1.0 / 3.0)
txtC.Text = V.ToString
Cf = Log(X)
A = 1.0 / 3.0
End If
End Select
frgR.SetGridConstruction(3, 101, 0, 1)
frgR.RowHeader(0) = Hdr
Z = 1
PW = 0
For i = 1 To 100
Z = Z * Cf * A / i
W = W + Z
frgR.BeginUpdate()
frgR(0, i) = i
frgR(1, i) = W
Er = (W - V) / V * 100
frgR(2, i) = Er
If W = PW Then
Exit For
Else
PW = W
End If
frgR.EndUpdate()
frgR.TopRow = i
Application.DoEvents()
Next
|