Mudanças entre as edições de "Polinômio de Lagrange"

De WikiLICC
Ir para: navegação, pesquisa
m (Polinômio de Lagrange em 2D)
m (Polinômio de Lagrange em 2D)
 
(12 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 15: Linha 15:
 
==Polinômio de Lagrange em 2D==
 
==Polinômio de Lagrange em 2D==
  
Dado um conjunto de (''m''+1)*(''n''+1) pontos:
+
Dado um conjunto de (''m''+1)(''n''+1) pontos:
 
:<math>(x_{ij}, y_{ij},z_{ij}),  0 \leq i \leq m, 0 \leq j \leq n</math>
 
:<math>(x_{ij}, y_{ij},z_{ij}),  0 \leq i \leq m, 0 \leq j \leq n</math>
 
de tal forma que as coordenadas (''x'',''y'') estejam alinhadas numa malha cartesiana, ou seja, os pontos podem ser definidos como
 
de tal forma que as coordenadas (''x'',''y'') estejam alinhadas numa malha cartesiana, ou seja, os pontos podem ser definidos como
:<math>(x_{i}, y_{j},z_{ij})),  0 \leq i \leq m, 0 \leq j \leq n</math>
+
:<math>(x_{i}, y_{j},z_{ij}),  0 \leq i \leq m, 0 \leq j \leq n</math>
o polinômio de Lagrange em duas dimensões pode ser definido a partir do polinômio unidimensional como:
+
o polinômio de Lagrange em duas dimensões pode ser definido a partir do polinômio unidimensional como
  
:<math>L_{ij}(x,y) := L_i(x,y) L_j(x,y)</math>
+
:<math>p(x) := \prod_{i=0}^{m}\prod_{j=0}^{n} z_{ij} L_{ij}(x,y) </math>
 +
onde
 +
:<math>L_{ij}(x,y) := L_i(x) L_j(y)</math>
 +
 
 +
==Algoritmo==
 +
Em scilab podemos implementar como:
 +
 
 +
function y=Lagrange(i,x,X)
 +
  y=1;
 +
  for j=1:length(X)
 +
      if(i ~= j)
 +
          y=y.*(x-X(j))/(X(i)-X(j));
 +
      end
 +
  end
 +
endfunction
 +
 
 +
E a versão bidimensional como
 +
function z=Lagrange2d(i,j,x,y,X,Y)
 +
   
 +
    z=Lagrange(i,x,X).*Lagrange(j,y,Y);
 +
   
 +
endfunction
 +
 
 +
Modo de uso: Defina os pontos interpolados como os vetores X e Y, por exemplo,
 +
X=[1 2 3]';
 +
Y=[4 5 6]';
 +
e calcule ''L''<sub>11</sub>(''x'',''y'') como
 +
Lagrange2d(1,1, 1,4,X,Y)
 +
 +
ans = 1
 +
 
 +
Lagrange2d(1,1, 2,5,X,Y)
 +
 +
ans = 0

Edição atual tal como às 10h20min de 10 de maio de 2013

Em análise numérica, polinômio de Lagrange é usado para interpolação polinomial.

Definição

Dado um conjunto de k+1 pontos:

<math>(x_0, y_0),\ldots,(x_k, y_k)</math>

com todos xj distintos, o polinômio de interpolação de um conjunto de pontos na forma de Lagrange é a combinação linear dos polinômios da base de Lagrange:

<math>p(x) := \sum_{j=0}^{k} y_j L_j(x)</math>

com polinômios da base de Lagrange dados por:

<math>L_j(x) := \prod_{i=0, j\neq i}^{k} \frac{x-x_i}{x_j-x_i} = \frac{x-x_0}{x_j-x_0} \cdots \frac{x-x_{j-1}}{x_j-x_{j-1}} \frac{x-x_{j+1}}{x_j-x_{j+1}} \cdots \frac{x-x_{k}}{x_j-x_{k}}</math>

Polinômio de Lagrange em 2D

Dado um conjunto de (m+1)(n+1) pontos:

<math>(x_{ij}, y_{ij},z_{ij}), 0 \leq i \leq m, 0 \leq j \leq n</math>

de tal forma que as coordenadas (x,y) estejam alinhadas numa malha cartesiana, ou seja, os pontos podem ser definidos como

<math>(x_{i}, y_{j},z_{ij}), 0 \leq i \leq m, 0 \leq j \leq n</math>

o polinômio de Lagrange em duas dimensões pode ser definido a partir do polinômio unidimensional como

<math>p(x) := \prod_{i=0}^{m}\prod_{j=0}^{n} z_{ij} L_{ij}(x,y) </math>

onde

<math>L_{ij}(x,y) := L_i(x) L_j(y)</math>

Algoritmo

Em scilab podemos implementar como:

function y=Lagrange(i,x,X)
  y=1;
  for j=1:length(X)
      if(i ~= j)
          y=y.*(x-X(j))/(X(i)-X(j));
      end
  end
endfunction

E a versão bidimensional como

function z=Lagrange2d(i,j,x,y,X,Y)
   
   z=Lagrange(i,x,X).*Lagrange(j,y,Y);
   
endfunction

Modo de uso: Defina os pontos interpolados como os vetores X e Y, por exemplo,

X=[1 2 3]';
Y=[4 5 6]';

e calcule L11(x,y) como

Lagrange2d(1,1, 1,4,X,Y)

ans = 1
Lagrange2d(1,1, 2,5,X,Y)

ans = 0