-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSpline.m
49 lines (39 loc) · 959 Bytes
/
Spline.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
function [t] = Spline(fun,aa,bb,n,z)
for i = 1:n
x(i) = aa + i * ((bb-aa)/n));
f(i) = fun(x(i));
end
for i = 2:n
h(i) = x(i) - x(i-1);
end
for i = 2:n-1
A(i) = h(i);
B(i) = h(i+1);
C(i) = 2 * (h(i)+ h(i+1));
F(i) = 6 * ((f(i+1)-f(i)/h(i+1)) - ((f(i)-f(i-1))/h(i)));
u(t) = diff(fun(t),2);
u0 = u(aa);
un = u(bb);
a(1) = 0;
b(1) = u0;
for i = 1:n-1
a(i+1) = (-B(i) / (A(i)*a(i) + C(i)));
b(i+1) = ( (F(i)-A(i)*b(i)) / (A(i)*a(i)+C(i)) );
end
c(n) = un;
for i = n-1:1
c(i) = a(i+1) * c(i+1) + b(i+1);
end
c(0) = u0;
for i = 2:n
d(i) = (c(i)-c(i-1)) / h(i);
b(i) = ((h(i) * c(i)) / 2) - (((h(i)^2) * d(i)/6) + ((f(i)-f(i-1))/h(i));
a(i) = f(i);
end
for i = 2:n
if (x(i-1)<=z) && (z<=x(i))
t = a(i) + b(i)*(z-x(i)) + (c(i)/2)*(z-x(i))^2 + (d(i)/6)*(z-x(i))^3
break
end
end
end