2016年3月10日木曜日

Luaの関数定義

Programing in Luaの第6章の動作確認。


関数定義とは実際には「function」型の値を作成し、これを変数に代入するステートメント。
「function」型の値を無名関数と呼ぶ。
以下の2つのステートメントは同義。

function foo (x) return 2*x end

foo = function (x) return 2*x end
以下のような使い方が可能。

(ex-1) 
指定された関数の導関数を返す関数「derivative」を定義し、
  • sin(x)の導関数
  • con(x)
がx=10で一致する事を確認するサンプルスクリプト。

function derivative (f, delta)
    delta = delta or 1e-4
    return function (x)
        return (f(x + delta) - f(x))/delta
    end
end

c = derivative(math.sin)
print(math.cos(10), c(10))

<結果>
-0.83907152907645 -0.83904432662041

deltaがe^-4であるため、小数点以下5桁目で差異が生じているがほぼ一致している事が分かる。


(ex-2)
上記と同様、関数「derivative」を定義し、
  • x^3の導関数
  • 3x^2
がx=10で一致する事を確認するサンプルスクリプト。


func = function (x) return 3*x*x end
deriv = derivative( function(x) return (x*x*x) end ) 
print( func(10), deriv(10) )

<結果>
300 300.00300000893

0 件のコメント:

コメントを投稿