... удерживаемая форма. В результате я могу написать интерпретатор для данного языка и сгенерировать из него компилятор из этого языка в mma, при этом генерация кода является просто неполной оценкой (все системные символы скрыты, поэтому оценка останавливается). Делая это, я повторно использую оценщик mma для генерации кода и синхронизирую интерпретатор и компилятор. Это несколько сложнее, но это основная идея.

оложим, что в Mathematica 8.0 у меня есть некоторые константы:


a:=7
b:=9
c:=13
d:=.002
e:=2
f:=1

и я хочу использовать их для оценки некоторых взаимосвязанных функций



g[0,k_]:=0
g[t_,0]:=e
g[t_,k_]:=g[t-1,k]*a+h[t-1,k-1]*b

h[0,k_]:=0
h[t_,0]:=f
h[t_,k_]:=h[t-1,k]*c+g[t-1,k-1]*d

Но это действительно медленно и требует динамического программирования, иначе вы получите экспоненциальное замедление:


g[0, k_] := 0
g[t_, 0] := e
g[t_, k_] := g[t, k] = g[t - 1, k]*a + h[t - 1, k - 1]*b

h[0, k_] := 0
h[t_, 0] := f
h[t_, k_] := h[t, k] = h[t - 1, k]*c + g[t - 1, k - 1]*d

Теперь это действительно быстро, но если мы когда-либо захотим изменить константы (скажем, чтобы использовать это в функции манипуляции), мы должныClear g а такжеh каждый раз. Если бы у нас были сложные взаимозависимости, было бы очень неприятно очищать их каждый раз, когда мы хотели получить значение отg а такжеh.

Есть ли простой способ запуститьg а такжеh вModule или жеBlock или что-то подобное, чтобы я мог получать новый результат каждый раз, когда он оценивается без экспоненциального замедления? Или даже быстрый способ составить таблицу результатов для обоихg а такжеh в хорошем смысле? Как сказано, я хочу быть в состоянии вычислитьg а такжеh вManipulate функция.

Ответы на вопрос(1)

Ваш ответ на вопрос