我正致力于创建最大值函数以简化向量上的del运算符。如何将列表/向量传递给maxima中的函数?这有效:
(%i7) dot(a,b) := a[1]*b[1]+a[2]*b[2]+a[3]*b[3];
(%o7) dot(a, b) := a b + a b + a b
1 1 2 2 3 3
(%i8) dot(a,b);
2
(%o8) 3 x y - 4 x
但这并不是:
(%i13) grad(a) := diff(a[1],x) + diff(a[2],y) + diff(a[3],z);
define: argument cannot be an atom or a subscripted memoizing function; found:
a
-- an error. To debug this try: debugmode(true);
答案 0 :(得分:2)
Maxima对范围和下标有极其混乱的规则。首先,我会为此道歉。
我的猜测是,在定义a
时,您已经有一个名为grad
的数组。为grad
的参数尝试不同的名称 - 尝试一些尚未使用的内容。这样做有用吗?
无论如何,定义不应该是:
grad(a) := [diff(a, x), diff(a, y), diff(a, z)];
...