我需要一些数学帮助,或者如果效果更好,我需要一些excel帮助。我有一组数据点,我需要计算中间数据。下表是已知的数据点,我需要知道的是,如果我输入1200英尺,可以使用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
我已将这些输入excel并继续寻找他们的图表认为是我的问题的答案的公式。他们给出的公式是
y = 8E-12x3 - 3E-07x2 + 0.0018x + 18.218
对于12k英尺以下的任何东西,这实际上让我获得了非常好的结果。之后,结果越来越偏离准确,直到我开始在18k英尺后得到负数。
我尝试输入更多的订单来计算,但这只是让事情变得更糟。
我最好将图表拆分为2(> 10k ft和<10k ft)并使用2个公式,还是使用整个图表有一个很好的解决方案?
答案 0 :(得分:3)
精确度非常重要。事实上,你所做的事情有几个严重的问题。
仅使用具有单位精度的系数将导致严重的问题。请记住,x大到20000. Cubing一定数量的大小将是一个巨大的数字。现在,将它乘以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
它有所作为,一个严肃的。
你可能会选择使用简单的线性插值,但立方体有点平滑。当心外推,如果你尝试的话,立方体会做一些奇怪的事情。实际上,三次多项式具有显着的拟合度。使用四阶多项式可以做得更好,只要您小心地将自变量(素材)除以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的重要性(或者至少是为了转换数字而选择的数字,因此它们大约为1左右。)
虽然在增加合适的顺序方面,我不会超过这一点。
答案 1 :(得分:0)
我是否可以建议您使用小型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感兴趣,它可以绘制您的方程式。