Vous êtes sur la page 1sur 2

%clc

%clear
%q=.25;
%x=[0:.5:2];
%y=[3 1.8616 -0.5571 -4.1987 -9.0536];
%n=5;

clc
clear
n=input('digite o numero de elementos da sua tabela: ');
q=input('digite qual ponto deseja se aproximar: ');
for i=1:1:n
x(i)=input('digite os elementos x da tabela: ');
end
for i=1:1:n
y(i)=input('digite os elementos y da tabela: ');
end

for i=1:1:n-1
h(i)=x(i+1)-x(i);
end
%o numero de intervalos e n menos 1 intervaos
%m e o numero de intervalos
m=n-1;
j1=1;
for k=1:1:m-1
for j=1:1:m+1
if k==j
a(k,j)=h(k);
end
if j==k+1
a(k,j)=2*(h(k)+h(k+1));
end
if j==k+2
a(k,j)=h(k+1);
end
if j~=k && j~=(k+1) && j~=(k+2)
a(k,j)=0;
end

end
end
a1=a(:,[2:1:m]);

for k=1:1:n-2
b(k,1)=6*((y(k+2)-y(k+1))/h(k))-6*((y(k+1)-y(k))/h(k+1));
end
g=a1\b;
g1=g';

g2=[0 g1 0];
for k=1:1:n-1
c1(k)=(g2(k+1)-g2(k))/(6*h(k));
end
for k=1:1:n-1
c2(k)=g2(k+1)/2 ;
end
for k=1:1:n-1
c3(k)=((y(k+1)-y(k))/h(k))+(2*h(k)*g2(k+1)+g2(k)*h(k))/6;
end
for k=1:1:n
c4(k)=y(k);
end

for k=1:1:n-1

if q>=x(k) && q<=x(k+1)


p=c1(k)*(q-x(k+1))^3+c2(k)*(q-x(k+1))^2+c3(k)*(q-x(k+1))+c4(k+1);
end

end

%plot(q1,y1)

q1=[x(1):.1:x(n)];
t=size(q1);
t1=t(1,2);
for k=1:1:n-1
for i=1:1:t1
if q1(i)>=x(k) && q1(i)<=x(k+1)

p1=c1(k)*(q1(i)-x(k+1))^3+c2(k)*(q1(i)-x(k+1))^2+c3(k)*(q1(i)-x(k+1))+c4(k+1);
y1(i)=p1;

end
end
end

Vous aimerez peut-être aussi