fla*_*hon 7 wolfram-mathematica
如何在不首先将数学表达式拟合到数学表达式(即使用FindFit
)的情况下,在数学上区分Mathematica中的列表?
具体来说,我想在列表中找到最大斜率点.
我考虑使用Differences
并找到最大差异,但数据中的噪声会导致不准确.平滑数据MovingAverage
也无济于事.
提前致谢.
您可以尝试ListConvolve
使用高斯内核来平滑数据.一本很好的特性是,衍生的的卷积与高斯内核就相当于卷积与衍生高斯内核.
以下是一些示例数据:
data = Table[Sin[x] + .5 RandomReal[{-1, 1}], {x, 0, 6 \[Pi], .05}];
ListLinePlot[data]
Run Code Online (Sandbox Code Playgroud)
这是一个带高斯内核的简单卷积:
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]
Run Code Online (Sandbox Code Playgroud)
卷积与高斯的一阶导数:
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]
Run Code Online (Sandbox Code Playgroud)
您可能希望使用sigma参数来查看在您的情况下获得最佳结果的内容.
这背后的整个理论称为尺度空间.请注意,上面关于卷积的声明适用于连续空间.对于离散实现,可以更好地选择内核.
另请注意,与MovingAverage一样,卷积可以移动数据的功能.
归档时间: |
|
查看次数: |
4889 次 |
最近记录: |