1

Erlang が一般的にこの種の用途に使用されないことは知っていますが、ひょっとして、積分/微分が既に記述されている数値関数 (GNU Octave の quad のように、関数と 2 つの数値を取る) はありますか?

4

1 に答える 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 に答える