Замена вектора

У меня есть огромная динамическая система в wxmaxima, и мне нужно сделать некоторую замену векторов, но это заканчивается просто сумасшедшими результатами. Вот что мне нужно сделать:

forces:[
    F1=[x1,y1,z1],
    F2=[x2,y2,z2]
];
equations:[F3=-F2];
subst(forces,subst(equations,F1+F3));

результат, который я ищу, - это просто [x1+x2,y1+y2,z1+z2], но вместо этого я получил: [[x1-x2,x1-y2,x1-z2],[y1-x2,y1-y2,y1-z2],[z1-x2,z1-y2,z1-z2]]

какие-либо предложения?


person daaan    schedule 22.10.2019    source источник
comment
Каково значение F3?   -  person Robert Dodier    schedule 25.10.2019


Ответы (1)


Хорошо, это довольно озадачивает, хотя теперь я понимаю, что происходит.

subst — это последовательная (один за другим) замена, поэтому subst([F1 = ..., F2 = ...], ...) эквивалентно subst(F2 = ..., subst(F1 = ..., ...)). То есть сначала подставьте F1, а затем подставьте F2 в результат этого.

Однако результатом subst(F1 = [x1, y1, z1], F1 - F2) является [x1 - F2, y1 - F2, z1 - F2]. Теперь вы можете видеть, что произойдет, если вы подставите F2 в это - вы получите беспорядочный вложенный список.

Я думаю, если вы попробуете psubst (параллельная подстановка), вы получите ожидаемый результат.

(%i2) forces:[
    F1=[x1,y1,z1],
    F2=[x2,y2,z2]
];
(%o2)        [F1 = [x1, y1, z1], F2 = [x2, y2, z2]]
(%i3) equations:[F3=-F2];
(%o3)                      [F3 = - F2]
(%i4) subst(equations, F1 + F3);
(%o4)                        F1 - F2
(%i5) psubst (forces, %o4);
(%o5)              [x1 - x2, y1 - y2, z1 - z2]
(%i6) psubst(forces, subst(equations, F1 + F3));
(%o6)              [x1 - x2, y1 - y2, z1 - z2]
person Robert Dodier    schedule 27.10.2019