Você está na página 1de 15

Métodos Numéricos e Estatísticos Exercícios para o Matlab

Interpolação Polinomial em MatLab

1. Escreva em Matlab a função Lagrange para determinar os coeficientes do


polinómio interpolador de Lagrange, a partir de N pontos dados.

2. Escreva um programa em Matlab para determinar o polinómio interpolador de


Lagrange P3(x), definido pelos pontos (-3,-1), (-2,2), (1,-1) e (3,10). Desenhe
num mesmo gráfico os pontos e o polinómio interpolador de Lagrange no
intervalo -3 ≤ x ≤ 3. Calcule depois P3(0) e apresente o resultado. Compare os
resultados com a resolução do exercício nº1 da Folha Prática nº2.
Sug: Utilize a função Lagrange do exercício 1

3. Escreva um programa em Matlab para determinar o polinómio interpolador de Lagrange


da função sin(x) usando como nós de interpolação 0, π/4 e π/2. Construa o gráfico com
os pontos de interpolação e o polinómio. Depois, dado um valor x introduzido pelo
utilizador no intervalo [0, π/2] calcule o erro absoluto da aproximação da função sin(x)
pelo polinómio P2(x). Compare os resultados com os obtidos no exercício nº2 da Folha
Prática nº2.
Sug: Utilize a função Lagrange do exercício 1

4. Após a resolução do exercício nº2 da Folha Prática nº2, escreva um programa


que faça a representação gráfica da função sin(x) e do polinómio interpolador
de Lagrange P2(x) obtido. Compara ainda os valores de sin(π / 3) e de P2 (π / 3) ,
calculando o erro absoluto.

5. Escreva em Matlab a função PlotLagrange que dada uma função f(x) e um intervalo
para x constrói o gráfico da função e do polinómio interpolador de Lagrange de grau 9.
Sug: Utilize a função Lagrange do exercício 1

6. Escreva em Matlab a função Newton para determinar os coeficientes do


polinómio interpolador de Newton, a partir de N pontos dados.

7. Escreva em Matlab um programa para:


(a) determinar o polinómio interpolador de Newton a partir de uma função
f(x) e n pontos equidistantes.
Nota: os dados sobre a função f(x), o grau do polinómio n e o
intervalo [x1,x2] serão introduzidos pelo utilizador.
(b) construir o gráfico da função e do polinómio.
(c) construir uma tabela com os valores de x, sin(x), Pn(x), En(x).
(d) construir o gráfico com o erro de truncatura E(x) para x1 ≤ x ≤ x2.

Sug: Utilize a função Newton do exercício 6

8. Utilize o programa do exercício 7 para resolver o exercício 4 da folha prática nº 2.


Métodos Numéricos e Estatísticos Exercícios para o Matlab

Notas sobre as funções do Matlab:

1. Polinómios
(Estas funções encontram-se no Interpolation and Polynomials toolbox)

!" função POLYVAL: avalia um polinómio num ponto

Seja um polinómio Pn(x) = c(1)xn + c(2)xn-1 + ...+ c(n)x + c(n+1)

Se C é um vector cujos elementos são os coeficientes c(1), c(2), …, c(n+1) (nesta


ordem!!!) então y= polyval(C,x) é o valor do polinómio avaliado em x.

Exemplo 1: Determinar o valor de P2(x) = x2 – 3x + 2 em x=2.

» C = [1 -3 2] % os coeficientes são armazenados na lista(vector) C

C=
1 -3 2

»x=2
x=
2

» y = polyval C,x)
y=
0 % o valor do polinómio em x=2 é igual a 0

Exemplo 2: Determinar o valor de P2(x) = x2 – 3x + 2 para valores entre x=0 e


x=2 com incremento 0,5.

» for x=0:0.5:3, % são avaliados valores desde x=0 até 2 com incremento
de 0.5
disp([x,polyval(C,x)]),
end

0 2
0.5000 0.7500
1 0
1.5000 -0.2500
2 0
2.5000 0.7500
3 2

!" função ROOTS: Determina as raízes de um polinómio.

ROOTS(C) – Determina as raízes de um polinómio, cujos coeficientes são os


elementos do vector C (C=[Cn Cn-1...C0])

