"Закрытые" символы для 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 и я думаю, что поиск в Интернете должен найти его, если нет, дайте мне знать, и я опубликую ссылку.

Другие вопросы по тегам