拟合 Akima 样条曲线
Fitting an Akima Spline curve
我正在尝试使用与此工具相同的方法在 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 看起来如此不同的原因是什么? (尤其是峰值)
插值方法等待双参数但这是整数 (60000000 / 52) * i
将(60000000 / 52) * i
更改为(60000000d / 52d) * i
我放弃了 MathNet 函数并在这个实现中使用了 CubicSpline.FitParametric() 函数:https://www.codeproject.com/Articles/560163/Csharp-Cubic-Spline-Interpolation
这成功地给了我想要的拟合(完全尊重样本数据峰值)。
我正在尝试使用与此工具相同的方法在 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 看起来如此不同的原因是什么? (尤其是峰值)
插值方法等待双参数但这是整数 (60000000 / 52) * i
将(60000000 / 52) * i
更改为(60000000d / 52d) * i
我放弃了 MathNet 函数并在这个实现中使用了 CubicSpline.FitParametric() 函数:https://www.codeproject.com/Articles/560163/Csharp-Cubic-Spline-Interpolation
这成功地给了我想要的拟合(完全尊重样本数据峰值)。