Você está na página 1de 8

Exerccios para o Matlab

Gladys Castillo Jordn


Universidade de Aveiro

1

Interpolao Polinomial em MatLab


Notas sobre as funes do Matlab:

1. Polinmios
(Estas funes encontram-se no Interpolation and Polynomials toolbox)

funo POLYVAL: avalia um polinmio num ponto

Seja um polinmio Pn(x) = c(1)x
n
+ c(2)x
n-1
+ ...+ c(n)x + c(n+1)

Se C um vector cujos elementos so os coeficientes c(1), c(2), , c(n+1) (nesta
ordem!!!) ento y= polyval(C,x) o valor do polinmio avaliado em x.

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

C = [1 -3 2] % os coeficientes so armazenados na lista(vector) C

C =
1 -3 2

x = 2
x =
2

y = polyval C,x)
y =
0 % o valor do polinmio em x=2 igual a 0

Exemplo 2: Determinar o valor de P2(x) = x
2
3x + 2 para valores entre x=0 e
x=2 com incremento 0,5.

for x=0:0.5:3, % so 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


funo ROOTS: Determina as razes de um polinmio.

ROOTS(C) Determina as razes de um polinmio, cujos coeficientes so os
elementos do vector C (C=[Cn Cn-1...C0])

Exemplo 13.2: Determinar as razes de p(x) = x
4
- 10x
3
+ 35x
2
- 50x + 24

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

roots(C)
Exerccios para o Matlab

Gladys Castillo Jordn
Universidade de Aveiro

2
ans =
4.0000
3.0000
2.0000
1.0000

funo POLY: Dadas as razes, determina o polinmio (funo inversa de
roots)

poly(A) : Como resultado obtm-se os coeficientes do polinmio cujas razes
so os elementos do vector A

Exemplo:

z=[1;2] % introduzido um vector com as razes do polinmio
z =
1
2

p=poly(z)
p =
1 -3 2 % obtido o polinmio de grau 2: x^2-3x+2

Se realizamos agora a funo inversa roots obtm-se:

roots(p)

ans = % so obtidas as razes do polinmio
2
1

funo CONV: Determina o produto de 2 polinmios
conv(A,B) Multiplica dois polinmios
Entrada: A, B - dois vectores com os coeficientes dos polinmios
Resultado: um vector com os coeficientes do polinmio obtido como o produto dos
dois polinmios. Obviamente, este vector de comprimento:
LENGTH(A)+LENGTH(B)-1.

Exemplo: Determine o produto de dois polinmios de 1 grau p e q , cujas
razes so 2 e 3 respectivamente.

p=poly(2)
p =
1 -2 % 2 raiz do polinmio x-2

q=poly(3)
q =
1 -3 % 3 raiz do polinmio x-3

conv(p,q)
ans =
1 -5 6 % o polinmio resultado x
2
-5x+6


Funes de computao simblica para simplificao de expresses:

simplify simplifica uma expresso
simple re-escreve uma expresso numa forma mais simples
expand expande uma expresso
collect re-escreve a expresso como um polinmio

Exerccios para o Matlab

Gladys Castillo Jordn
Universidade de Aveiro

3
Exemplo: As instrues em Matlab que se seguem mostram como o Matlab
pode ajudar na resoluo analtica do seguinte exerccio:

Encontre usando a frmula interpoladora de Lagrange, o polinmio
p
3
(x), definido pelos pontos (-3, 1), (-2, 2), (1, -1) e (3, 10)

X=[-3 -2 1 3]


syms x % definir x como varivel simblica

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) % construir p
3
(x)

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




Exerccios para o Matlab

Gladys Castillo Jordn
Universidade de Aveiro

4
pretty(p3)

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


O polinmio interpolador de Lagrange (de grau 3) :

P
3
(x) = 0.38333 x
3
+ 0.53333 x
2
1.61667 x - 0.30000


Proposta de Exerccios a desenvolver em Matlab


1. Escreva um programa em Matlab que avalie um polinmio num ponto x usando
o algoritmo de Horner. O programa dever primeiramente pedir ao utilizador
para introduzir o grau do polinmio, os coeficientes e o valor de x. Como
resultado o programa mostrar o valor do polinmio no ponto x. Compare os
resultados obtidos por este programa com os obtidos usando a funo polyval.

