Vander Monde
-
Upload
luis-miguel-barreno -
Category
Documents
-
view
7 -
download
1
Transcript of Vander Monde
DEPARTAMENTO DE CIENCIAS ELÉCTRICA Y ELECTRÓNICA
INGENIERÍA ELECTRONICA EN AUTOMATIZACIÓN Y
CONTROL
MÉTODOS NUMÉRICOS
ING.FERNANDO SALAS
NRC: 1392
INTERPOLACIÓN POLINOMICA
MÉTODO DE VANDERMONDE
INTEGRANTES:
-ANDREA TRUJILLO
-LUIS MIGUEL BARRENO
CUARTO NIVEL
07-01-2013
INTERPOLACIÓN POLINÓMICA
La interpolación polinómica es una técnica de interpolación de un conjunto de datos o de una función por
un polinomio. Es decir, dado cierto número de puntos obtenidos por muestreo o a partir de
un experimento se pretende encontrar un polinomio que pase por todos sus puntos.
Dada una función f de la cual se conocen sus valores de la variable independiente , se
llama interpolación polinómica al proceso de hallar un polinomio P(x) de grado menor o igual a N,
cumpliendo que : .
Existe un polinomio único de grado m, el cual es válido solo dentro del dominio de la función.
Para poder realizar el polinomio se necesita una tabla de datos , en la cual es necesario identificar la variable
independiente y dependiente y así utilizar uno de los métodos que se utiliza en la interpolación polinómica.
Uno de los métodos utilizado para encontrar el polinomio es el de Vandermonde.
MÉTODO DE VANDERMONDE
Se define el polinomio de Vandermonde de la Siguiente forma:
En donde N indica el grado del polinomio.
La matriz de Vandermonde se construye respecto a la variable independiente de la siguiente manera:
=
En la primera columna de la matriz se debe poner los elementos de la tabla de valores de x elevados a la
potencia N, la cual indica el número de pares de datos y el grado del polinomio, en la siguiente columna se
colocan los mismos datos pero elevados a la N-1 y así sucesivamente hasta llegar a la última columna que
sus valores serán todos 1 ya que son los datos elevados a la cero.
Los resultados de la resolución de la matriz son los coeficientes del polinomio es decir
Una vez obtenida la matriz es necesario buscar un método para resolver la misma , el método escogido fue
el Método de Crout .
MÉTODO DE CROUT
En el método de Crout la matriz A es factorizada como A= LU en donde la matriz L es una matriz triangular
inferior y U una matriz triangular superior con diagonal unitaria .
El método de Crout es un procedimiento del tipo recursivo, esto significa el desarrollo de un conjunto de
pasos sucesivos en donde el trabajo a realizar en cada paso resulta similar o del mismo tipo pero basado en
resultados obtenidos en pasos anteriores. Estos pasos consisten en la descomposición sucesiva de los
menores principales de la matriz de coeficientes A.
Para realizar el programa nos basamos en las siguientes definiciones utilizadas para resolver sistemas de
ecuaciones lineales por el MÉTODO DE CROUT.
La fórmula para obtener los n vectores solución es:
Donde:
Para llenar las matrices L y U se lo hará de una forma practica en donde cada figura significará una fórmula
que utiliza el método de Crout para resolver sistemas de ecuaciones lineales.
Donde:
El orden que se utilizó para llenar las matrices L y U se muestra a continuación:
La secuencia de operaciones para determinar los elementos de la matriz L y U son llenar los elementos de la
primera columna de la matriz L; los de la primera fila de la matriz U; los de la segunda columna de la matriz
L; los de la segunda fila de la matriz U, etc.
Este proceso se debe repetir hasta llenar n columnas de L y n filas de U depende del sistema de ecuaciones,
cabe recalcar que la matriz ingresada debe ser cuadrada es decir de nxn debido a que en L y U se forman
matrices triangulares inferior y superior respectivamente.
EXPLICACIÓN DEL CÓDIGO
A continuación se muestra una breve explicación del código realizado en matlab:
Para realizar el programa se lo separó en varias funciones para lograr la optimización del mismo.
Este consta de 5 funciones las cuales son:
VANDERMONDE
Matrizdevandermonde
Grafico
Sustitucion
crout1
A continuación se explicara la función de cada una de ellas.
Función VANDERMONDE
En esta función es la principal ya que se llama a las funciones secundarias las cuales construirán la
matriz de Vandermonde y lo resolverán por el método de Crout, también se valida el ingreso de la
tabla de datos, se construye el polinomio , se realiza la llamada a la función grafico la cual dibujara la
curva dada por el polinomio ,se guardan las variables necesarias y se configura el botón de ayuda.
global X %declaracion de la variable global x
X1=get(handles.uitable6,'Data') X1 = str2double(X1) %convierte los valores de la tabla X1 a numeros de
tipo double
a=matrizvandermonde(X1); llama a la funcion para construir la matriz de
vandermonde
[X n]=Crout1(a,X1); % se envia la matriz para resolverla por crout
celda2=cell(1,n); %imprimimos la solucion las ecuaciones en la tabla X celda2(:,:)={''}; set(handles.uitable3,'Data',celda2);%guarda los datos en la tabla a set(handles.uitable3,'Data',X); set(handles.uitable3,'visible','on');
poli=poly2sym(X)% expresa el polinomio caracteristico respecto a la
variable x set(handles.text19,'String',char(poli)) grafico(X,X1) % llama a la funcion para graficar el polinomio
b=get(handles.edit6,'String'); b=str2double(b); celda1=cell(b,2); %creamos el tamaño de la tabla de datos para ingresar
valores celda1(:,:)={''}; set(handles.uitable6,'Data',celda1);
global X d=get(handles.edit8,'String'); d=str2double(d); e=polyval(X,d);% evaluacion del polinomio set(handles.text22,'String',e) % se guarda el resultado
Botón de ayuda para saber la forma y el orden de ingreso helpdlg('En numero de pares, se debe ingresar el numero de pares datos
que desee . *Se debe ingresar la Tabla de datos, primera columna X,
segunda columna Y en ese orden.*Valor es un parametro no obligatorio el
cual evalua el polinomio en el valor ingresado',' Vandermonde devuelve el
polinomio, el valor de los coeficientes y el grafico del mismo ');
Función matrizdevandermonde
Esta función permite a partir de la tabla de datos construir la matriz de Vandermonde , esta devuelve la
matriz A la cual será resuelta por el método de Crout y recibe los datos de la variable independiente
function [A]=matrizvandermonde(X1) [f c]=size(X1);
A=zeros(f); % se crea matriz de ceros para luego llenar la matriz con la
matriz de vandermonde % con este for se realiza la construccion de la matriz la cual eleva cada % elemento de los valores de x a la potencia j =f-1 hasta 0
for i=1:f cont=0; for j=f-1:-1:0 cont=cont+1; A(i,cont)=X1(i)^j; end end
end
Función Crout1
Se envía la matriz obtenida en la función matrizdevandermonde para ser resuelta por este método.
En las siguientes líneas de código se extrae los valores ingresados en la matriz A, es necesario convertirlos
a través de una variable carácter str2num la cual convierte la cadena de caracteres ingresada en su valor
numérico exacto utilizado por Matlab, en este caso nos convertiría en una matriz ya que A debe ser
ingresado exactamente igual como en el command window.
function [X n]=Crout1(a,X1)
Declaración de variables
[n,p]=size(a); l=zeros(n); u=eye(n); cont1=0; cont2=0; control=0;
Validaciones
f=X1(:,2)'; if det(a)==0 %validacion de la existencia de soluciones msgbox('El sistema no tiene solucion o tiene infinitas soluciones','
CROUT '); control=2; else for i=1:n %todo este for es de validacion, si las menores principales
de A son cero entonces el sistema no se puede resolver por LU if det(a(1:i,1:i))==0 disp('A No posee factorizacion LU') X=linsolve(a,f'); %si la matriz no puede resolverse por LU,
utilizo la funcion predeterminda linsolve X=X'; control=2; %variable de control break end end end
Método de Crout
%si la variable de control es diferente de 2, existe la facorizacion LU,
y %se realizan los calculos de cada formula que conforma el metodo de crout if control~=2
l(:,1)=a(:,1); %formula para calcular la primera columna de L
for j=2:n u(1,j)=a(1,j)/l(1,1); %formula para calcular la primera fila de U end % este for es para aplicar el orden de como se van a llenar las
matrices % L y U se llenaran columna de L fila de U en orden for m=1:2*n-2 if mod(m,2)~=0 cont1=cont1+1; j=cont1+1; %for j=cont1+1:cont1+1 for i=j:n sum1=0; for k=1:j-1 sum1=sum1+l(i,k)*u(k,j); end l(i,j)=a(i,j)-sum1; % calculo de la segunda,tercera,
etc columna de L end %end else cont2=cont2+1; i=cont2+1;
%for i=cont2+1:cont2+1 for j=i+1:n sum2=0; for k=1:i-1 sum2=sum2+l(i,k)*u(k,j); end u(i,j)=(a(i,j)-sum2)/l(i,i);%calculo de la
segunda,tercera,etc fila de U end
end end
l u faux=X1(:,2)'; %accede a los valores de Y [f1 c1]=size(faux); f=faux g=sustitucion(f,l,n) %sustitucion adelante
X(n)=g(n)/u(n,n);%retrosustitucion
for i=n-1:-1:1 %Todo este for es de retrosustitucion s=0; for j=i+1:n s=s+u(i,j)*X(j); end X(i)=(g(i)-s)/u(i,i); end
X X2=linsolve(a,f');%comprobacion en el command window
End
Función Grafico
Esta función permite crear el grafico del polinomio , la cual recibe como parámetros dos puntos por donde pasa el polinomio. function []=grafico(X,X1)
x=sym('x'); min1=min(X1(:,1)); max1=max(X1(:,1)); poli=poly2sym(X) ezplot(poli,[min1,max1]) hold on plot(X1(:,1),X1(:,2),'*','LineWidth',4) grid hold off end
Función sustitución
La función sustitución se la realiza aparte y es llamada en la parte que necesita el programa:
function [g]=sustitucion(f,l,n) g(1)=f(1)/l(1,1);
% for para realizar la sustitucion hacia adelante
fori=2:n suma=0; for j=1:i-1 suma=suma+l(i,j)*g(j); end g(i)=(f(i)-suma)/l(i,i); end
end
EJEMPLO CON LA INTERFAZ GRAFICA
En la ventana mostrada hacer doble clic sobre el
botón CONTINUAR.
EJEMPLO
Para medir la gravedad se deja caer un peso. A altura h = 100 m se pone el cronómetro a cero y se
miden los tiempos con un cronómetro que mide hasta las décimas cada 25 metros hasta que toca
el suelo. Resulta la siguiente tabla de datos.
x Y
h(m) t(s)
0 4.5
25 3.5
50 1
75 2
Luego de presionar el botón CONTINUAR aparecerá la siguiente ventana:
Además el programa cuenta con una sección Ayuda dentro de la función la cual nos
indica lo que realiza la función, el orden de ingreso, restricciones , etc.
%*** INTERPOLACION POLINOMICA*** %*** PROGRAMA POR EL METODO DE VANDERMONDE*** %1)En numero de pares, se debe ingresar el numero de pares de datos
que desee. %2) Se debe ingresar la Tabla de datos, primera columna X, segunda
columna Y %3)Valor es un parametro no obligatorio, el cual evaluara el
polinomio en el punto ingresado. %Las soluciones de la tabla a de vandermonde se generan de manera
horizontal %El polinomio obtenido se genera automaticamente, de forma exacta. %El grafico del polinomio se genera automaticamente , asi como el
valor de %la funcion evaluada en el punto.
Bibliografía
http://www.slideshare.net/guestdb8ea2b/mini-tutorial-de-matlab
http://ocw.uniovi.es/file.php/54/T4MaterClase/TEMAS/T4AprxItpTe.pdf
http://www2.caminos.upm.es/departamentos/matematicas/Fdistancia/PIE/m
atlab/temasmatlab/TEMA%202.pdf
webpersonal.uma.es/de/gfdc/docencia/GuiSection.pdf
Se debe ingresar el número
de pares de datos
Se debe ingresar la tabla de
datos obtenida del problema
Si se desea evaluar el polinomio
se ingresa el valor de x
Polinomio
Coeficientes
del polinomio
Grafico del
polinomio
Polinomio
evaluado
Se presiona e l botón para
obtener el valor de los
coeficiente , el polinomio, la
grafica y el valor de la función
evaluada en el punto.
www.mathworks.com/discovery/matlab-gui.html
http://www.jldelafuenteoconnor.es/Clase_sisli_12.pdf
http://es.wikipedia.org/wiki/Interpolaci%C3%B3n_polin%C3%B3mica
file:///C:/Users/andrea/Documents/Matriz%20de%20Vandermonde%20-
%20Wikipedia,%20la%20enciclopedia%20libre.htm