Sub имс()
Const n = 6, e = 0.001, x = 2.7, i0 = n \ 2 + 1
Dim x0 As Double, x1 As Double, t As Double, dy((n + 1) * (n + 2) / 2 - 1) As Double, P As Double, z As Long, c As Double, t2 As Double, k1 As Integer, k2 As Integer, i As Integer, j As Integer
x0 = Cells(i0, 1): x1 = Cells(i0 + 1, 1): t = (x - x0) / (x1 - x0)
dy(0) = Cells(i0, 2): P = dy(o): z = 1: c = t: t2 = t ^ 2: k2 = 1
For i = 1 To n
k1 = k2: k2 = (i + 1) * (i + 2) / 2: z = z * i
If i \ 2 <> i / 2 Then
dy(k1) = Cells(i0 + (i + 2) \ 2, 2)
dy(k2) = Cells(i0 - (i + 2) \ 2, 2)
For j = 1 To i - 1
dy(k1 + j) = dy(k1 + j - 1) - dy(k1 + j - 2 * i)
dy(k2 + j) = -(dy(k2 + j - 1) - dy(k2 + j - 2 * (i + 1)))
Next j
dy(k1 + i) = dy(k1 + i - 1) - dy(k1 - 1)
dy(k2 + i) = -(dy(k2 + i - 1) - dy(k2 - i - 2))
If i > 1 Then c = c * (t2 - ((i - 1) \ 2) ^ 2)
P1 = c / z * (dy(k2 - 1) + dy(k2 + i)) / 2
Else
dy(k1 + i) = -(dy(k1 + i - 1) - dy(k1 - 1))
P1 = t * c / z * dy(k1 + i)
End If
If Abs(P1) < e Then Exit For
P = P + P1
Next i
Debug.Print P, i - 1, Abs(P1)
Debug.Print x ^ 3.5
End Sub