Escolar Documentos
Profissional Documentos
Cultura Documentos
x 3 4,5 7 9
y 2,5 1 2,5 0,5
(𝑛 − 1) = 3 𝑐𝑢𝑟𝑣𝑎𝑠 𝑠𝑝𝑙𝑖𝑛𝑒𝑠
4 𝑝𝑜𝑛𝑡𝑜𝑠 ⇒ { 𝑚𝑎𝑡𝑟𝑖𝑧 𝑑𝑜𝑠 𝑐𝑜𝑒𝑓𝑖𝑐𝑖𝑒𝑛𝑡𝑒𝑠 𝑐 𝑑𝑒 𝑜𝑟𝑑𝑒𝑚 4𝑥4
𝑘 = 2 𝑒 3 (𝑘 = 2,3, … , 𝑛 − 1)
𝑘 = 2:
𝑓3 − 𝑓2 𝑓2 − 𝑓1
3( )− 3( ) = ℎ1 𝑐1 + 2(ℎ1 + ℎ2 )𝑐2 + ℎ2 𝑐3
ℎ2 ℎ1
𝑘 = 3:
𝑓4 − 𝑓3 𝑓3 − 𝑓2
3( ) − 3( ) = ℎ2 𝑐2 + 2(ℎ2 + ℎ3 )𝑐3 + ℎ3 𝑐4
ℎ3 ℎ2
Lembrando que:
𝑐1 = 0
{
𝑐4 = 0
0
1 0 0 0 𝑐1 𝑓3 − 𝑓2 𝑓2 − 𝑓1
3( ) − 3( )
ℎ1 2(ℎ1 + ℎ2 ) ℎ2 0 𝑐2 ℎ2 ℎ1
[ ] [𝑐 ] =
0 ℎ2 2(ℎ2 + ℎ3 ) ℎ3 3 𝑓4 − 𝑓3 𝑓3 − 𝑓2
𝑐 3( ) − 3( )
0 0 0 1 4 ℎ3 ℎ2
[ 0 ]
Calculando ℎ𝑖 :
ℎ1 = 𝑥2 − 𝑥1 = 1,5
{ℎ2 = 𝑥3 − 𝑥2 = 2,5
ℎ3 = 𝑥4 − 𝑥3 = 2,0
Substituindo:
1 0 0 0 𝑐1 0
1,5 8 2,5 0 𝑐2 4,8
[ ][ ] = [ ]
0 2,5 9 2 𝑐3 −4,8
0 0 0 1 𝑐4 0
0
0,8395
𝑐𝑖 = [ ]
−0,7665
0
𝑐𝑖+1 − 𝑐𝑖 𝑑1 = 0,1866
𝑑𝑖 = ⇒ {𝑑2 = −0,2141
3ℎ𝑖
𝑑3 = 0,1278
𝑓𝑖+1 − 𝑓𝑖 𝑐𝑖+1 + 2𝑐𝑖 𝑏1 = −1,4198
𝑏𝑖 = −( ) ℎ𝑖 ⇒ {𝑏2 = −0,1605
ℎ𝑖 3
𝑏3 = 0,0221
𝑠𝑖 (𝑥) = 𝑓𝑖 + 𝑏𝑖 (𝑥 − 𝑥𝑖 ) + 𝑐𝑖 (𝑥 − 𝑥𝑖 )2 + 𝑑𝑖 (𝑥 − 𝑥𝑖 )3
Obs. A matriz dos coeficientes é tridiagonal, com lei de formação bem característica:
Exercício: Criar um programa para ajustar uma spline com uma quantidade qualquer de pontos.
Plotar o gráfico da curva e comparar com uma polyfit.
clear all
x = v(:,1);
y = v(:,2);
n = length(v);
A = zeros(n);
for i=1:(n-1)
h(i) = x(i+1)-x(i); % Criando os h's
end
for i=2:(n-1)
A(i,i-1) = h(i-1); % Criando sub diagonal principal
A(i,i+1) = h(i); % Criando diagonal acima da principal
A(i,i) = 2*(A(i,i-1)+A(i,i+1)); % Criando diagonal abaixo da
principal
end
a = zeros(n,1);
for i=2:(n-1)
a(i) = 3*((y(i+1)-y(i))/h(i)) - 3*((y(i)-y(i-1))/h(i-1));
end
c = A\a; % Coeficientes c
for i=1:(n-1)
d(i) = (c(i+1)-c(i))/(3*h(i));
b(i) = (y(i+1)-y(i))/h(i) - (c(i+1)+2*c(i))*(h(i)/3);
end
t = zeros(n-1,100);
s = zeros(n-1,100);
for i=1:(n-1)
t(i,:) = linspace(x(i),x(i+1));
s(i,:) = y(i)+b(i).*(t(i,:)-x(i))+c(i).*(t(i,:)-
x(i)).^2+d(i).*(t(i,:)-x(i)).^3;
plot(t(i,:),s(i,:),'b') % Curva spline
hold on
end
p = polyfit(x,y,5);
xx=linspace(x(1),x(end));
pol=polyval(p,xx);
plot(xx,pol,'-g') % Curva polinomial
legend('Spline','Pontos','Polinomial')