В 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
.