Erlang が一般的にこの種の用途に使用されないことは知っていますが、ひょっとして、積分/微分が既に記述されている数値関数 (GNU Octave の quad のように、関数と 2 つの数値を取る) はありますか?
質問する
820 次
1 に答える
6
機能的なプログラムによるアプローチで問題を解決できる場合があります。
ご存じのとおり、導関数は dF(X) = ( F(X+dX) - F(X) ) / dXとして定義されます
派生関数を返す汎用関数を作成しましょう。
-module( calc ).
-export( [ d/2 ] ).
d( F, Dx ) ->
fun( X ) ->
( F( X + Dx ) - F ( X ) ) / Dx
end.
インタプリタでの使用例:
1> c(calc).
{ok,calc}
2>
Sqr関数を定義しましょう: ( X * X )
2> Sqr = fun( X ) -> X * X end.
#Fun<erl_eval.6.82930912>
3>
Sqrから導関数を取得しましょう
3> DSqr = calc:d( Sqr, 0.001 ).
#Fun<calc.0.111170057>
4>
Sqr関数をチェックします。
4> [ Sqr( X ) || X <- lists:seq( 1, 10 ) ].
[1,4,9,16,25,36,49,64,81,100]
5>
そして、導関数をチェックします(ご存知のように、(X * X)からの導関数は(2 * X)です)
5> [ DSqr( X ) || X <- lists:seq( 1, 10 ) ].
[2.0009999999996975,4.000999999999699,6.000999999999479,
8.0010000000037,10.001000000002591,12.001000000005035,
14.00100000000748,16.000999999988608,18.000999999983947,
20.000999999993496]
dX = 0.001の有限値を使用しているため、明確な結果は得られませんでしたが、実際の結果に非常に近いものです。[ 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 ]
積分関数も同様の方法で定義できます。定積分は次のとおりです。
したがって、反誘導体は次のとおりです。
F(0)
- 絶え間ない。また、定積分は、任意の数値積分アルゴリズムで表すことができます。
于 2012-08-21T10:31:28.910 に答える