一般化された状態空間のルートを見つける必要があります。つまり、私は次元の離散グリッドを持っていますが、それがgrid=AxBx(...)xXいくつの次元を持っているかは事前にはわかりません(解決策はすべてに適用できるはずですgrid.size)。
二分法を使用して内部f(z) = 0のすべての状態の roots() を見つけたいです。含むと言って、私は知っています。それから私はする必要がありますzgridremainderf(z)f'(z) < 0
- > 0の
z場合は増加remainder - < 0の
z場合は減少remainder
historyブログ、形状の行列にはグリッド内のすべての点(grid.shape, T)の以前の値の履歴が含まれており、増加する必要があるとします( > 0 から)。次に、「より大きいもののうち最小のもの」を選択する必要があります。疑似コードでは、次のようになります。zzremainderzAlternativehistory[z, :]z
zAlternative = hist[z,:][hist[z,:] > z].min()
私は以前にこれを尋ねました。私が与えられた解決策は
b = sort(history[..., :-1], axis=-1)
mask = b > history[..., -1:]
index = argmax(mask, axis=-1)
indices = tuple([arange(j) for j in b.shape[:-1]])
indices = meshgrid(*indices, indexing='ij', sparse=True)
indices.append(index)
indices = tuple(indices)
lowerZ = history[indices]
b = sort(history[..., :-1], axis=-1)
mask = b <= history[..., -1:]
index = argmax(mask, axis=-1)
indices = tuple([arange(j) for j in b.shape[:-1]])
indices = meshgrid(*indices, indexing='ij', sparse=True)
indices.append(index)
indices = tuple(indices)
higherZ = history[indices]
newZ = history[..., -1]
criterion = 0.05
increase = remainder > 0 + criterion
decrease = remainder < 0 - criterion
newZ[increase] = 0.5*(newZ[increase] + higherZ[increase])
newZ[decrease] = 0.5*(newZ[decrease] + lowerZ[decrease])
ただし、このコードは機能しなくなります。それを認めるのは非常に残念ですが、インデックスで起こっている魔法を理解していなかったので、残念ながら助けが必要です.
コードが実際に行うことは、最低と最高をそれぞれ与えることです。つまり、2 つの特定のz値を修正すると、次のようになります。
history[z1] = array([0.3, 0.2, 0.1])
history[z2] = array([0.1, 0.2, 0.3])
higherZ[z1]=0.3とlowerZ[z2] = 0.1、つまり極値を取得します。両方の場合の正しい値は0.2. ここで何がうまくいかないのですか?
必要に応じて、テスト データを生成するために、次のようなものを使用できます。
history = tile(array([0.1, 0.3, 0.2, 0.15, 0.13])[newaxis,newaxis,:], (10, 20, 1))
remainder = -1*ones((10, 20))
2 番目のケースをテストします。
期待される結果
上記の変数を調整してhistory、上向きと下向きの両方のテストケースを提供しました。期待される結果は
lowerZ = 0.1 * ones((10,20))
higherZ = 0.15 * ones((10,20))
zつまり、履歴[z, :]のすべてのポイントについて、次に高い前の値 ( higherZ) と次に小さい前の値 ( lowerZ) です。すべての点zはまったく同じ履歴 ( [0.1, 0.3, 0.2, 0.15, 0.13]) を持っているため、 と の値はすべて同じにlowerZなりhigherZます。もちろん、一般に、それぞれの履歴はz異なるため、2 つのマトリックスにはすべてのグリッド ポイントで異なる値が含まれる可能性があります。