простой пример:
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
экстраполирует линейно) ,
del2
необходимо умножить на 4, чтобы быть совместимым с gradient(gradient())
А если заглянуть внутрь кода (edit del2
или edit gradient
) вы видите, что градиент имеет симметричную разность для внутренних точек (с учетом предыдущего и следующего пункта в равной степени). del2
делает то же самое, но только один раз. Поэтому gradient(gradient())
сглаживает немного больше.
Однако, если я сглажу результат del2
с ядром вроде [0.25 0.5 0.25]
, тогда я получу точно такие же результаты, как 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
Пожалуйста, обратите внимание, что центральные три значения идентичны, два пограничных значения на каждой стороне различны, потому что границы трактуется по-разному.
Возможно, что 'del2' принимает линейное расстояние' 1' один раз, в то время как 'gradient' делает это дважды – Adriaan
Нет, я пробовал разный интервал, но результат не меняется – Bhoke