'Calcula a Spline entre os limites dados para um dado dx Sub Spline_Sub() Dim i As Integer, j As Integer, N As Integer Dim xint As Single Dim X As Range, Y As Range, output As Range, dx As Single ReDim Ax(1, 1) As Variant, AAx(1, 1) As Variant ReDim B(1) As Single, gx(1) As Single, h(1) As Single Set X = Application.InputBox(prompt:="Valor s de X", Type:=8) Set Y = Application.InputBox(prompt:="Valor s de Y", Type:=8) Set output = Application.InputBox(prompt:="Celula inicial das colunas de sa?da", Type:=8) dx = Application.InputBox(prompt:="Passo de c?lculo") N = X.Rows.Count 'calcula os coeficientes da equa??o ReDim Ax(1 To N, 1 To N) As Variant ReDim AAx(1 To N, 1 To N) As Variant ReDim B(1 To N) As Single ReDim gx(1 To N) As Single ReDim h(1 To N) As Single For i = 1 To N For j = 1 To N Ax(i, j) = 0 Next j B(i) = 0 gx(i) = 0 Next i h(1) = 0 For i = 2 To N h(i) = X(i) - X(i - 1) Next i Ax(1, 1) = 1 Ax(N, N) = 1 For i = 2 To N - 1 Ax(i, i - 1) = h(i) Ax(i, i) = 2 * (X(i + 1) - X(i - 1)) Ax(i, i + 1) = h(i + 1) B(i) = 6 / h(i + 1) * (Y(i + 1) - Y(i)) + 6 / h(i) * (Y(i - 1) - Y(i)) Next i AAx = WorksheetFunction.MInverse(Ax) For i = 1 To N For j = 1 To N gx(i) = gx(i) + AAx(i, j) * B(j) Next j Next i 'calcula a spline cubica no intervalo entre x(1) e x(n) xint = X(1) j = 1 Do For i = 1 To N - 1 If xint < X(i) Then Exit For Next i output(j, 1) = xint output(j, 2) = gx(i - 1) / 6 / h(i) * (X(i) - xint) ^ 3 + gx(i) / 6 / h(i) * (xint - X(i - 1)) ^ 3 + _ (Y(i - 1) / h(i) - gx(i - 1) * h(i) / 6) * (X(i) - xint) + _ (Y(i) / h(i) - gx(i) * h(i) / 6) * (xint - X(i - 1)) xint = xint + dx j = j + 1 Loop Until xint > X(N) End Sub