2016-05-25 17 views
1

に異なる結果を与える私は1次元ベクトルを有します勾配の勾配。しかし、彼らは全く異なる結果をもたらします。勾配は、MATLAB

laplace = 0.2500 0.2500 0.2500 0.5000 -1.0000 2.2500 5.5000 
pxx = 0.5000 0.7500 1.2500 0.2500 0.7500 3.5000 4.5000 
+0

'del2'は' 1'の線形間隔を1回と仮定しているかもしれませんが、 'gradient'はこれを2回します – Adriaan

+0

道は違うけど、結果は変わりません – Bhoke

答えて

1

簡単な例:

gradient(gradient((1:10).^2)) 
1, 1.5, 2, 2, 2, 2, 2, 2, 1.5, 1 

など

4*del2((1:10).^2) 
2, 2, 2, 2, 2, 2, 2, 2, 2, 2 

gradient扱い異なる最初と最後の値(従ってgradient(gradient())del2が直線的に外挿し、異なる最初の2つのつと最後の2つのエントリを有しています) 。

del2gradient(gradient())

と互換性があるように4を掛けなければなりませんそして、あなたはコード(edit del2またはedit gradient)の内側に見える場合は、勾配が(以前を取って、次のポイントインテリアポイントの対称差を取ることがわかり等しく)。 del2は同じですが1回だけ行います。したがって、gradient(gradient())はもう少しスムーズになります。

[0.25 0.5 0.25]のようなカーネルでdel2の結果をスムーズにした場合、私はgradient(gradient())と全く同じ結果を得ることができます。

p = [1 3 6 10 16 18 29]; 
conv(4 * del2(p), [0.5,1,0.5]/2, 'same') 
0.75, 1, 1.25, 0.25, 0.75, 9, 13.25 
gradient(gradient(p)) 
0.5, 0.75, 1.25, 0.25, 0.75, 3.5, 4.5 

中央の3つの値が同じであることに注意してください。境界が異なるように処理されるため、各辺の2つの境界値が異なります。