2. Escreva em Matlab a funo Lagrange para determinar os coeficientes do
polinmio interpolador de Lagrange, a partir de N pontos dados.

3. Utilizando a funo Lagrange do exerccio 2, escreva um programa em Matlab
para determinar o polinmio interpolador de Lagrange P
3
(x), definido pelos
pontos (-3,-1), (-2,2), (1,-1) e (3,10). Desenhe num mesmo grfico os pontos
e o polinmio interpolador de Lagrange no intervalo -3 x 3. Calcule depois
P
3
(0) e apresente o resultado.

4. Utilizando a funo Lagrange do exerccio 2, escreva um programa em Matlab
para determinar o polinmio interpolador de Lagrange da funo sin(x) usando
como ns de interpolao 0, /4 e /2. Construa o grfico com os pontos de
interpolao, o polinmio e a funo. Logo, compare os valores de ) 3 / sin( e
de P
2
) 3 / ( , calculando o erro absoluto.

5. Escreva em Matlab a funo PlotLagrange que dada uma funo f(x) e um intervalo
para x constri o grfico da funo e do polinmio interpolador de Lagrange de grau n.
Sug: Utilize a funo Lagrange do exerccio 2

6. Escreva em Matlab a funo Newton para determinar os coeficientes do
polinmio interpolador de Newton, a partir de N pontos dados.

7. Utilizando a funo Newton do exerccio anterior, escreva em Matlab um programa
que:
(a) determine o polinmio interpolador de Newton a partir de uma funo
f(x) e n pontos equidistantes.
Nota: os dados sobre a funo f(x), o grau do polinmio n e o
intervalo [x
1
,x
2
] sero introduzidos pelo utilizador.
(b) construa o grfico da funo e do polinmio.
(c) construa uma tabela com os valores de x, sin(x), Pn(x), En(x).








Exerccios para o Matlab

Gladys Castillo Jordn
Universidade de Aveiro

5

Notas sobre as resolues de algum dos exerccios:


2. Escreva em Matlab a funo Lagrange para determinar os coeficientes do
polinmio interpolador de Lagrange que interpola os valores Y(1), Y(2), ...Y(N) nos
ns X(1), X(2), ...X(N).

Resoluo:

O polinmio de Lagrange de grau N-1 que interpola os valores Y(1), Y(2), ...Y(N)
nos ns X(1), X(2), ...X(N) dado por:
P
N-1
(x) = L
1
(x) Y(1) + L
2
(x) Y(2)+...+ L
N
(x) Y(N)
onde:
L
k
(x), k=1n designam-se por polinmios de Lagrange relativos aos ns
x(1),..,x(N) e podem ser calculado pela seguinte frmula:
(x -x(1))...(x -x(k-1))(x -x(k+1)...(x -x(n))
L
k
(x) =-----------------------------------------------------------
(x(k)-x(1))...(x(k)-x(k-1))(x(k)-x(k+1)...(x(k)-x(n)))

Vamos construir a funo Lagrange para determinar o polinmio interpolador de Lagrange:

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

Parmetros de entrada :
X vector das N abcissas
Y vector das N ordenadas
Parmetros de sada:
C vector com os N coeficientes do polinmio interpolador de Lagrange de
grau N-1
L matriz NxN com os coeficientes dos polinmios de Lagrange L
k
(x)









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

1. Inicializar a matriz L
n = length(X);
L = zeros(n,n);
2. Determinar os coeficientes dos polinmios de Lagrange L
k
(x)

for k=1:n, % constri o polinmio de Lagrange L
N
(x)
V = 1; % armazena o produto para construir o polinmio
for i=1:n,
if i ~= k,
V = conv(V,poly(X(j))); % usa poly(r1) para gerar polinmio com raiz r
% conv(P1,P2) - multiplicar dois polinmios
V=V/(X(k)-X(j));
end
end
L(k,:) = V; % o resultado vai para L(k,:)
end

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

L(N,:)


L=
Exerccios para o Matlab

Gladys Castillo Jordn
Universidade de Aveiro

6
3. Determinar os coeficientes do polinmio de Lagrange, multiplicando o
vector das ordenadas pela matriz

C = Y*L;


Para executar a funo Lagrange primeiramente tem de introduzir o vector com os ns e o
vector com os valores nodais

Por exemplo:

Determinar o polinmio de Lagrange para o exerccio 3

X=[-3, -2, 1, 3]

X =
-3 -2 1 -1

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

Y =
-1 2 -1 10

lagrange(X,Y)

A matriz dos coeficientes dos polinmios 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 polinmio interpolador de Lagrange:
C=
0.3833 0.5333 -1.6167 -0.3000

O polinmio de Lagrange L1(x):

- 1/24 x
3
+ 1/12 x
2
+ 5/24 x - 1/4

O polinmio de Lagrange L2(x):

1/15 x
3
- 1/15 x
2
- 3/5 x + 3/5

O polinmio de Lagrange L3(x):

- 1/24 x
3
- 1/12 x
2
+ 3/8 x +

O polinmio de Lagrange L4(x):

1/60 x
3
+ 1/15 x
2
+ 1/60 x - 1/10

O polinmio de Lagrange :

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

Exerccios para o Matlab

Gladys Castillo Jordn
Universidade de Aveiro

7
6. Escreva em Matlab a funo Newton para determinar os coeficientes do
polinmio interpolador de Newton, a partir de N pontos dados.

Resoluo:

Vamos construir a funo Newton para determinar o polinmio interpolador de Lagrange:

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

Parmetros de entrada :
X vector das N abcissas
Y vector das N ordenadas
Parmetros de sada:
C vector com os N coeficientes do polinmio interpolador de Lagrange de
grau N-1
D matriz NxN das diferenas divididas


O polinmio de Newton de grau N-1 que interpola os valores que interpola os Y(1),
Y(2), ...Y(N) nos ns X(1), X(2), ...X(N) dado por:

P
N-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=1n so os coeficientes da diagonal da matriz das diferenas
divididas

Por exemplo, para 4 pontos, a matriz D de dimenso 4x4 das diferenas divididas
construda como:







1. Construir a matriz D

n = l engt h( X) ; %det er mi na o nmer o de pont os
D = zer os( n, n) ; %i ni ci al i za a mat r i z D comzer os
D( : , 1) = Y' ; %at r i bui col una 1 o vect or das or denadas
%( i nver sa do vect or Y)
f or j =2: n, %par a cada col una da mat r i z DF
f or k=j : n, %cal cul ar os el ement os debai xo da di agonal
%apl i car a f r mul a par a cal cul ar as di f er enas di vi di das
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 polinmio
de Newton

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

Par a P4( x) por exempl o:

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)
Y(1) 0 0 0
Y(2) (D(1,2)-D(1,1))/X(2)-X(1) 0 0
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)
D=
Exerccios para o Matlab

