需要计算一个公式

我需要一些math方面的帮助,或者如果这种方法更好的话,可以提供一些超级帮助 我有一组数据点,我需要计算中间数据。 下面的表格是已知的数据点,我需要知道的是如果我input1200英尺,MEG是可用的。

FOOTAGE MEG 1000 19.3 2000 20.66 3000 21.328 4000 21.398 5000 20.976 6000 20.155 7000 19.023 8000 17.658 9000 16.133 10,000 14.513 11,000 12.854 12,000 11.208 13,000 9.617 14,000 8.117 15,000 6.736 16,000 5.493 17,000 4.411 18,000 3.487 19,000 2.724 20,000 2.114 

我已经把它们inputexcel,然后find一个他们的图表相信是我的问题的答案的公式。 他们给出的公式是

 y = 8E-12x3 - 3E-07x2 + 0.0018x + 18.218 

这实际上给我12k英尺以下的任何东西都非常好的结果。 之后,结果进一步偏离准确,直到我开始在18k英尺后得到负数。

我尝试input更多的命令来计算,但这只是让事情变得更糟。

我会更好地分裂在2(> 10k英尺和<10k英尺)的图表,并使用2个公式,还是有一个很好的解决scheme可用于整个图表?

精度是非常重要的。 事实上,你所做的事情有几个严重的问题。

仅仅使用一位精度的系数会导致严重的问题。 请记住x大到20000.将这个大小的数字加起来将是一个很大的数字。 现在把它乘以8e-12的数字,你会得到什么?

哦,顺便说一句,这些系数的实际值应该更接近

 [8.38044124105504e-12 -2.95337111670131e-07 0.00176948515975282 18.2176584107327] 

那么这是否有所作为呢?

 8e-12*20000^3 ans = 64 8.38044124105504e-12*20000^3 ans = 67.0435299284403 

它是有所作为的,一个严重的。

您可能会select使用简单的线性插值,但立方体会更平滑些。 当心推断,因为立方体会做奇怪的事情,如果你尝试。 实际上,三次多项式有一个显着的缺乏拟合。 使用四阶多项式可以显着改善效果,只要您仔细地将自variables(镜头)除以10000即可。

 a4 = -3.02325078929022 a3 = 21.0780945560741 a2 = -46.9692303618201 a1 = 26.3111163470058 a0 = 17.1162276831784 MEG = a0 + a1*footage/10000 + a2*(footage/10000)^2 + a3*(footage/10000)^3 + a4*(footage/10000)^4 

请注意缩放10000的重要性(或者至less是一个select用于转换数字的数字,因此它们大约是1左右)。

尽pipe在增加合适的顺序方面,我不会过去那么多。

我可以build议你使用一个小的VBA脚本,它使用线性插值从列表中提取一个值:

 Public Function Linterp(Tbl As Range, x As Double) As Variant ' linear interpolator / extrapolator ' Tbl is a two-column range containing known x, known y, sorted x ascending Dim nRow As Long Dim iLo As Long, iHi As Long nRow = Tbl.Rows.Count If nRow < 2 Or Tbl.Columns.Count <> 2 Then Linterp = CVErr(xlErrValue) Exit Function '--------------------------------------------------------> End If If x < Tbl(1, 1) Then ' x < xmin, extrapolate from first two entries iLo = 1 iHi = 2 ElseIf x > Tbl(nRow, 1) Then ' x > xmax, extrapolate from last two entries iLo = nRow - 1 iHi = nRow Else iLo = Application.Match(x, Application.Index(Tbl, 0, 1), 1) If Tbl(iLo, 1) = x Then ' x is exact from table Linterp = Tbl(iLo, 2) Exit Function '----------------------------------------------------> Else ' x is between tabulated values, interpolate iHi = iLo + 1 End If End If Linterp = Tbl(iLo, 2) + (Tbl(iHi, 2) - Tbl(iLo, 2)) * (x - Tbl(iLo, 1)) / (Tbl(iHi, 1) - Tbl(iLo, 1)) End Function 

你从你的表中调用这样的东西:

 =Linterp(A1:b10, 1200) 

您可以轻松调整代码,以调整您希望处理范围之外的值的方式。

稍有不同,您可能也会对http://www.codecogs.com/excel_render感兴趣,它可以绘制出您的方程式&#x3002;