Я пытаюсь написать алгоритм, который будет выполнять N-мерные смешанные частичные производные. У меня есть представление о том, что мне нужно иметь возможность достичь, но я не могу повлиять на правильные петли / рекурсию, которые требуются для реализации N-мерного случая .
Вот шаблон для первых 4 измерений:
| 1D wzyx | 2D | 3D | 4D |
----------------------------------------------------------
| dx (0001) | dx (0001) | dx (0001) | dx (0001) |
| | dy (0010) | dy (0010) | dy (0010) |
| | dyx (0011) | dyx (0011) | dyx (0011) |
| | | dz (0100) | dz (0100) |
| | | dzx (0101) | dzx (0101) |
| | | dzy (0110) | dzy (0110) |
| | | dzyx (0111) | dzyx (0111) |
| | | | dw (1000) |
| | | | dwx (1001) |
| | | | dwy (1010) |
| | | | dwyx (1011) |
| | | | dwz (1100) |
| | | | dwzx (1101) |
| | | | dwzy (1110) |
| | | | dxyzw (1111) |
Количество производных для каждого измерения (поскольку это следует за двоичным шаблоном) (2 ^ dim) -1; E.G., 2 ^ 3 = 8 - 1 = 7.
Производное DYX - это значение DX соседних точек в размере Y. Это верно для всех смешанных частиц. Так что DZYX DYX от соседних точек в размере Z. Я не уверен, что этот пункт имеет отношение к вопросу, просто подумал, что я поставил здесь для полноты.
Любая помощь указателей по указаниям приветствуются. Часть жирным шрифтом - это часть, которую мне нужно реализовать.
:: Редактировать ::
Я собираюсь попытаться быть немного более явным, предоставляя пример того, что мне нужно. Это только 2D-случай, но оно иллюстрирует весь процесс, который я думаю.
Мне нужна помощь с алгоритмом, который генерирует значения в столбцах DX, DY, DYX, ET. al.
| X | Y | f(x, y) | dx | dy | dyx |
-------------------------------------------------------------------------
| 0 | 0 | 4 | (3-4)/2 = -0.5 | (3-4)/2 | (-0.5 - (-2.0))/2 |
| 1 | 0 | 3 | (0-4)/2 = -2.0 | (2-3)/2 | (-2.0 - (-2.0))/2 |
| 2 | 0 | 0 | (0-3)/2 = -1.5 | (-1-0)/2 | (-1.5 - (-1.5))/2 |
| 0 | 1 | 3 | (2-3)/2 = -0.5 | (0-4)/2 | (-0.5 - (-0.5))/2 |
| 1 | 1 | 2 | (-1-3)/2 = -2.0 | (-1-3)/2 | (-1.5 - (-2.0))/2 |
| 2 | 1 | -1 | (-1-2)/2 = -1.5 | (-4-0)/2 | (-1.5 - (-1.5))/2 |
| 0 | 2 | 0 | (-1-0)/2 = -0.5 | (0-3)/2 | (-0.5 - (-0.5))/2 |
| 1 | 2 | -1 | (-4-0)/2 = -2.0 | (-1-2)/2 | (-2.0 - (-2.0))/2 |
| 2 | 2 | -4 |(-4--1)/2 = -1.5 |(-4--1)/2 | (-1.5 - (-1.5))/2 |
f (x, y) неизвестен, известны только его значения; Таким образом, аналитическая дифференциация бесполезна, оно должно быть только числовым.
Любая помощь указателей по указаниям приветствуются. Часть жирным шрифтом - это часть, которую мне нужно реализовать.
:: Редактировать - Опять же ::
Начал цик здесь: https://gist.github.com/1195522