Sie sind auf Seite 1von 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 P 3 (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 P 3 (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 P 2 (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 P 2 (x) obtido. Compara ainda os valores de sin(π / 3) e de P 2 (π/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 [x 1 ,x 2 ] 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 x 1 x x 2 .

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)x n + c(2)x n-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) = x 2 – 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) = x 2 – 3x + 2 para valores entre x=0 e x=2 com incremento 0,5.

» for x=0:0.5:3,

de 0.5 disp([x,polyval(C,x)]), end

% são avaliados valores desde x=0 até 2 com incremento

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)

=

x 4 - 10x 3 + 35x 2 - 50x + 24

» C = [1 C =

1

-10 35

35

-10

-50 24]

-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 =

2

1

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

!" 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

»

q

p=poly(2)

=

1 -2

q=poly(3)

=

1 -3

» conv(p,q)

ans =

1 -5

6

% 2 é raiz do polinómio x-2

% 3 é raiz do polinómio x-3

% o polinómio resultado é x 2 -5x+6

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

simplify

simple

expand

collect

simplifica uma expressão

re-escreve uma expressão numa forma mais simples

re-escreve a expressão como um polinómio

expande uma expressão

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)

- 1/24 x

3

2

+ 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) é:

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:

P N-1 (x) = L 1 (x) Y(1) + L 2 (x) Y(2)+

onde:

+

L N (x) Y(N)

L k (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))

L k (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

L

– vector com os N coeficientes do polinómio interpolador de Lagrange de

grau N-1

– matriz NxN com os coeficientes dos polinómios de Lagrange L k (x)

L=

L(1,:)

L(2,:)

L(N,:)

O seja para cada k=1,

coeficientes do polinomio de Lagrange L k (x)

,n,

cada linha L(k,:) da matriz L corresponde aos

1º. Inicializar a matriz L

n

= length(X);

L

= zeros(n,n);

2º. Determinar os coeficientes dos polinómios de Lagrange L k (x)

for k=1:n, V = 1; for i=1:n,

if i ~= k,

% constrói o polinómio de Lagrange L N (x) % armazena o produto para construir o polinómio

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; end

% o resultado vai para L(k,:)

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:

% vector das abcissas

% vector das ordenadas

%Parâmetros de saída:

% vector com os coeficientes do polinómio interpolador de Lagrange

% matrix com os coeficientes dos polinómios de Lagrange

%---------------------------------------------------------------------------

echo off;

n = length(X);

L = zeros(n,n); for k=1:n, V = 1; for i=1:n,

X

Y

C

L

% determina o número de pontos

% inicializa a matriz dos coeficientes de Lagrange % constrói o polinómio de Lagrange Lk

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

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 x 3

+ 1/12 x 2

+ 5/24 x - 1/4

O

polinómio de Lagrange L2(x):

1/15 x 3

- 1/15 x 2

- 3/5 x + 3/5

O

polinómio de Lagrange L3(x):

- 1/24 x 3

- 1/12 x 2

+ 3/8 x + ¾

O

polinómio de Lagrange L4(x):

1/60 x 3

+ 1/15 x 2

+ 1/60 x - 1/10

O

polinómio de Lagrange é:

23

97

-- x 3

+ 8/15 x 2

- -- 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 P 3 (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 P 3 (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º. 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);

-3 <= x <= 3.

% 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);

C=lagrange(X,Y);

% determinar o valor de sin(x) nestes pontos % 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

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);

pi/2:

');

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); C=lagrange(x,y); de Lagrange

% avalia a função nos pontos % devolve o vector C com os coeficientes do polinómio

% 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:

P N-1 (x) =D(1,1)+ (x-x(1))D(2,2)+ (x-x(1))(x-x(2))D(3,3)+

onde:

(x-x(1))(x-x(2))

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

+

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:

D=

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)

1º. Construir a matriz D

n

D

= length(X);

= zeros(n,n);

D(:,1) = Y';

D(:,1) = Y';

for j=2:n,

for j=2:n,

for k=j:n,

for k=j:n,

% determina o número de pontos

% inicializa a matriz D com zeros % atribui à coluna 1 o vector das ordenadas % (inversa do vector Y) % para cada coluna da matriz DF % calcular os elementos debaixo da diagonal

o vector das ordenadas % (inversa do vector Y) % para cada coluna da matriz DF
o vector das ordenadas % (inversa do vector Y) % para cada coluna da matriz DF
o vector das ordenadas % (inversa do vector Y) % para cada coluna da matriz DF

% 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 % calcula os elementos debaixo da diagonal

for k=j:n,

% 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 [x 1 ,x 2 ] 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 x 1 x x 2 .

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

y=eval(fun);

% gráfico % 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;