Gladys Castillo Jordn
Universidade de Aveiro

8

extraindo como factor comum (x-x(1)), depois (x-x(2)) e assim sucessivamente
pode ser construdo o polinmio de Newton recursivamente pela seguinte frmula:

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 ento para determinar y=Pn(x) o seguinte:
y=D( n, n)
par a i =n- 1 at 0 f azer :
y= D( i , i ) + y x ( x- x( i ) )
f i mdo ci cl o i
Pn( x) =y

O cdigo em Matlab seria:

C = D( n, n) ;
f or i =( n- 1) : - 1: 1,
C = conv( C, pol y( X( i ) ) ) ;
m= l engt h( C) ;
C( m) = C( m) + D( i , i ) ;
end;


Por exemplo para determinar o polinmio de Newton dado o seguinte suporte de
interpolao:

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

X =

0 0.2500 0.5000

Y=[4,2,4/3]

Y =

4.0000 2.0000 1.3333

podemos executar a funo Newton:

[C,D]=Newton(X,Y)
C =

1.0667e+001 -1.0667e+001 4.0000e+000


D =

4.0000e+000 0 0
2.0000e+000 -8.0000e+000 0
1.3333e+000 -2.6667e+000 1.0667e+001


onde C- so os coeficientes do polinmio de Newton (p
2
(X)= C(1) x
2
+ C(2) x + C(3))
e D a matriz com as diferenas divididas.