2

数学のヘルプが必要です。それがうまくいく場合は、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 フィートと <10k フィート) に分割し、2 つの数式を使用する方がよいでしょうか、それともチャート全体を使用して利用できる適切な解決策はありますか?

4

2 に答える 2

3

精度は非常に重要です。実際、あなたが行ったことにはいくつかの深刻な問題があります。

精度が 1 桁の係数を使用するだけで、ひどい問題が発生します。x は 20000 の大きさであることを思い出してください。そのサイズの数を 3 乗すると、巨大な数になります。これに 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

それは違いを生みます、深刻なものです。

単純な線形補間の使用を選択することもできますが、3 次の方が少し滑らかです。試してみると、立方体は奇妙なことをするので、外挿に注意してください。しかし実際には、3 次多項式にはかなりの量の不適合があります。独立変数 (フッテージ) を 10000 で除算してスケーリングするように注意している限り、4 次多項式を使用すると、大幅に改善できます。

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 程度になるように変換するために選択された数値) でスケーリングすることの重要性に注意してください。

適合の次数を上げるという点では、私はその点をはるかに超えることはありません。

于 2013-01-15T00:41:50.727 に答える
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にも興味があるかもしれません。

于 2013-01-29T12:20:46.903 に答える