具有 100 个结果的 10 个值的线性插值的最巧妙方法

Slickest method for linear interpolation of 10 values with 100 results

我正在编写一些代码以在每个 100 标记处插入 1000 之间的值,如果 "Known" 值发生变化等,则类似地在每个 1000 标记处插入 10000 之间的值。
请参阅我在 Excel 中进行的以下试验,我认为这是一个效果很好的测试。

我已经在 Visual Studio 中编写了这个并且就 VB.Net 而言有点菜鸟(也不是 VBA)我有 Dim'这些值为 Double,如下所示:

Private Sub Results()

    'Calculate Interpolation Value between yvals(0 to 9)
    Dim interpolValue As Double = (yvals(1) - yvals(0)) / 10
    'etc to yvals(9 - 10)

    Dim Result1100 As Double = yvals(0) + interpolValue
    Dim Result1200 As Double = Result1100 + interpolValue
    Dim Result1300 As Double = Result1200 + interpolValue
    Dim Result1400 As Double = Result1300 + interpolValue
    Dim Result1500 As Double = Result1400 + interpolValue
    Dim Result1600 As Double = Result1500 + interpolValue
    Dim Result1700 As Double = Result1600 + interpolValue
    Dim Result1800 As Double = Result1700 + interpolValue
    Dim Result1900 As Double = Result1800 + interpolValue
    'etc to Result 10,000

End Sub

其中 yvals(0)(9) 是用户输入数据,Result#### 是插值数据。

有谁能推荐一种比将此代码再写 90 次更巧妙的方法吗?
研究这个主题我还没有真正看到 neater/slicker 的方法来做到这一点。

然后是这样的:

Dim StartValue As Integer = 385
Dim EndValue As Integer = 697
Dim StepValue As Double = (2000 - 1000) / 100
Dim interpolValue As Double = (EndValue - StartValue) / StepValue

Dim SomeList As New List(Of Double)
For x = 0 To StepValue
    SomeList.Add(StartValue + x * interpolValue)
Next

输出:

385
416.2
447.4
478.6
509.8
541
572.2
603.4
634.6
665.8
697

不太明白你想做什么,但是,这可能会给你一些提示和技巧:

Dim dict As New Dictionary(Of Integer, Double)
Dim interpolValue As Double = (yvals(1) - yvals(0)) / 10
Dim result As Double = interpolValue + yvals(0)

For i As Integer = 1100 To 10000 Step 100
    dict.Add(i, result)
    result += interpolValue
Next

现在您在这本词典中收集了 KeyValuePair 个词。 KeysInteger 的集合,其中包含 1100 到 10000 之间的数字。 ValuesDouble 的集合,其中包含计算结果。例如,您可以获得数字 3200 的值:

Dim Result3200 As Double = dict(3200)

遍历键并获取它们的值:

dict.ToList.ForEach(Sub(kvp) Console.WriteLine($"Key: {kvp.Key} Value: {kvp.Value}"))

祝你好运。