考虑N个变量,x_1,x_2,...,x_N。鉴于i&lt; N和j < N,它保持dx_i / dx_j = delta_i,j,即当i = j时导数为1,否则为0。
虽然diff(x [i],x [i])返回1,但不幸的是diff(x [i],x [j])返回0而不是delta_i,j和sum(diff(x [i],x [j]),j = 1..N)返回0而不是1。
有没有办法获得正确的衍生而不用指定N的值?即一种可用于任何N的计算的方法。
答案 0 :(得分:0)
常规diff()
命令以文字方式处理参数。但是,您可以尝试Physics
包,并将该指标视为Kronecker delta:
restart;
with( Physics ):
Setup( metric = Euclidean ):
Define( x ):
f := diff( Sum( a[i] * x[i], i=1..N ), x[j] );
Simplify( eval( f, g_=KroneckerDelta ) ) assuming j >= 1 and j <= N; # returns a[j]