Определение двумерного массива функций без предварительного построения каждой функции по отдельности (Python или MATLAB / Octave) - PullRequest
1 голос
/ 01 августа 2020

(Я был бы рад выполнить sh следующее в Python или MATLAB / Octave. Ниже я обрисовал проблему в Python.)

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

if 0<k<16:
    f[k,n+1](j) = A(k,j)*f[k-1,n](j) + B(k,j)*f[k+1,n](j)
elif k==0:
    f[k,n+1](j) = B(k,j)*f[k+1,n](j)
elif k==16:
    f[k,n+1](j) = A(k,j)*f[k-1,n](j)

Функции A(k,j) и B(k,j) не индексируются, им не нужен массив. Они не существенны для этой проблемы. Начальные значения для повторения задаются известными значениями

if k==8:
    f[k,0](j)=0
else:
    f[k,0](j)=1

, которые справедливы для произвольных j.

Как я могу повторно определить массив функций в 2D-массиве? Я видел примеры , такие как этот , которые создают массив функций с помощью

myFuncs = [f0,f1,f2]
myFuncs[2](...) #calls f2

Однако для этого мне нужно создать и назвать отдельные функции, прежде чем объединять их в массив myFuncs . Напротив, мне нужно построить эту таблицу, не называя все 136 функций в массиве 17x8. Как я могу выполнить sh это?

РЕДАКТИРОВАТЬ: Чтобы быть явным и продемонстрировать, что можно написать решение как функцию от k, повторяемость, которую я пытаюсь решить, составляет

f[k,n+1](j) = sqrt(j+k-8)*f[k-1,n](j) + sqrt(k+j-7)*f[k+1,n](j)

Используя известные значения для n=0, я могу получить следующее для n = 1:

f[9,1](j) = sqrt(j+1)
f[7,1](j) = sqrt(j)

с остальными равными нулю, а затем для n=2

f[10,2](j) = sqrt((j+1)*(j+2))
f[8,2](j) = 2*j+1
f[6,2](j) = sqrt(j*(j-1))

с остальными нулями. Однако выполнение этого вручную чревато ошибками, и я хотел бы обобщить это, потому что есть еще два повторения, для которых я буду sh вычислять все эти функции.

...