Mathematica中列表的数值微分

fla*_*hon 7 wolfram-mathematica

如何在首先将数学表达式拟合到数学表达式(即使用FindFit)的情况下,在数学上区分Mathematica中的列表?

具体来说,我想在列表中找到最大斜率点.

我考虑使用Differences并找到最大差异,但数据中的噪声会导致不准确.平滑数据MovingAverage也无济于事.

提前致谢.

Sjo*_*ies 6

您可以尝试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一样,卷积可以移动数据的功能.