Você está na página 1de 14

INSTITUTO TECNOLGICO DE TUXTLA GUTIRREZ

Ingeniera Elctrica

Mtodos Numricos
MC. Mario Alberto de la Cruz Padilla

MTODO DE LA FALSA POSICION CON MATLAB


Manual del usuario
Por: Beltrn Gutirrez Julio Sinuh Jimnez Morales Rodolfo Lara Jimnez Jos David Robles Gonzlez Antonio de Jess Snchez Alegra Avisa.

Tuxtla Gutirrez, Chiapas; a 04 de Marzo de 2011.

CLCULO DE LA RAZ DE UNA ECUACIN POR EL MTODO DE LA FALSA POSICION USANDO MATLAB.
Se realiz un programa en MATLAB que nos permitir conocer la raz de una ecuacin no lineal empleando el mtodo de la falsa posicin. Al iniciar, el programa nos pedir introducir una ecuacin no lineal en funcin de la variable x. Escribimos la ecuacin y presionamos ENTER.

Despus de esto se mostrara en pantalla la grfica de dicha funcin. Ser necesario detectar un punto de corte de la grfica en el eje x (visualizar una posible raz).

En seguida, se solicitar un valor al lado izquierdo del punto de corte.

Posteriormente le solicitara un valor a la derecha del punto de corte. La grafica es necesaria para as tener la certeza de que entre medio de los puntos dados, efectivamente haya una raz.

En seguida se mostrara un men con dos opciones, esto para detener el proceso de clculo de la raz, ya sea al alcanzar un porcentaje de error o por el nmero de iteraciones que el usuario desee.

Deber elegir una de estas dos opciones: Al teclear 1 la raz se aproximar por cierto porcentaje de error, y tecleando 2 se calcular por cierto nmero de iteraciones.

Si se elige la opcin 1 el programa le pedir introducir un porcentaje de error deseado. Al llegar a este porcentaje el programa detendr las operaciones y mostrara en pantalla una tabla de los clculos realizados por este mtodo y debajo de sta una aproximacin de la raz.

Si se elige la opcin 2 el programa solicitara el nmero de iteraciones que desea realizar para obtener la raz. Usted ingresa el numero deseado le da ENTER y el programa lleva a cabo el proceso, para despus despliega una tabla y muestra una aproximacin.

Al final del proceso, el programa solicitar que se elija una opcin: si desea calcular la raz de otra ecuacin debe elegir la opcin 1, de lo contrario elegir 2 para salir y regresar a la pantalla de comandos.

COMANDOS UTILIZADOS EN LA PROGRAMACION

disp(Hola mundo): Permite al usuario visualizar el texto o datos de un programa que se escriben entre los apstrofes. fprintf(Hola mundo): Es parecido al comando disp, la diferencia est en que este comando tiene mas posibilidades de visualizacin grfica. input(Dame un valor): Este comando se utiliza para pedir al usuario un dato de entrada, adems permite visualizar el texto que se escribe dentro de los apstrofes. syms x,y,z,etc: Sirve para que Matlab reconozca a las letras como variables(smbolos). ezplot(f): Grafica la funcin(simblica) que se escribe dentro de los parntesis. eval(f): Evala la funcin que se escribe dentro de los parntesis. swith: Instruccin de programacin, sirve para hacer una estructura selectiva mltiple, su sintaxis es la siguiente, switch ( variable ) case constante1 : // Bloque de instrucciones 1 break; case constante2 : // Bloque de instrucciones 2 break; . . . case constanteN : //Bloque de instrucciones N break; otherwise: // Opcional // Bloque de instrucciones N+1

end

if-else: Instruccin de programacin, evala una condicin (expresin condicional, lgica o aritmtica) y ejecuta instruccin(es) si la condicin se cumple o no. Su estructura de programacin es la siguiente, if expresin condicional Acciones si la expresin resulta ser verdadera; else Acciones si la expresin resulta ser falsa; end

for: instruccin de programacin, es utilizada para ejecutar un bloque de sentencias un nmero fijo de veces, que es igual a valor final menos el valor inicial dividido (ambos) entre el incremento. La sintaxis de su construccin es la siguiente, for declaracin o iniciacin de la(s) variable(s) : condicin(es): incremento(s) // Proceso(s); end

while: Instruccin de programacin, evala una condicin (expresin), si esta es verdadera (diferente de cero), entonces ejecuta el o los procesos nuevamente (y as sucesivamente mientras que sea verdadera), en caso contrario, se da por terminado el proceso iterativo. Se estructura es la siguiente, while condicin // Proceso(s); end

clc: Limpia la pantalla de comandos de matlab.} clear all: Borra la memoria de matlab.

close all: Cierra todas las ventanas secundarias que se abren durante un proceso tales como la de traficacin.

LGICA UTILIZADA EN LA PROGRAMACIN


