''' <summary>
''' 拉格朗日多项式插值
''' </summary>
''' <param name="x">给定的节点自变量数组,至少有一个数据</param>
''' <param name="y">给定的节点因变量数组,至少有一个数据</param>
''' <param name="t">要插入的数值</param>
''' <param name="n">计算插值的节点数,最小值为2,偶数最佳</param>
''' <returns>如果错误返回false,如果正确返回double数值</returns>
''' <remarks></remarks>
Public Function funlgr(ByVal x() As Double, ByVal y() As Double, ByVal t As Double, Optional ByVal n As Integer = 4) As Double
Dim i, j, k, m As Integer
Dim z, s As Double
Dim nmax As Integer
Dim bm As Integer = n / 2
If IsNothing(x) Or IsNothing(y) Or n = 0 Then
Return False
End If
nmax = x.GetUpperBound(0)
z = 0
'如果只有一个数据,返回该数据
If nmax = 0 Then
z = y(0)
Return z
End If
'如果仅有两个节点,那么采用线性插值
If nmax = 1 Then
z = ((t - x(1) * y(0) - (t - x(0)) * y(1))) / (x(0) - x(1))
Return z
End If
i = 0
'获取插值用的n个节点
While (x(i) < t) And i < nmax
i = i + 1
End While
k = i - bm
If k < 0 Then k = 0
m = i + (n - bm - 1)
If m > nmax Then m = nmax
'进行拉格朗日插值计算
For i = k To m
s = 1
For j = k To m
If j <> i Then
s = s * (t - x(j)) / (x(i) - x(j))
End If
Next
z = z + s * y(i)
Next
Return z
End Function
vb.net 下拉格朗日插值
最新推荐文章于 2024-07-15 18:18:21 发布