如何对求和工作中的索引变量进行微分?

问题描述 投票:0回答:1

我试图用任意数量的参数的导数求和。例如。对于一个向量 函数

F(x,y)=[exp(x^3 y) - 1, y^2 - 5xy]
我想计算诸如一阶导数乘以某物的表达式。

我试过了

n := 2;
xvars := seq(x[i], i = 1 .. n);
yvars := seq(y[i], i = 1 .. n);
F := (x, y) -> [exp(x^3 *y) - 1, y^2 - 5*y*x];
seq(sum(diff(F(xvars)[i], xvars[j])*yvars[j], j = 1 .. n), i = 1 .. n);

得到0,0。它找到正确的

diff(F(xvars)[1], xvars[1])
。看起来 Maple 是根据
xvars[j]
来区分的,而不是
xvars[1]
xvars[2]
。在
diff
上更改
D
给出了另一个但也是错误的答案。

一般如何做?

我想了解如何处理许多变量和嵌套总和。

symbolic-math maple
1个回答
0
投票

您应该使用

add
,而不是
sum
,来添加有限项集合。

sum
命令获取Maple的过程调用的通常规则,并且参数被“预先”评估,即。在
sum
实际收到它们之前。
diff
调用仅查看带有非数字
i
和零结果的项。

相比之下,

add
命令(如
seq
)具有所谓的特殊评估规则,这会阻止评估,直到其索引
i
达到其数值。

restart;
n := 2:
xvars := seq(x[i], i = 1 .. n):
yvars := seq(y[i], i = 1 .. n):
F := (x, y) -> [exp(x^3 *y) - 1, y^2 - 5*y*x]:

seq(add(diff(F(xvars)[i], xvars[j])*yvars[j],
        j = 1 .. n), i = 1 .. n):lprint(%);

  3*x[1]^2*x[2]*exp(x[1]^3*x[2])*y[1]
  +x[1]^3*exp(x[1]^3*x[2])*y[2],
  -5*x[2]*y[1]+(-5*x[1]+2*x[2])*y[2]

通过使用单个右勾(在 Maple 中又称为“不值引号”)来延迟评估是可能的,但深度嵌套可能会变得非常复杂。

restart;
n := 2:
xvars := seq(x[i], i = 1 .. n):
yvars := seq(y[i], i = 1 .. n):
F := (x, y) -> [exp(x^3 *y) - 1, y^2 - 5*y*x]:

eval(seq(sum(''diff''(F(xvars)[i], xvars[j])*yvars[j],
             j = 1 .. n), i = 1 .. 2)):lprint(%);

  3*x[1]^2*x[2]*exp(x[1]^3*x[2])*y[1]
  +x[1]^3*exp(x[1]^3*x[2])*y[2],
  -5*x[2]*y[1]+(-5*x[1]+2*x[2])*y[2]
© www.soinside.com 2019 - 2024. All rights reserved.