算法---多项式积分
Public Function RombergPoly(c() As Single, a As Single, b As Single, tol As Single) As Single
Dim i As Long, j As Long, T() As Single, L As Long
Dim x As Single, dx As Single, n As Long, sum As Single
ReDim T(1 To 3)
T(1) = (b - a) * (fxP(c, a) + fxP(c, b)) / 2
T(2) = T(1) / 2 + (b - a) * (fxP(c, (a + b) / 2)) / 2
T(3) = (4 * T(2) - T(1)) / 3
j = 3
Do While Abs(T(UBound(T)) - T(UBound(T) - 2)) > tol
dx = (b - a) / (2 ^ (j - 1))
x = a - dx
n = 2 ^ (j - 2)
sum = 0
For i = 1 To n
x = x + 2 * dx
sum = sum + fxP(c, x)
Next
For i = 2 To UBound(T) Step 2
T(i - 1) = T(i)
Next
T(2) = T(1) / 2 + dx * sum
ReDim Preserve T(1 To UBound(T) + 2)
For L = 2 To j
If L <> j Then
T(L * 2) = ((4 ^ (L - 1)) * T(L * 2 - 2) - T(L * 2 - 3)) / ((4 ^ (L - 1)) - 1)
Else
T(UBound(T)) = ((4 ^ (L - 1)) * T(UBound(T) - 1) - _
T(UBound(T) - 2)) / ((4 ^ (L - 1)) - 1)
End If
Next
j = j + 1
Loop
RombergPoly = T(UBound(T))
End FunctionPublic Function fxP(c() As Single, x As Single) As Single
Dim i As Long
fxP = c(UBound(c))
For i = UBound(c) - 1 To LBound(c) Step -1
fxP = c(i) + fxP * x
Next
End Function
Public Function RombergPoly(c() As Single, a As Single, b As Single, tol As Single) As Single
Dim i As Long, j As Long, T() As Single, L As Long
Dim x As Single, dx As Single, n As Long, sum As Single
ReDim T(1 To 3)
T(1) = (b - a) * (fxP(c, a) + fxP(c, b)) / 2
T(2) = T(1) / 2 + (b - a) * (fxP(c, (a + b) / 2)) / 2
T(3) = (4 * T(2) - T(1)) / 3
j = 3
Do While Abs(T(UBound(T)) - T(UBound(T) - 2)) > tol
dx = (b - a) / (2 ^ (j - 1))
x = a - dx
n = 2 ^ (j - 2)
sum = 0
For i = 1 To n
x = x + 2 * dx
sum = sum + fxP(c, x)
Next
For i = 2 To UBound(T) Step 2
T(i - 1) = T(i)
Next
T(2) = T(1) / 2 + dx * sum
ReDim Preserve T(1 To UBound(T) + 2)
For L = 2 To j
If L <> j Then
T(L * 2) = ((4 ^ (L - 1)) * T(L * 2 - 2) - T(L * 2 - 3)) / ((4 ^ (L - 1)) - 1)
Else
T(UBound(T)) = ((4 ^ (L - 1)) * T(UBound(T) - 1) - _
T(UBound(T) - 2)) / ((4 ^ (L - 1)) - 1)
End If
Next
j = j + 1
Loop
RombergPoly = T(UBound(T))
End FunctionPublic Function fxP(c() As Single, x As Single) As Single
Dim i As Long
fxP = c(UBound(c))
For i = UBound(c) - 1 To LBound(c) Step -1
fxP = c(i) + fxP * x
Next
End Function
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货