【问题标题】:Is it possible to Interpolate without loop是否可以在没有循环的情况下进行插值
【发布时间】:2021-01-27 17:41:13
【问题描述】:

我想知道是否可以不使用循环进行插值以获得处理时间。


注意:插值目标是计算曲线上不存在的点。例如 2021 年 10 月 9 日的汇率


曲线示例


实际上,我正在使用 For 循环来浏览我的曲线来计算点。是否存在最聪明的方法?

Function DCF(Periode As Double) As Double
Dim x As Integer
For x = 1 To 21
    Date1 = ThisWorkbook.Worksheets("Courbes").Range("PeriodeCourbe").Offset(x).Value
    Date2 = ThisWorkbook.Worksheets("Courbes").Range("PeriodeCourbe").Offset(x + 1).Value
    TauxMid1 = ThisWorkbook.Worksheets("Courbes").Range("Mid").Offset(x).Value
    tauxMid2 = ThisWorkbook.Worksheets("Courbes").Range("Mid").Offset(x + 1).Value
    If Periode >= Date1 And Periode < Date2 Then DCF = 1 / (Date2 - Date1) * ((Periode - Date1) * tauxMid2 + (Date2 - Periode) * TauxMid1)
Next
End Function

我使用的是样条三次插值,但是一个简单的线性示例 插值将帮助我构建自己的函数。

【问题讨论】:

  • 看看这个很好的例子mathformeremortals.wordpress.com/2014/04/27/…
  • @pizzettix 但在你的例子中他仍然使用循环,我想知道是否存在其他没有循环的方式
  • 简单线性,您可以使用工作表公式 SLOPE 和 INTERCEPT 创建一个线性公式来满足您的需求。
  • @Dorian:看看这个stackoverflow.com/questions/41920162/…。也许您可以将解决方案表示为矩阵乘法(取决于三次插值类型)?在 excel 和 vba 中,您也可以使用矩阵进行计算。

标签: excel vba interpolation linear-interpolation cubic-spline


【解决方案1】:

是的,您可以使用近似 MATCH/VLOOKUP 更有效地执行此操作而无需循环。

在此处查看我的帖子以获取代码和两种方法的比较。

https://fastexcel.wordpress.com/2011/06/06/writing-efficient-vba-udfs-part-2/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-07
    • 1970-01-01
    • 2019-03-11
    • 1970-01-01
    • 2012-09-23
    • 1970-01-01
    • 2017-09-17
    相关资源
    最近更新 更多