Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Metodos Numericos Lineales y No Lineales Usando GUI
Metodos Numericos Lineales y No Lineales Usando GUI
ALUMNO(s): Alan Villegas Rios Edie Arturo Portales Barbosa Orlando Muiz Hernandez
ndice Lineales
Eliminacin Gaussiana - Definicin programa - Cdigo Gauss-Jordan - Definicin programa - Cdigo Matriz inversa - Definicin programa - Cdigo Determinante - Definicin programa - Cdigo . . . . . .
Pag.
3 6 8 7 10 9
. 12 . 13
No Lineales
Biseccin Definicin programa - Cdigo Secante - Definicin programa - Cdigo Newton Raphson - Definicin programa - Cdigo Falsa Posicin - Definicin programa - Cdigo . 14 . 15 . 16 . 17 . 18 . 19
. 20 . 21
Conclusiones
. 22
Mtodos Numricos
Lineales
Eliminacin Gaussiana Gauss-Jordan Matriz inversa Determinante
No Lineales
Biseccin Secante Newton Raphson Falsa Posicin
Aqu tenemos nuestro programa en GUI se agregaron mtodos de gauss por pivoteo parcial y Parcial ficticio En la parte de historial de Mtodos al mover el slider nos muestra los pasos que sigui nuestro mtodo a elegir Tambin hay 3 botones uno que genera una matriz aleatoria, otro que nos da la opcin de meter nuestra propia matriz, y por ultimo tenemos el botn de aplicar mtodo, este es el que lleva el cdigo que nos interesa. Tenemos 2 editexts que al mover el slider del historial nos va mostrando los pasos que hizo para resolver la matriz usando el mtodo que elegimos El cdigo es muy largo y dada la complejidad del programa mostrare solo la parte del cdigo importante en la cual esta los algoritmos de los mtodos ya mencionados
global datos if isempty(datos.a) return end a=datos.a; n=length(a); l=eye(size(a)); p=1:n; g=[]; g{1}.matriz=a; g{1}.if=[]; g{1}.ic=[]; g{1}.p=p; g{1}.operacion=' '; escribir(a,handles.matrizu) set(handles.operacion,'string',g{1}.operacion); guidata(handles.operacion,handles); if datos.metodo==3 set(handles.vectorp,'visible','on'); set(handles.text10,'visible','on'); else set(handles.vectorp,'visible','off'); set(handles.text10,'visible','off'); end m=1; for i=1:n if datos.metodo>1 [aux,r]=max(abs(a(p(i:n),i))); r=r+i-1; if datos.metodo==2 & r~=i; % escribir(l,handles.matrizl,[],[i,r])1 m=m+1; g{m}.matriz=a; g{m}.if=[i,r]; g{m}.ic=[]; g{m}.operacion=['Intercambio filas ' num2str([i,r])]; set(handles.operacion,'string',g{m}.operacion); escribir(a,handles.matrizu,[i,r],[]); pause(datos.pausa); a([r,i],:)=a([i,r],:); m=m+1; g{m}.matriz=a; g{m}.if=[i,r]; g{m}.ic=[]; g{m}.p=p; g{m}.operacion=['Intercambio filas ' num2str([i,r])]; set(handles.operacion,'string',g{m}.operacion); escribir(a,handles.matrizu,[i,r],[]); % escribir(l,handles.matrizu,[],[r,i]) % escribir(l,handles.matrizl,[r,i],[])
end
if datos.metodo==3 & p(r)~=p(i); m=m+1; g{m}.matriz=a; g{m}.if=[p(i),p(r)]; g{m}.ic=[]; g{m}.p=p; escribir(a,handles.matrizu,[p(i),p(r)],[]) g{m}.operacion=['Intercambio filas ' num2str([p(i),p(r)])]; set(handles.operacion,'string',g{m}.operacion); set(handles.vectorp,'string',num2str(p)); guidata(handles.vectorp, handles); pause(datos.pausa) p([r i])=p([i r]); %a([r,i],:)=a([i,r],:); m=m+1; g{m}.matriz=a; g{m}.if=[p(i),p(r)]; g{m}.ic=[]; g{m}.p=p; escribir(a,handles.matrizu,[p(i),p(r)],[]) g{m}.operacion=['Intercambio filas ' num2str([p(i),p(r)])]; set(handles.operacion,'string',g{m}.operacion); end end for k=i+1:n %l(k,i)=a(k,i)/a(i,i); l(k,i)=a(p(k),i)/a(p(i),i)*l(i,i); a(p(k),i+1:n)=a(p(k),i+1:n)-l(k,i)*a(p(i),i+1:n); a(p(k),i)=0; escribir(a,handles.matrizu,p(k),i); m=m+1; g{m}.matriz=a; g{m}.if=p(k); g{m}.ic=i; g{m}.p=p; g{m}.operacion=['Cero en ' num2str([p(k) i]) ' con fila ' num2str([p(i),i])]; set(handles.operacion,'string',g{m}.operacion); if datos.metodo~=2 escribir(l,handles.matrizl); end pause(datos.pausa)
% % %
end end escribir(a,handles.matrizu,p(k),i); m=m+1; g{m}.matriz=a; g{m}.if=[ ]; g{m}.ic=[ ]; g{m}.p=p; g{m}.operacion='Fin triangulacion'; set(handles.operacion,'string',g{m}.operacion); %set(handles.slides,'min',1,'max',m) datos.historial=g; set(handles.slides,'sliderstep',[1/(m-1) 1/(m-1)]) set(handles.slides,'value',0) set(handles.slides,'visible','on'); guidata(hObject, handles);
Gauss-Jordan
En matemticas, la eliminacin Gaussiana, eliminacin de Gauss o eliminacin de Gauss-Jordan, llamadas as debido a Carl Friedrich Gauss y Wilhelm Jordan, son algoritmos del lgebra lineal para determinar las soluciones de un sistema de ecuaciones lineales, encontrar matrices e inversas. Un sistema de ecuaciones se resuelve por el mtodo de Gauss cuando se obtienen sus soluciones mediante la reduccin del sistema dado a otro equivalente en el que cada ecuacin tiene una incgnita menos que la anterior. Cuando se aplica este proceso, la matriz resultante se conoce como: "forma escalonada". Algoritmo de eliminacin de Gauss-Jordan 1. Ir a la columna no cero extrema izquierda 2. Si el primer rengln tiene un cero en esta columna, intercambiarlo con otro que no lo tenga 3. Luego, obtener ceros debajo de este elemento delantero, sumando mltiplos adecuados del rengln superior a los renglones debajo de l 4. Cubrir el rengln superior y repetir el proceso anterior con la submatriz restante. Repetir con el resto de los renglones (en este punto la matriz se encuentra en la forma de escaln) 5. Comenzando con el ltimo rengln no cero, avanzar hacia arriba: para cada rengln obtener un 1 delantero e introducir ceros arriba de ste sumando mltiplos correspondientes a los renglones correspondientes
[m,n]=size(A); for i=1:m divisor=A(i,i); for j=i:n A(i,j)=A(i,j)/divisor; end for k=1:m if i~=k pivote = A(k,i); for j=i:n A(k,j)=A(k,j)- pivote*A(i,j); end end end end for i=1:m x(i)=A(i,n); end x=x'; t=1:m; t=t'; cadena=''; for t=1:m cad=sprintf('x%d=%6.2f',t,x(t)); cadena=[cadena;cad]; end set(handles.edit2,'string',cadena);
Matriz inversa
Mtodo de Gauss-Jordan para el clculo de la matriz inversa El mtodo de Gauss - Jordan para calcular la matriz inversa de una dada se basa en una triangularizacin superior y luego otra inferior de la matriz a la cual se le quiere calcular la inversa.
10
11
Determinante de la Matriz
Introduciremos a continuacin el concepto de determinante asociado a una matriz cuadrada. Este concepto permite simplicar operaciones matriciales tales como el calculo del rango o de la matriz inversa. Denfinicin: Si es una matriz 2 x 2 se dene el determinante de la matriz A, y se expresa como det(A) o bien |A|, como el nmero:
Para denir determinantes de matrices de orden mayor que 2 es necesario introducir previamente algunos conceptos. Dada una matriz cuadrada A de orden n, denimos el menor complementario de un elemento de A,aij , como el determinante de la matriz que se obtiene al suprimir la la i y la columna j en la que se encuentra dicho elemento aij . Se representa por Mij .
12
13
14
Ejemplo usado
Funcion= x*cos(x)-2*x^2+3*x-1 a=.2 b=.3 error=0.1
f=get(handles.edit1,'string'); f=inline(f); ezplot(f), grid on
15
Mtodo de la Secante
Cuando existe problema al derivar una funcin, la derivada se puede aproximar a travs de una secante, la cual corta en dos puntos xi-1 y xi a la funcin. Los dos puntos que cortan a la funcin son datos y no requiere que al evaluarse la funcin con estos puntos, esta cambie de signo como en el mtodo de biseccin. La derivada se puede aproximar a la pendiente de esa secante:
16
Ejemplo usado
Funcion = x^3+2*x^2+10*x-20 x0=0 x1=1 e=.001 Cdigo del programa
function varargout = pushbutton3_Callback(h, eventdata, handles, varargin) f=inline(get(handles.edit1,'string')); x0=str2double(get(handles.edit2,'string')); x1=str2double(get(handles.edit3,'string')); E=str2double(get(handles.edit4,'string')); while abs(x1-x0)>E x2=x1-(((x1-x0)*f(x1))/(f(x1)-f(x0))); x0=x1; x1=x2; end set(handles.edit5,'string',x2)
17
Newton Raphson
Se necesita un valor inicial prximo a la raz, con ese valor se extiende una tangente a f(x) desde el punto [xi, f(xi)]. El punto donde esta tangente cruza el eje x, es una nueva aproximacin a la raz. El mtodo se puede derivar de forma geomtrica o bien por la serie de Taylor De forma geomtrica: La primera derivada en x es igual a la pendiente f(x) = [f(xi+1)f(xi)]/( xi+1-xi) Donde f(xi+1) =0 cuando xi+1 es la raz, por lo que ordenando los trminos xi+1 = xi - f(xi)/ f(x) Por la serie de Taylor: f(xi+1)= f(xi) + f(xi)h + f(xi)h2/2! + Truncando en la primera derivada y donde f(xi+1) = 0 cuando xi+1 es la raz h = xi+1 -xi 0 = f(xi) + f(xi) (xi+1 -xi) Ordenando terminus xi+1 = xi - f(xi)/ f(x)
18
Ejemplo usado
Funcion = x^3+2*x^2+10*x-20 derivada = 3*x^2+4*x+10 X0=1 E=.001
f=get(handles.edit1,'string'); f=inline(f); ezplot(f), grid on
f=get(handles.edit1,'string'); g=get(handles.edit2,'string'); f=inline(f); g=inline(g); x=str2double(get(handles.edit3,'string')); E=str2double(get(handles.edit4,'string')); x1=x-f(x)/g(x); while abs (x1-x)>E x=x1; x1=x-f(x)/g(x); end set(handles.edit5,'string',x1);
19
Falsa Posicin
El mtodo de la falsa posicin, (Basado en la interpolacin lineal) es anlogo almtodo de biseccin, puesto que el tamao del intervalo que contiene a la raz sereduce mediante iteracin. Sin embargo, en vez de bisectar en forma montona elintervalo, se utiliza una interpolacin lineal ajustada a dos puntos extremos paraencontrar una aproximacin a la raz 1. Este mtodo sirve para encontrar la raz osolucin real de una ecuacin. Al decir que encuentra su resultado hay que tomar encuenta que no todas las ecuaciones tienen un solo resultado, y que no todas tienenresultado, por lo que hay que tener una idea de la forma de la curva de la ecuacinantes de aplicar el mtodo para que sea efectivo.Es un mtodo que consiste en encontrar una raz que se encuentra en medio de dosvalores iniciales, que son con los cuales el mtodo arranca a trabajar. Cuando se hacelo anterior, el mtodo se denomina interpolacin lineal , mas a menudo, mtodo defalsa posicin (en latn regula falsi) 2.Esta tcnica es similar a la biseccin, salvo que la siguiente iteracin se toma en lainterseccin de una recta entre el par de valores x y el eje x, en vez del punto medio.Es necesario, para que el mtodo iterativo tenga xito al momento de encontrar laraz, que la funcin a la cual se le desea encontrar races, sea evaluada en los dospuntos, la evaluacin en un punto debe ser de diferente signo su magnitud a la funcinevaluada en el otro punto.
20
21
Conclusiones
Alan Villegas Rios Al realizar el trabajo nos topamos con problemas para hacer que el resultado o la grafica se mostrara en nuestro GUI, para resolverlo tuvimos que redisear la mayora de los cdigos obviamente usando la mima logia y sus algoritmos se tuvo que estudia cada uno de los mtodos usados en el programa, para poder entender que datos peda que variables necesitaba para poder completar la operacin de cada mtodo etc..
Edie Arturo Portales Barbosa En este menu se tuvieron que estudiar a fondo el funcionamiento de la mayoria de los codigos dados para corregirlos y hacerlos funcionar adecuadamente ,como tambien investigar cuales eran sus datos numericos o formulas requeridas para que los programas dieran los resultados deseados,como asi tambien disear varios codigos para su graficacion correcta.
Orlando Muiz Hernndez Para concluir en este trabajo aprendimos a resolver mtodos lineales y no lineales por medio de programas hechos en matlab en un principio tuvimos algunos problemas y dudas sobre todo con las variables y tambin al empezar el men tuvimos dificultades al momento de poner los botones y ponerles su nombres. Pero con la ayuda del profesor aclaramos las dudas y salimos adelante.
22