Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Interpolação Matlab, Notas de estudo de Cálculo

Calculo Numerico - Interpolação Matlab

Tipologia: Notas de estudo

2011

Compartilhado em 22/11/2011

fabio-alves-46
fabio-alves-46 🇧🇷

1 documento

1 / 8

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Exercícios para o Matlab
Gladys Castillo Jordán
Universidade de Aveiro
1
Interpolação Polinomial em 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)
pf3
pf4
pf5
pf8

Pré-visualização parcial do texto

Baixe Interpolação Matlab e outras Notas de estudo em PDF para Cálculo, somente na Docsity!

Gladys Castillo Jordán

1

Interpolação Polinomial em 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 P 2 (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 P 2 (x) = x^2 – 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. disp ([x, polyval (C,x)]), end

0 2 0.5000 0. 1 0 1.5000 -0. 2 0 2.5000 0. 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 -10 35 -50 24] C = 1 -10 35 -50 24

» roots(C)

Gladys Castillo Jordán

2

ans =

‰ 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+

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-

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

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

‰ 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

Gladys Castillo Jordán

4

» pretty(p3)

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

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

P 3 (x) = 0.38333 x^3 + 0.53333 x^2 – 1.61667 x - 0.

Proposta de Exercícios a desenvolver em Matlab

1. Escreva um programa em Matlab que avalie um polinómio num ponto x usando o algoritmo de Horner. O programa deverá primeiramente pedir ao utilizador para introduzir o grau do polinómio, os coeficientes e o valor de x. Como resultado o programa mostrará o valor do polinómio no ponto x. Compare os resultados obtidos por este programa com os obtidos usando a função polyval. 2. Escreva em Matlab a função Lagrange para determinar os coeficientes do polinómio interpolador de Lagrange, a partir de N pontos dados. 3. Utilizando a função Lagrange do exercício 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. 4. Utilizando a função Lagrange do exercício 2, 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, o polinómio e a função. Logo, compare 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 n. Sug: Utilize a função Lagrange do exercício 2 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. Utilizando a função Newton do exercício anterior, escreva em Matlab um programa que: (a) determine 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) construía o gráfico da função e do polinómio. (c) construía uma tabela com os valores de x, sin(x), Pn(x), En(x).

Gladys Castillo Jordán

5

Notas sobre as resoluções de algum 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) = L 1 (x) Y(1) + L 2 (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- L – matriz NxN com os coeficientes dos polinómios de Lagrange Lk (x)

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(j))); % usa poly(r1) para gerar polinómio com raiz r % conv(P1,P2) - multiplicar dois polinómios 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=

Gladys Castillo Jordán

7

  1. 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- 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:

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)

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=

Gladys Castillo Jordán

8

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;

Por exemplo para determinar o polinómio de Newton dado o seguinte suporte de interpolação:

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

X =

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

Y =

podemos executar a função Newton:

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

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

D =

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

onde C- são os coeficientes do polinómio de Newton (p 2 (X)= C(1) x^2 + C(2) x + C(3)) e D é a matriz com as diferenças divididas.