




Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Calculo Numerico - Interpolação Matlab
Tipologia: Notas de estudo
1 / 8
Esta página não é visível na pré-visualização
Não perca as partes importantes!





Gladys Castillo Jordán
1
( 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.
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
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:
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(N,:)
L=
Gladys Castillo Jordán
7
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]
podemos executar a função Newton:
» [C,D]=Newton(X,Y) C =
1.0667e+001 -1.0667e+001 4.0000e+
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.