Применить функцию к списку именованных аргументов в Maxima

Для задач, скажем, с множителями Лагранжа, вы можете решить для критических точек. Часто вы получите набор критических точек. Есть ли способ легко сопоставить исходную функцию с решениями, чтобы оценить/применить функцию к этим решениям, чтобы получить значения функции?

Вот некоторый код, последний шаг которого я не могу понять, как построить:

f(x, y) := y^2 - x^2
g: 1/4 * x^2 + y^2

eq1: diff(f(x,y), x) = h * diff(g, x);
eq2: diff(f(x,y), y) = h * diff(g, y);
eq3: g = 1;

solve([eq1, eq2, eq3], [x, y, h]);
# Get:
# [[x=-2,y=0,h=-4],[x=2,y=0,h=-4],[x=0,y=-1,h=1],[x=0,y=1,h=1]]

# How can I get the list of values by applying the function to the
# list of solutions?
map(apply(f(x, y)), solve([eq1, eq2, eq3], [x, y, h]));

# Want (evaluated):
# [f(-2, 0), f(2, 0), f(0,-1), f(0, 1)]
# ???

person mpettis    schedule 19.02.2021    source источник


Ответы (1)


Один из способов сделать это — подставить решение в выражение, возвращаемое функцией. Что-то вроде этого (я не пробовал):

mysolutions: solve (...);
map (lambda ([solution1], subst (solution1, f(x, y))), mysolutions);
person Robert Dodier    schedule 20.02.2021
comment
Это сработало как есть, спасибо! - person mpettis; 21.02.2021