Академический Документы
Профессиональный Документы
Культура Документы
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
1. Polinómios
(Estas funções encontram-se no Interpolation and Polynomials toolbox)
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
» 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
» roots(C)
ans =
4.0000
3.0000
2.0000
1.0000
Métodos Numéricos e Estatísticos Exercícios para o Matlab
Exemplo:
» p=poly(z)
p=
1 -3 2 % é obtido o polinómio de grau 2: x^2-3x+2
» roots(p)
» 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
» 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
» 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
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)))
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)
C = Y*L;
Para executar a função Lagrange primeiramente tem de introduzir o vector com as abcissas e
o vector com as ordenadas:
Por exemplo:
» 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
» lagrange(X,Y)
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
%-----------------------------------------------------------------------
% 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);
y=polyval(C,0);
Métodos Numéricos e Estatísticos Exercícios para o Matlab
%------------------------------------------------------------------------
% 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
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
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
Resolução:
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:
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)
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=
» [C,D]=Newton(X,Y)
4.0000 0 0
2.0000 -8.0000 0
1.3333 -2.6667 10.6667
C=
» y=polyval(C,1/8)
y=
2.8333
» 17/6
ans =
2.8333
%------------------------------------------------------------------
% 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=');