Utilizamos el comando de programacin switch para hacer un men de opciones en el cual nos d la opcin de detener el proceso ya sea por un porcentaje de error deseado o por un determinado nmero de iteraciones, porque este mtodo (falsa posicin) permite hacerlo de esa manera, es decir el usuario elige que tan cerca o lejos quiere llegar al resultado. Para el primer caso (porcentaje de error deseado), xa es el punto de corte hacia la izquierda y xb el de la derecha despus hacemos un proceso en el xa se igual a x y le pedimos a matlab que evalu la funcin respecto a ese valor, lo mismo sucede con xb. Despus asignamos un valor de uno a fm igual a cero para que en el primer clculo del error sea 100%. Seguimos con la condicin while et>e, donde al principio de esta ciclo et tiene un valor de 100, esto es porque el mximo porcentaje de error entrada e permitido es de 100 y principalmente para que el proceso contine o no. Esta es la parte fundamental del programa. Dentro de esta condicin, calculamos xr(x falsa), despus igualamos a x para poder evaluarla, a esa evaluacin la llamamos fr, despus calculamos un nuevo error, es decir et deja de ser 100. Ahora para nuevos valores de xa y xb en la siguiente iteracin utilizamos una condicin if, porque sabemos que si el producto de f(xb)*f(xr)<0 la raz se encuentra en [xr,xb], si el producto de f(xb)*f(xr)>0 la raz se encuentra en el intervalo [xa,xr], si se encuentra en la primera condicin hacemos un proceso para que la nueva xa valga xr, y lgicamente un proceso donde la nueva fa sea igual a fr; hasta aqu fb y xb sigue siendo las mismas, , esto es suficiente para calcular la nueva xr y completar esta iteracin. Si no se encuentra en esta condicin entonces hacemos un proceso para que la nueva xb tenga el valor de xr; lo mismo sucede con la condicin anterior, lgicamente no es necesario calcular la nueva fb porque si xb tomar el valor xr la evaluacin de fb ser la misma fxr, y as completamos la primera iteracin, lo mismo sucede con la siguiente iteracin si se cumple la condicin hasta que et (error de iteracin) se mayor que la proporcionada por el usuario e.

El segundo caso (por numero de iteraciones), en lugar de un ciclo while utilizamos una condicin for para para que realice el proceso desde ni (numero de iteraciones)=0 hasta n(numero de iteraciones proporcionada por el usuario), y lo que sigue, los clculos de xr se hacen como en el caso anterior. Como en el proceso didctico de la utilizacin de este mtodo se forma una tabla, utilizamos los comandos fprintf y disp para mostrar una tabla en pantalla los valores de xa, xr(x falsa),xb, f(xa), f(xr), f(xb) y et(error). Tambin para comodidad del usuario, en elegir los puntos xa y xb, graficamos la funcin con el comando ezplot.

CDIGO DE PROGRAMACIN EN MATLAB:


fprintf('\nCLCULO DE LA RAZ DE UNA ECUACIN NO LINEAL POR EL MTODO DE LA FALSA POSICION\n\n'); syms x; f=input('Escriba la Funcin f(x)= ','s'); ezplot(f); grid on; fprintf('\nSe gener la grfica de la funcin, revsela\n'); fprintf('\n::: Visualice un punto de corte de la grfica de la funcin con el eje x :::\n\n'); xa=input('Deme un valor a la izquierda del punto de corte: '); xb=input('\nDeme un valor a la derecha del punto de corte: '); fprintf('\n\nDesea detener el proceso... '); fprintf('\n\n 1 Al alcanzar cierto porcentaje de error'); fprintf('\n 2 Por el nmero de iteraciones'); opcion=input('\n\nIntroduzca 1 2: '); x=xa; fa=eval(f); x=xb; fb=eval(f); et=100; fm=0; switch opcion; case 1 e=input('\nPorcentaje de error deseado: '); ni=0; fprintf('\n ::::::::::::::: TABLA ::::::::::::::: \n'); fprintf('\n Iteracin xa xr xb f(xa) f(xr) f(xb) Error \n\n'); while et>e; xr=xb-fb*(xb-xa)/(fb-fa); x=xr; fr=eval(f); et=abs((fr-fm)/fr)*100; disp([ni,xa,xr,xb,fa,fr,fb,et]) if fb*fr<0 xa=xr; fa=fr; else xb=xr;

end

fb=fr; end if et<e fprintf('\n>>> La raz aproximada es: \n'); fprintf(' x= %d\n\n',xr) end ni=ni+1; fm=fr; m=input('Desea calcular la raiz de otra ecuacin, si(1) no(2):'); if(m==1); clc; clear all; close all; FALSAPOSICION; else clc; clear all close all; break end

case 2 n=input('\nNumero de iteraciones a realizar: ') fprintf('\n ::::::::::::::: TABLA ::::::::::::::: \n'); fprintf('\n Iteracin xa xr xb f(xa) f(xr) f(xb) Error \n\n'); for ni=0:n xr=xb-fb*(xb-xa)/(fb-fa); x=xr; fr=eval(f); et=abs((fr-fm)/fr)*100; disp([ni,xa,xr,xb,fa,fr,fb,et]) if fb*fr<0 xa=xr; fa=fr; else xb=xr; fb=fr; end fm=fr; if ni==n fprintf('\n>>> La raz aproximada es: \n'); fprintf(' x= %d\n\n',xr) break end end m=input('Desea calcular la raiz de otra ecuacin, si(1) no(2):'); if(m==1); clc; clear all; close all; FALSAPOSICION else clc; clear all close all; break end otherwise fprintf ('\n\nOpcin no vlida, VUELVA A CORRER EL PROGRAMA!!!\n\n'); end

Você também pode gostar