Board logo

標題: [分享] 內插 [打印本頁]

作者: 呆呆    時間: 2011-2-9 17:04     標題: 內插

最近有點無聊,想到以前學的一些數數學函數
其中有一種叫內插,或許有些人認為,內插應該很簡單吧
國中生就會了,但那個是線性內插
我在這裡提供一種叫拉格朗日插值法,
我把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度的值要怎麼辦
作者: 呆呆    時間: 2011-2-9 17:07

我不想在去做數學證明,我們只把它當成是應用
方便我們做任何多數點中的內插
以下就是程式碼
  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
複製代碼

作者: 呆呆    時間: 2011-2-9 17:13

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




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)