如何在數學上區分Mathematica中的列表而不是首先將其適用於數學表達式(即使用FindFit
)?Mathematica中的列表的數值微分
具體來說,我想在列表中找到最大斜率點。
我已考慮使用Differences
並找到最大差異,但數據呈現中的噪點不準確。使用MovingAverage
平滑數據也無濟於事。
在此先感謝。
如何在數學上區分Mathematica中的列表而不是首先將其適用於數學表達式(即使用FindFit
)?Mathematica中的列表的數值微分
具體來說,我想在列表中找到最大斜率點。
我已考慮使用Differences
並找到最大差異,但數據呈現中的噪點不準確。使用MovingAverage
平滑數據也無濟於事。
在此先感謝。
您可以嘗試使用高斯內核的ListConvolve
來平滑數據。一本很好的特性是,卷積與高斯內核的衍生相當於卷積與高斯核的衍生。
下面是一些示例數據:
data = Table[Sin[x] + .5 RandomReal[{-1, 1}], {x, 0, 6 \[Pi], .05}];
ListLinePlot[data]
這是一個簡單的卷積與高斯內核:
data2 =
Block[{\[Sigma] = 2},
ListConvolve[
Table[1/(Sqrt[2 \[Pi]] \[Sigma]) E^(-x^2/(2 \[Sigma])),
{x, -2 , 2, 1/10}
], data, {11, 11}
]
];
ListLinePlot[data2]
卷積用的一階導數高斯:
data3 =
Block[{\[Sigma] = 1},
ListConvolve[
Table[-((E^(-(x^2/(2 \[Sigma]))) x)/(Sqrt[2 \[Pi]] \[Sigma]^2)),
{x, -2 \[Sigma],2 \[Sigma], \[Sigma]/10}
], data, {11, 11}
]
];
ListLinePlot[data3]
您可能希望與西格瑪參數玩,看看有什麼會擋住你的情況下,最佳的效果。
這個背後的全部理論被稱爲Scale Space。請注意,以上關於卷積的陳述適用於連續空間。 For a discrete implementation, the kernel could be chosen somewhat better.
請注意,正如MovingAverage一樣,卷積可以移動數據的特徵。
很好的答案,謝謝! –
規範化常數正在尋找一個寄養家長... –
@belisarius告訴我,我忘了一個地方 –
這裏真正的問題是如何在數據嘈雜時估計導數。一旦我們有了這個方法,我們可以考慮在Mathematica中實現它。 Google開啓了例如這: http://math.lanl.gov/Research/Highlights/PDF/tvdiff.pdf – Szabolcs
http://math.lanl.gov/Research/Publications/Docs/chartrand-2007-numerical.pdf – Szabolcs
@Szabolcs,感謝您的鏈接。 – rcollyer