返回列表 上一主題 發帖

[分享] 內插

[分享] 內插

最近有點無聊,想到以前學的一些數數學函數
其中有一種叫內插,或許有些人認為,內插應該很簡單吧
國中生就會了,但那個是線性內插
我在這裡提供一種叫拉格朗日插值法,
我把sin函數的1,2,3,4,5度的值列出各為
1度  0.0174524
2度  0.0348994
3度  0.0523359
4度  0.0697564
5度  0.0871557
   
假設前題是,我們並不知道這5個值是 sin 函數值, 那我要求 3.5度的值要怎麼辦

我不想在去做數學證明,我們只把它當成是應用
方便我們做任何多數點中的內插
以下就是程式碼
  1. Option Explicit


  2. Public Sub Interpolation()
  3.    
  4.     Dim x(1 To 5) As Double
  5.     Dim y(1 To 5) As Double
  6.         
  7.     Dim i As Integer
  8.     Dim j As Integer
  9.    
  10.     Dim Ratio As Double
  11.     Dim X_Value As Double
  12.     Dim Y_Value As Double

  13.    
  14.     For i = 1 To UBound(x)
  15.         x(i) = i
  16.     Next i
  17.    
  18.     y(1) = 0.0174524
  19.     y(2) = 0.0348994
  20.     y(3) = 0.0523359
  21.     y(4) = 0.0697564
  22.     y(5) = 0.0871557
  23.    
  24.     X_Value = 3.5
  25.         
  26.     Y_Value = 0
  27.    
  28.    For i = 1 To UBound(x)
  29.    
  30.     Ratio = 1
  31.     For j = 1 To UBound(x)
  32.    
  33.        If i <> j Then
  34.       
  35.         Ratio = Ratio * (X_Value - x(j)) / (x(i) - x(j))
  36.       
  37.        End If
  38.         
  39.     Next j
  40.    
  41.     Y_Value = Y_Value + Ratio * y(i)
  42.    
  43.    
  44.     Next i
  45.    
  46.     MsgBox Y_Value

  47.    

  48. End Sub
複製代碼

TOP

這時我們得知  求得  y_value 值為 0.0610484820
實際上我們去按計算機為  sin3.5 為  0.06104853
誤差率極為小,這是我們在 1到5度的範為內取的點相當的多
如果我們在1度和5度之間只有2個值,那就是線性內插3.5度值
那誤差就相當大了,提供給各位參考

TOP

        靜思自在 : 【為善競爭】人生要為善競爭,分秒必爭。
返回列表 上一主題