Максимальные индексированные переменные, назначенные при оценке функции - PullRequest
0 голосов
/ 22 января 2019

Я хотел бы использовать индексированную переменную в определении функции (это MWE, в реальном мире у меня много a[i], используемых в качестве коэффициентов полинома)

f(x):=a[0]*x $

Но когда я оцениваю эту функцию, присваивая значение a[0], присваивание игнорируется:

ev(f(z),[a[0]=99]);
> a[0]*z

Чтобы получить желаемый результат 1010 *, мне нужно сделать дополнительное задание

expr:f(z) $
ev(expr,[a[0]=99]);
> 99*z

Что здесь происходит? Есть ли способ избежать дополнительного шага?

Заранее спасибо за любую подсказку.

1 Ответ

0 голосов
/ 22 января 2019

Я вижу, что если вы напишите функцию как f(x) := a0*x, а затем ev(f(z), a0=99), вы получите ожидаемый результат 99*z.Поэтому различное поведение для f(x) := a[0]*x является ошибкой;Я отправлю отчет об ошибке.

В общем случае более предсказуемая стратегия замены заполнителей значениями заключается в использовании функции subst, которая подставляет значения в выражение.В этом случае вы можете написать:

subst (a[0] = 99, f(z));

Если у вас есть несколько значений для замены, вы можете написать:

subst ([a[0] = 99, a[1] = 42, a[2] = 2*foo], myexpr);

, где myexpr - это выражение, содержащее a[0], a[1] и a[2].

subst - это последовательное (одно значение за раз) замещение.Смотрите также psubst, который является параллельной заменой (все значения одновременно).

...