Exemplo 13.2: Determinar as raízes de p(x) = x4 - 10x3 + 35x2 - 50x + 24

» C = [1 -10 35 -50 24]


C=
1 -10 35 -50 24

» roots(C)
ans =
4.0000
3.0000
2.0000
1.0000
Métodos Numéricos e Estatísticos Exercícios para o Matlab

!" função POLY: Dadas as raízes, determina o polinómio (função inversa de


roots)

poly(A) : Como resultado obtém-se os coeficientes do polinómio cujas raízes


são os elementos do vector A

Exemplo:

» z=[1;2] % é introduzido um vector com as raízes do polinómio


z=
1
2

» p=poly(z)
p=
1 -3 2 % é obtido o polinómio de grau 2: x^2-3x+2

Se realizamos agora a função inversa roots obtém-se:

» roots(p)

ans = % são obtidas as raízes do polinómio


2
1

!" função CONV: Determina o produto de 2 polinómios


conv(A,B) – Multiplica dois polinómios
Entrada: A, B - dois vectores com os coeficientes dos polinómios
Resultado: um vector com os coeficientes do polinómio obtido como o produto dos
dois polinómios. Obviamente, este vector é de comprimento:
LENGTH(A)+LENGTH(B)-1.

Exemplo: Determine o produto de dois polinómios de 1º grau p e q , cujas


raízes são 2 e 3 respectivamente.

» p=poly(2)
p=
1 -2 % 2 é raiz do polinómio x-2

» q=poly(3)
q=
1 -3 % 3 é raiz do polinómio x-3

» conv(p,q)
ans =
1 -5 6 % o polinómio resultado é x2-5x+6

!" Funções de computação simbólica para simplificação de expressões:

♦ simplify → simplifica uma expressão


♦ simple → re-escreve uma expressão numa forma mais simples
♦ expand → expande uma expressão
♦ collect → re-escreve a expressão como um polinómio

Exemplo: As instruções em Matlab que se seguem mostram como este


programa pode ajudar na resolução analítica do exercício nº1 da Folha Prática
nº2:
Métodos Numéricos e Estatísticos Exercícios para o Matlab

» syms x % definir x como variável simbólica

» L0=-1/24*((x+2)*(x-1)*(x-3))

» L0=collect(L0)
L0 =
-1/24*x^3+1/12*x^2+5/24*x-1/4

» pretty(L0)
3 2
- 1/24 x + 1/12 x + 5/24 x - 1/44

» L1=1/15*((x+3)*(x-1)*(x-3))

» L1=collect(L1)

L1 =
1/15*x^3-1/15*x^2-3/5*x+3/5

» L2=-1/24*((x+3)*(x+2)*(x-3))

» L2=collect(L2)

L2 =
-1/24*x^3-1/12*x^2+3/8*x+3/4

» L3=1/60*((x+3)*(x+2)*(x-1))

» L3=collect(L3)

L3 =
1/60*x^3+1/15*x^2+1/60*x-1/10

» Y=[1 2 -1 10]

Y=
1 2 -1 10

Podemos construir o polinomio interpolador como:

» p3=L0*Y(1)+L1*Y(2)+L2*Y(3)+L3*Y(4)

p3 =

1/24*(x+2)*(x-1)*(x-3)+2/15*(x+3)*(x-1)*(x-3)+1/24*(x+3)*(x+2)*(x-
3)+1/6*(x+3)*(x+2)*(x-1)

» p3=collect(p3)

p3 =

23/60*x^3+8/15*x^2-97/60*x-3/10

» pretty(p3)

23 3 2 97
-- x + 8/15 x - -- x - 3/10
60 60

O polinómio interpolador de Lagrange (de grau 3) é:

P3(x) = 0.38333 x3+ 0.53333 x2 – 1.61667 x - 0.30000


Métodos Numéricos e Estatísticos Exercícios para o Matlab

Resoluções dos exercícios:

1. Escreva em Matlab a função Lagrange para determinar os coeficientes do


polinómio interpolador de Lagrange que interpola os valores Y(1), Y(2), ...Y(N) nos
nós X(1), X(2), ...X(N).

Resolução:

