【发布时间】:2017-03-01 15:33:42
【问题描述】:
我有一个包含 4 个点的图表:
{0.0, 0.0}, {4687500.0, 10647580.9}, {4687500.1, 10647580.9}, {7500000.0, 10213609.9},
使用这些点,我在 Excel 中绘制了一个三阶多项式拟合,这给了我等式:
y = -4E-14x3 + 2E-07x2 + 1.5x + 2E+06
这是完美,正是我需要绘制我所追求的曲线(Excel 绘制的曲线是正确的)。
但是,当我使用 C# Math.Net 库使用完全相同的 4 个点绘制一个 3 阶多项式拟合时,我得到了一组完全不同的系数(因此方程和图表也大不相同)。
var coefficients = MathNet.Numerics.Fit.Polynomial(budgets, profits, 3);
任何想法为什么会这样?当我使用二阶时,系数完全匹配,所以我想知道 Math.Net 三阶函数是否有什么特别之处。
Excel 曲线上升,然后下降(我所追求的)。
Math.NET 曲线上升、下降,然后在接近尾声时再次上升。
编辑:我们使用的是 3 阶而不是 2 阶,因为我们需要在绘制曲线时将 10647580.9 作为最高 Y 点。
【问题讨论】:
-
“这是完美的,正是我需要绘制我所追求的曲线(Excel 绘制的曲线是正确的)。”。你在
X = 0.0有 200 万个错误,所以我不太确定 spot on 对你意味着什么。 -
你为什么还要使用三阶拟合?您的示例是二阶曲线。
-
Excel 曲线适合这种情况。 2 阶的问题是这将绘制高于最高点 ({4687500.0, 10647580.9}) 的点,在 Excel 中使用 3 阶会强制将此输入值保持为最高点,这是在这种情况下所需要的。
-
这完全取决于数据。三阶拟合完全不能保证这一点。只是在 this 特定的一组点中恰好是这样。
-
你能在 Excel 中生成一个不适合这种方法的 4 点案例吗? (请记住,我们在第三点强制使用 .1 来创建必要的形状)
标签: c# excel polynomial-math math.net