"Закрытые" символы для sum(), diff() или интегрировать ()
Давайте рассмотрим следующую функцию, о которой я уже упоминал в моем предыдущем вопросе:
rot[i](f) := sum(sum(sum(sum(
G[r,i]*G[q,j]*W[i,j,k]*('diff(f[k], y[q]) + sum(K[k,q,m]*f[m], m, 1, N)),
r, 1, N),
j, 1, N),
k, 1, N),
q, 1, N) $
Это вроде работает в общем, но что, если оригинальное выражение f
уже содержит символы r
, j
, и так далее? В этом случае это не правильно. Единственное решение, которое я нашел до сих пор, это использовать какой-то уникальный префикс для этих символов или, по крайней мере, начать их имена с подчеркивания: r
→ __r
, j
→ __j
, Но я надеюсь, что должно быть более идиоматическое решение. Есть что-нибудь?
1 ответ
К сожалению, в Maxima все символы являются глобальными. x
в каком-то выражении тот же символ, что и x
в f(x) := ...
, Таким образом, нет общего способа гарантировать, что аргументы функции будут отличаться от других символов с тем же именем. Некоторые функции пытаются сделать свои аргументы локальными, например, sum
обрабатывает индексную переменную специально, но integrate
не.
Я попытался создать лексическую блочную конструкцию, которая позволяла бы различать символы с одинаковыми именами. Это называется blex
и я думаю, что поиск в Интернете должен найти его, если нет, дайте мне знать, и я опубликую ссылку.