O polinómio de Lagrange de grau N-1 que interpola os valores Y(1), Y(2), ...Y(N)
nos nós X(1), X(2), ...X(N) é dado por:
PN-1(x) = L1(x) Y(1) + L2(x) Y(2)+...+ LN(x) Y(N)
onde:
Lk(x), k=1…n designam-se por polinómios de Lagrange relativos aos nós
x(1),..,x(N) e podem ser calculado pela seguinte fórmula:
(x -x(1))...(x -x(k-1))(x -x(k+1)...(x -x(n))
Lk(x) =-----------------------------------------------------------
(x(k)-x(1))...(x(k)-x(k-1))(x(k)-x(k+1)...(x(k)-x(n)))

Vamos construir a função Lagrange para determinar o polinómio interpolador de Lagrange:

function [C,L] = Lagrange [X,Y]

Parâmetros de entrada :
X – vector das N abcissas
Y – vector das N ordenadas
Parâmetros de saída:
C – vector com os N coeficientes do polinómio interpolador de Lagrange de
grau N-1
L – matriz NxN com os coeficientes dos polinómios de Lagrange Lk(x)

L(1,:)
L(2,:)
L= ...

L(N,:)

O seja para cada k=1,..,n, cada linha L(k,:) da matriz L corresponde aos
coeficientes do polinomio de Lagrange Lk(x)

1º. Inicializar a matriz L


n = length(X);
L = zeros(n,n);
2º. Determinar os coeficientes dos polinómios de Lagrange Lk(x)

for k=1:n, % constrói o polinómio de Lagrange LN(x)


V = 1; % armazena o produto para construir o polinómio
for i=1:n,
if i ~= k,
V = conv(V,poly(X(i))); % usa poly(r1) para gerar polinómio com raiz x(i)
% conv(P1,P2) - multiplicar dois polinómios
V=V/(X(k)-X(i));
end
end
L(k,:) = V; % o resultado vai para L(k,:)
end
Métodos Numéricos e Estatísticos Exercícios para o Matlab

3º. Determinar os coeficientes do polinómios de Lagrange, multiplicando o


vector das ordenadas pela matriz

C = Y*L;

function [C,L] = lagrange(X,Y)


%--------------------------------------------------------------------------
% Esta função constrói o polinómio interpolador de Lagrange
% Executar:
% [C] = lagrange(X,Y)
% [C,L] = lagrange(X,Y)
%Parâmetros de entrada:
% X vector das abcissas
% Y vector das ordenadas
%Parâmetros de saída:
% C vector com os coeficientes do polinómio interpolador de Lagrange
% L matrix com os coeficientes dos polinómios de Lagrange
%---------------------------------------------------------------------------
echo off;
n = length(X); % determina o número de pontos
L = zeros(n,n); % inicializa a matriz dos coeficientes de Lagrange
for k=1:n, % constrói o polinómio de Lagrange Lk
V = 1;
for i=1:n,
if i ~= k
V = conv(V,poly(X(i)));
V=V/(X(k)-X(i)); % usa poly(r1) para criar um polinómio com raiz r1 e
% conv(P1,P2) para multiplicar dois polinómios
end
end
L(k,:) = V;
end
disp('A matriz dos coeficientes dos polinómios de Lagrange:');
disp('L='),disp(L);

C = Y*L; % multiplica os polinómios de Lagrange com o vector das ordenadas Y

disp('O vector com os coeficientes do polinómio interpolador de Lagrange:');


disp('C='),disp(C);

% construir os polinómios de Lagrange Lk(x)


syms x;
for k=1:n
pl=poly2sym(L(k,:),x);
disp(['O polinómio de Lagrange L',num2str(k),'(x):' ]);
pretty(pl);
end

% construir o polinómio de Lagrange


syms x;
p=poly2sym(C,x);

disp('O polinómio de Lagrange é: ');


pretty(p);

Para executar a função Lagrange primeiramente tem de introduzir o vector com as abcissas e
o vector com as ordenadas:

Por exemplo:

Determinar o polinómio de Lagrange para o exercício 1, FP 2

» X=[-3, -2, 1, 3]
Métodos Numéricos e Estatísticos Exercícios para o Matlab

X=
-3 -2 1 -1

» Y=[-1, 2, -1, 10]

Y=
-1 2 -1 10

» lagrange(X,Y)

A matriz dos coeficientes dos polinómios de Lagrange:


L=
-0.0417 0.0833 0.2083 -0.2500
0.0667 -0.0667 -0.6000 0.6000
-0.0417 -0.0833 0.3750 0.7500
0.0167 0.0667 0.0167 -0.1000

O vector com os coeficientes do polinómio interpolador de Lagrange:


C=
0.3833 0.5333 -1.6167 -0.3000

O polinómio de Lagrange L1(x):

- 1/24 x3 + 1/12 x2 + 5/24 x - 1/4

O polinómio de Lagrange L2(x):

1/15 x3 - 1/15 x2 - 3/5 x + 3/5

O polinómio de Lagrange L3(x):

- 1/24 x3 - 1/12 x2 + 3/8 x + ¾

O polinómio de Lagrange L4(x):

1/60 x3 + 1/15 x2 + 1/60 x - 1/10

O polinómio de Lagrange é:

23 97
-- x3 + 8/15 x2 - -- x - 3/10
60 60
Métodos Numéricos e Estatísticos Exercícios para o Matlab

2. Escreva um programa em Matlab para determinar o polinómio interpolador de


Lagrange P3(x), definido pelos pontos (-3,-1), (-2,2), (1,-1) e (3,10). Desenhe
num mesmo gráfico os pontos e o polinómio interpolador de Lagrange no intervalo
-3 ≤ x ≤ 3. Calcule depois P3(0) e apresente o resultado.

%-----------------------------------------------------------------------
% Este programa:
% 1º. determina o polinómio interpolador de Lagrange P3(x)definido pelos
% pontos: (-3,-1), (-2,2), (1,-1) e (3,10).
% 2º.constrói um gráfico com os pontos e o polinómio de Lagrange
% no intervalo -3 <= x <= 3.
% 3º. calcula P3(0) e apresenta o resultado
%-----------------------------------------------------------------------
echo off;
% 1º. determina o polinómio interpolador de Lagrange P3(x)definido pelos
pontos:
X=[-3,-2,1,3];
Y=[-1,2,-1,10];
C=lagrange(X,Y); % devolve o vector C com os coeficientes do polinómio
% de Lagrange
% avalia o polinómio de Lagrange para -3<=x<=-3 com incremento 0.1
X1=-3:0.1:3;
Y1=polyval(C,X1);

% 2º. constrói um gráfico com os pontos e o polinómio interpolador de


Lagrange
disp('Prima uma tecla para desenhar o gráfico');
pause;
a = min(X1);
b = max(X1);
c = min(Y1);
d = max(Y1);
figure(1);clf;
hold on;
whitebg('w');
plot([a b],[0 0],'b',[0 0],[c d],'b');
axis([a b c d]);
plot(X,Y,'or',X1,Y1,'-g');
xlabel('x');
ylabel('y');
title('Interpolação de Lagrange');
grid;
hold off;

% 3º. calcula P3(0) e apresenta o resultado


disp('Prima uma tecla para avaliar o polinómio');
pause;

y=polyval(C,0);
Métodos Numéricos e Estatísticos Exercícios para o Matlab

3. Escreva um programa em Matlab para determinar o polinómio interpolador de Lagrange


da função sin(x) usando como nós de interpolação 0, π/4 e π/2. Construa o gráfico com
os pontos de interpolação e o polinómio. Depois, dado um valor x introduzido pelo
utilizador no intervalo [0, π/2] calcule o erro absoluto da aproximação da função sin(x)
pelo polinómio P2(x). Compare os resultados com os resultados do do exercício nº2
da Folha Prática nº2

%------------------------------------------------------------------------
% Este programa determina um valor aproximado para sin(pi/3),recorrendo a
% fórmula de interpolação de Lagrange e usando como nós de interpolação %
% 0, pi/4 e pi/2.
%------------------------------------------------------------------------

echo off;
% 1º. determina o polinómio interpolador de Lagrange P2(x)usando como nós
de interpolação 0, p/4 e p/2.

X=[0,pi/4,pi/2];
Y=sin(X); % determinar o valor de sin(x) nestes pontos
C=lagrange(X,Y); % devolve o vector C com os coeficientes do
polinómio de Lagrange

% avalia o polinómio de Lagrange para -3<=x<=-3 com incremento 0.1


X1=0:pi/16:pi/2;
Y1=polyval(C,X1);

% 2º. constrói um gráfico com os pontos e o polinómio interpolador de


Lagrange
disp('Prima uma tecla para desenhar o gráfico');
pause;
a = min(X1);
b = max(X1);
c = min(Y1);
d = max(Y1);
figure(1);clf;
hold on;
whitebg('w');
plot([a b],[0 0],'b',[0 0],[c d],'b');
axis([a b c d]);
plot(X,Y,'or',X1,Y1,'-g');
xlabel('x');
ylabel('y');
title('Comparação do polinómio interpolador de Lagrange a função
sin(x)');
grid;
hold off;

% 3º. calcula P2(pi/3) e apresenta o resultado


x=input('Introduza um valor no intervalo 0..pi/2: ');
y=sin(x);
y1=polyval(C,x);
erro=abs(y-y1);
disp(['O valor de sin(', num2str(x),')= ']),disp(y);
disp(['O valor de P2(', num2str(x),')= ']),disp(y1);
format long;
disp('O erro absoluto da aproximação é igual a: '),disp(erro);
Métodos Numéricos e Estatísticos Exercícios para o Matlab

4. Após a resolução do exercício nº2 da Folha Prática nº2, escreva um programa


que faça a representação gráfica da função sin(x) e do polinómio interpolador de
Lagrange p2(x) obtido. Compare ainda os valores de sin(π / 3) e de p2 (π / 3) ,
calculando o erro absoluto.

% Este programa desenha o gráfico do polinómio de Lagrange para o


% exercicio 2 da Folha Prática 2(exercícios analíticos) e determina o
% erro absoluto da aproximação de sin(pi/3) pelo polinómio de Lagrange

x=0:pi/16:pi/2;
y=sin(x);
p=[-0.3357 1.1640 0]; % os coeficientes foram obtidos de forma analítica
z=polyval(p,x);
axis([-0.2 1.8 -0.1 1.1]);
plot([-0.2 1.8],[0,0],[0,0],[-0.1 1.1]);
hold on;
xlabel('x');
ylabel('y');
title('Comparação das funções');
grid;
axis;
plot(x,y,'g',x,z,'or');
pause;
x=pi/3;
y=sin(x);
p=[-0.3357 1.1640 0];
z=polyval(p,x);
dif=abs(y-z);
disp('x = pi/3');
disp(x);
disp('y = sen(x)');
disp(y);
disp('z = p2(x)');
disp(z);
disp('erro absoluto');
disp(dif);
hold off;
Métodos Numéricos e Estatísticos Exercícios para o Matlab

5. Escreva em Matlab a função PlotLagrange que dada uma função f(x) e um


intervalo para x constrói o gráfico da função e do polinómio interpolador de
Lagrange de grau 9.

function C = PlotLagrange(fun,x1,x2)
%---------------------------------------------------------------------------
% Esta função constrói o gráfico da função e do polinómio interpolador de
Lagrange
% de grau 9
% Executar:
% PlotLagrange(fun,x1,x2)
%Parâmetros de entrada:
% fun - a função
% x1,x2 - intervalo para x
%Parâmetros de saída:
% C - os coeficientes do polinómio
%-------------------------------------------------------------------------
echo off;
% 1º. determina o polinómio interpolador de Lagrange P2(x)usando como nós de
% interpolação 0, p/4 e p/2.
h=(x2-x1)/9; % são precisos 10 pontos para construir o polinómio de
grau 9
x=x1:h:x2;
y=eval(fun); % avalia a função nos pontos
C=lagrange(x,y); % devolve o vector C com os coeficientes do polinómio
de Lagrange

% avalia o polinómio de Lagrange para -3<=x<=-3 com incremento 0.1


y1=polyval(C,x);

% 2º. constrói um gráfico com os pontos e o polinómio interpolador de


Lagrange
disp('Prima uma tecla para desenhar o gráfico');
pause;
a = min(x);
b = max(x);
c = min(y);
d = max(y);
figure(1);clf;
hold on;
whitebg('w');
plot([a b],[0 0],'b',[0 0],[c d],'b');
axis([a b c d]);
plot(x,y,'or',x,y1,'-g');
xlabel('x');
ylabel('y');
title(['Polinómio interpolador de Lagrange de grau 9 e a função ',fun]);
grid;
hold off;
Métodos Numéricos e Estatísticos Exercícios para o Matlab

6. Escreva em Matlab a função Newton para determinar os coeficientes do


polinómio interpolador de Newton, a partir de N pontos dados.

Resolução:

Vamos construir a função Newton para determinar o polinómio interpolador de Lagrange:

function [C,D] = Newton [X,Y]

Parâmetros de entrada :
X – vector das N abcissas
Y – vector das N ordenadas
Parâmetros de saída:
C – vector com os N coeficientes do polinómio interpolador de Lagrange de
grau N-1
D – matriz NxN das diferenças divididas

O polinómio de Newton de grau N-1 que interpola os valores que interpola os Y(1),
Y(2), ...Y(N) nos nós X(1), X(2), ...X(N) é dado por:

PN-1(x) =D(1,1)+ (x-x(1))D(2,2)+ (x-x(1))(x-x(2))D(3,3)+...+


(x-x(1))(x-x(2))...(x-x(N-1))D(N,N)

onde:
D(k,k), k=1…n são os coeficientes da diagonal da matriz das diferenças
divididas

Por exemplo, para 4 pontos, a matriz D de dimensão 4x4 das diferenças divididas é
construída como:

Y(1) 0 0 0
Y(2) (D(1,2)-D(1,1))/X(2)-X(1) 0 0
D= Y(3) (D(1,3)-D(1,2))/X(3)-X(2) (D(2,3)-D(2,2))/X(3)-(1) 0
Y(4) (D(1,4)-D(1,3))/X(4)-X(3) (D(2,4)-D(2,3))/X(4)-(2) D(3,4)-D(3,3))/X(4)-X(1)

1º. Construir a matriz D

n = length(X); % determina o número de pontos


D = zeros(n,n); % inicializa a matriz D com zeros
D(:,1) = Y'; % atribui à coluna 1 o vector das ordenadas
% (inversa do vector Y)
for j=2:n, % para cada coluna da matriz DF
for k=j:n, % calcular os elementos debaixo da diagonal
% aplicar a fórmula para calcular as diferenças divididas
D(k,j) = (D(k,j-1)-D(k-1,j-1))/(X(k)-X(k-j+1));
end
end

2º. A partir dos elementos da diagonal da matriz D construir o polinómio


de Newton

Vamos utilizar o algoritmo de Horner com centros para construir recursivamente o


polinómio de Newton

Para P4(x) por exemplo:

P4(x)=D(1,1)+ (x-x(1))D(2,2) + (x-x(1))(x-x(2))D(3,3)+


(x-x(1))(x-x(2))(x-x(3))D(4,4)
Métodos Numéricos e Estatísticos Exercícios para o Matlab

extraindo como factor comum (x-x(1)), depois (x-x(2)) e assim sucessivamente


pode ser construído o polinómio de Newton recursivamente pela seguinte fórmula:

P4(x)=D(1,1)+ (x-x(1))[(D(2,2) + (x-x(2))[D(3,3)+ (x-x(3))D(4,4))]]

O algoritmo então para determinar y=Pn(x) é o seguinte:


y=D(n,n)
para i=n-1 até 0 fazer:
y= D(i,i)+ y x (x-x(i))
fim do ciclo i
Pn(x)=y

O código em Matlab seria:

C = D(n,n);
for i=(n-1):-1:1,
C = conv(C,poly(X(i)));
m = length(C);
C(m) = C(m) + D(i,i);
end;

%---------------------------------------------------------------
% Esta função constrói o polinómio interpolador de Newton, dado um
% conjunto de pontos
% Executar:
% [C] = Newton(X,Y)
% [C,D] = Newton(X,Y)
% Parâmetros de entrada:
% X - vector das abcissas
% Y - vector das ordenadas
% Parâmetros de saída:
% C - vector com os coeficientes do polinómio interpolador de Newton
% D - a tabela das diferenças divididas
%---------------------------------------------------------------
n = length(X); % determina o número de pontos
D = zeros(n,n); % inicializa a tabela com as diferenças
divididas
D(:,1) = Y'; % atribui à coluna 1 o vector das ordenadas(inversa de Y)
for j=2:n, % para cada coluna da tabela das diferenças divididas
for k=j:n, % calcula os elementos debaixo da diagonal
% a fórmula para calcular as diferenças
D(k,j) = (D(k,j-1)-D(k-1,j-1))/(X(k)-X(k-j+1));
end
end
disp(D);
% algoritmo de Horner com centros para determinar o polinómio de Newton
% y=D(n,n)
% para i=n-1 até 0 fazer:
% y= D(i,i)+ y x (x-x(i))
% fim do ciclo i
% Pn(x)=y

C = D(n,n);
for i=(n-1):-1:1,
C = conv(C,poly(X(i)));
m = length(C);
C(m) = C(m) + D(i,i);
end;
disp(C);
syms x;
disp('Os coeficientes do polinómio interpolador de Newton: ');disp(C);
Métodos Numéricos e Estatísticos Exercícios para o Matlab

Por exemplo para resolver o exercício 3, FP 2 pode ser utilizada a função Newton.

» X=[0,1/4,1/2]

X=

0 0.2500 0.5000

» Y=[4,2,4/3]

Y=

4.0000 2.0000 1.3333

» [C,D]=Newton(X,Y)
4.0000 0 0
2.0000 -8.0000 0
1.3333 -2.6667 10.6667

10.6667 -10.6667 4.0000

Os coeficientes do polinómio interpolador de Newton:


10.6667 -10.6667 4.0000

C=

10.6667 -10.6667 4.0000

» y=polyval(C,1/8)

y=

2.8333

» 17/6

ans =

2.8333

7. Escreva em Matlab um programa para:


(a) determinar o polinómio interpolador de Newton a partir de uma função f(x)
e n pontos equidistantes.
Nota: os dados sobre a função f(x), o grau do polinómio n e o
intervalo [x1,x2] serão introduzidos pelo utilizador.
(b) construir o gráfico da função e do polinómio.
(c) construir uma tabela com os valores de x, sin(x), Pn(x), En(x).
(d) construir o gráfico com o erro de truncatura E(x) para x1 ≤ x ≤ x2.
Métodos Numéricos e Estatísticos Exercícios para o Matlab

%------------------------------------------------------------------
% Este programa:
% 1º- determina o polinómio interpolador de Newton a partir de uma função
% f(x) e n pontos equidistantes.
% 2º- constrói o gráfico da função e do polinómio.
% 3º. constrói uma tabela os valores de x, sin(x), Pn(x), En(x) para 10
pontos equidistantes, -1<= x<=1
% 4º- constrói o gráfico com o erro de truncatura E(x) para x1 <= x <= x2
echo off;
fun=input('Introduza a função (como string): ');
n=input('Introduza o grau do polinómio: ');
disp('Introduza o intervalo para x:');
x1=input('x1='), x2=input('x2=');

% 1º. determina o polinómio interpolador de Newtom Pn(x)

h=(x2-x1)/(n-1) % determina o incremento


x=x1:h:x2;
y=eval(fun); % avalia a função nos pontos para obter as ordenadas
C=newton(x,y); % devolve o vector C com os coeficientes do polinómio
% de Newton

xp=x; % armazena o valor das abcissas para desenhar


% os pontos
yp=y; % armazena o valor das ordenadas para
% desenhar os pontos
x=x1:0.05:x2; % diminui o incremento para obter um melhor
% gráfico
y=eval(fun); % avalia a função nos novos pontos
y1=polyval(C,x); % avalia o polinómio nos novos pontos

% 2º. constrói um gráfico com os pontos, a função e o polinómio


interpolador de Newton
disp('Prima uma tecla para desenhar o gráfico');
pause;
a = min(x);
b = max(x);
c = min(y);
d = max(y);
figure(1);clf;
hold on;
whitebg('w');
plot([a b],[0 0],'b',[0 0],[c d],'b');
axis([a b c d]);

% desenha os pontos equidistantes, a função e o polinómio


plot(xp,yp,'or',x,y,'g',x,y1,'b');
xlabel('x');
ylabel('y');
title(['Interpolação de Newton para a função ',fun]);
grid;
hold off;