Скачиваний:
49
Добавлен:
12.01.2016
Размер:
1.12 Кб
Скачать
Sub сплайн()
Const n = 9, b = -2
Dim x(n) As Double, y(n) As Double, i As Integer, dx(n - 1) As Double, dy(n - 1) As Double, a(1 To n) As Double, c(1 To n) As Double, d(1 To n) As Double, u(n) As Double, v(n) As Double, m(1 To n) As Double, t As Double
For i = 1 To n
x(i) = Cells(i, 1)
y(i) = Cells(i, 2)
dx(i - 1) = x(i) - x(i - 1)
dy(i - 1) = y(i) - y(i - 1)
Next i
c(1) = 1
a(n) = c(1)
d(1) = 3 * dy(1) / dx(1)
d(n) = 3 * dy(n - 1) / dx(n - 1)
For i = 2 To n - 1
c(i) = dx(i - 1) / dx(i - 1) + dx(i)
a(i) = 1 - c(i)
d(i) = 3 * (c(i) * dy(i) / dx(i) + a(i) * dy(i - 1) / dx(i - 1))
Next i
For i = 1 To n
v(i) = c(i) / (b - a(i) * v(i - 1))
u(i) = (a(i) * u(i - 1) - d(i)) / (b - a(i) * v(i - 1))
Next i
m(n) = u(n)
For i = n To 2 Step -1
m(i - 1) = v(i - 1) * m(i) + u(i - 1)
Next i
x(0) = 3.3
For i = 1 To n - 1
If x(i) <= x(0) And x(0) <= x(i + 1) Then
y(0) = y(i) * (1 - t) ^ 2 * (1 + 2 * t) + y(i + 1) * t ^ 2 * (3 - 2 * t) + m(i) * dx(i) * t * (1 - t) ^ 2 _
- m(i + 1) * t ^ 2 * (1 - t) * dx(i)
t = x(0) - x(i) / dx(i)
Exit For
End If
Next i
Debug.Print y(0), x(0) ^ 2.5
End Sub