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;