des*_*esu 1 math erlang integral derivative
我知道Erlang通常不会用于这类事情,但是任何机会都有编写积分/派生的数值函数(比如GNU Octave中的四元组,取功能和两个数字)?
您可以通过功能性编程方法解决问题.
如您所知,衍生物定义为 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.
Run Code Online (Sandbox Code Playgroud)
解释器中的用法示例:
1> c(calc).
{ok,calc}
2>
Run Code Online (Sandbox Code Playgroud)
让我们定义Sqr函数:(X*X)
2> Sqr = fun( X ) -> X * X end.
#Fun<erl_eval.6.82930912>
3>
Run Code Online (Sandbox Code Playgroud)
让我们从Sqr得到衍生物
3> DSqr = calc:d( Sqr, 0.001 ).
#Fun<calc.0.111170057>
4>
Run Code Online (Sandbox Code Playgroud)
检查Sqr功能:
4> [ Sqr( X ) || X <- lists:seq( 1, 10 ) ].
[1,4,9,16,25,36,49,64,81,100]
5>
Run Code Online (Sandbox Code Playgroud)
检查导数(如你所知 - (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]
Run Code Online (Sandbox Code Playgroud)
由于使用有限值dX = 0.001 - 我们没有得到明确的结果,但它非常接近真实[ 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 ]
可以以类似的方式定义积分函数.确定积分是:

所以antiderivative是:

F(0)- 不变.并且可以通过任何数值积分算法表示定积分.
| 归档时间: |
|
| 查看次数: |
665 次 |
| 最近记录: |