interpolação_matlab

8
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)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, % 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) = x 4 - 10x 3 + 35x 2 - 50x + 24 » C = [1 -10 35 -50 24] C = 1 -10 35 -50 24 » roots(C)

Upload: caique-ferreira

Post on 23-Nov-2015

5 views

Category:

Documents


0 download

TRANSCRIPT

  • 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)xn + c(2)xn-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) = x2 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) = x2 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) = x4 - 10x3 + 35x2 - 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 x2-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 p3(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 p3(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) : P3(x) = 0.38333 x

    3+ 0.53333 x2 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 P3(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 P3(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 P2 )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 [x1,x2] 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: PN-1(x) = L1(x) Y(1) + L2(x) Y(2)+...+ LN(x) Y(N) onde:

    Lk(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))

    Lk(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 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 polinmios de Lagrange Lk(x) for k=1:n, % constri o polinmio de Lagrange LN(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 x3 + 1/12 x2 + 5/24 x - 1/4 O polinmio de Lagrange L2(x): 1/15 x3 - 1/15 x2 - 3/5 x + 3/5 O polinmio de Lagrange L3(x): - 1/24 x3 - 1/12 x2 + 3/8 x + O polinmio de Lagrange L4(x): 1/60 x3 + 1/15 x2 + 1/60 x - 1/10 O polinmio de Lagrange : 23 97 -- x3 + 8/15 x2 - -- 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: 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=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 = length(X); % determina o nmero 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 frmula para calcular as diferenas 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 polinmio de Newton Vamos utilizar o algoritmo de Horner com centros para construir recursivamente o polinmio 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=

  • 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) para i=n-1 at 0 fazer: y= D(i,i)+ y x (x-x(i)) fim do ciclo i Pn(x)=y O cdigo 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 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 (p2(X)= C(1) x2 + C(2) x + C(3)) e D a matriz com as diferenas divididas.