【发布时间】:2011-09-05 06:27:21
【问题描述】:
我正在尝试编写一个算法来执行 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;例如,2^3 = 8 - 1 = 7。
dyx的导数是y维度上相邻点的dx值。这适用于所有混合部分。所以 dzyx 是 z 维中相邻点的 dyx。我不确定这一段是否是该问题的相关信息,只是为了完整起见,我想把它放在这里。
欢迎任何帮助指针建议。粗体部分是我需要实现的部分。
::EDIT::
我将通过提供我需要的示例来尝试更明确一点。这只是一个 2D 案例,但它在某种程度上体现了我认为的整个过程。
我需要帮助想出将在 dx、dy、dyx 等列中生成值的算法。人。
| 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) 是未知的,只有它的值是已知的;所以解析微分没用,只能是数字。
欢迎任何帮助指针建议。粗体部分是我需要实现的部分。
::EDIT - AGAIN::
在这里开始一个要点:https://gist.github.com/1195522
【问题讨论】:
-
你是问如何生成(
0101...)的列表吗? -
我觉得这个问题适合codegolf.stackexchange.com
-
@Ryan,好吧,如果你用你的位串制作一个向量
e,然后找到|f(x + e) - f(x)| / |e|,那是那个方向的部分——这就是你要找的吗?跨度> -
我羡慕你能解决像这样有趣的问题。
-
@amod0017 如果不是以可赢比赛的形式,那它真的不适合codegolf.se