我正在尝试使用与此工具相同的方法在C#中拟合Akima样条曲线:https://www.mycurvefit.com/share/4ab90a5f-af5e-435e-9ce4-652c95c3d9a7
这条曲线给出了我想要的确切形状(曲线在X= 30M处达到峰值,来自样本数据的最高点)
但当我使用MathNet的Akima函数,并从相同的数据集中绘制52个点时:
var x = new List<double> { 0, 15000000, 30000000, 40000000, 60000000 };
var y = new List<double> { 0, 93279805, 108560423, 105689254, 90130257 };
var curveY = new List<double>();
var interpolation = MathNet.Numerics.Interpolation.CubicSpline.InterpolateAkima(x.ToArray(), y.ToArray());
for (int i=1; i<=52; i++)
{
var cY = interpolation.Interpolate((60000000/52)*i);
curveY.Add(cY);
}
我没有得到相同的曲线,我得到了一条峰值在X= 26M左右的曲线,看起来更像是一条自然样条:https://www.mycurvefit.com/share/faec5545-abf1-4768-b180-3e615dc60e3a
Akimas看起来如此不同的原因是什么?(尤其是在峰值方面)
发布于 2017-03-08 16:15:46
我放弃了MathNet函数,转而在这个实现上使用CubicSpline.FitParametric()函数:https://www.codeproject.com/Articles/560163/Csharp-Cubic-Spline-Interpolation
这成功地给了我想要的拟合(完全尊重样本数据峰值)。
发布于 2017-03-07 14:53:45
插值方法等待双参数,但这是整数(60000000 / 52) *i
将(60000000 / 52) * i
更改为(60000000d / 52d) * i
https://stackoverflow.com/questions/42651039
复制相似问题