Как передать массив в качестве аргумента функции maxima?

Я работаю над созданием функций максимума, чтобы упростить оператор del для векторов. Как я могу передать список/вектор функции в максимуме? Это работает:

(%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);

person sig_seg_v    schedule 09.09.2014    source источник


Ответы (1)


Максима имеет чрезвычайно запутанные правила относительно области действия и индексов. Прежде всего, я извинюсь за это.

Я предполагаю, что у вас уже есть массив с именем a к тому времени, когда вы определяете grad. Попробуйте другое имя для аргумента grad -- попробуйте то, что вы еще не использовали. Это так работает?

В любом случае, не должно ли определение быть таким:

grad(a) := [diff(a, x), diff(a, y), diff(a, z)];

??

person Robert Dodier    schedule 10.09.2014
comment
хорошая точка зрения. Я действительно определял del(a) и перепутал термины для скалярных/векторных форм. - person sig_seg_v; 16.04.2015