Está en la página 1de 14

INSTITUTO TECNOLÓGICO DE TUXTLA GUTIÉRREZ

Ingeniería Eléctrica

Métodos Numéricos
MC. Mario Alberto de la Cruz Padilla

MÉTODO DE LA FALSA POSICION


CON MATLAB
Manual del usuario

Por:

Beltrán Gutiérrez Julio Sinuhé


Jiménez Morales Rodolfo
Lara Jiménez José David
Robles González Antonio de Jesús
Sánchez Alegría Avisaí.

Tuxtla Gutiérrez, Chiapas; a 04 de Marzo de 2011.


CÁLCULO DE LA RAÍZ DE UNA ECUACIÓN POR EL
MÉTODO DE LA FALSA POSICION USANDO
MATLAB.
Se realizó un programa en MATLAB que nos permitirá conocer la raíz de
una ecuación no lineal empleando el método de la falsa posición.

Al iniciar, el programa nos pedirá introducir una ecuación no lineal en


función de la variable x. Escribimos la ecuación y presionamos ENTER.
Después de esto se mostrara en pantalla la gráfica de dicha función.
Será necesario detectar un punto de corte de la gráfica en el eje “x”
(visualizar una posible raíz).
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 raíz.
En seguida se mostrara un menú con dos opciones, esto para detener el
proceso de cálculo de la raíz, ya sea al alcanzar un porcentaje de error
o por el número de iteraciones que el usuario desee.

Deberá elegir una de estas dos opciones: Al teclear 1 la raíz se


aproximará por cierto porcentaje de error, y tecleando 2 se calculará
por cierto número de iteraciones.
Si se elige la opción 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 cálculos realizados
por este método y debajo de ésta una aproximación de la raíz.
Si se elige la opción 2 el programa solicitara el número de iteraciones
que desea realizar para obtener la raíz. Usted ingresa el numero
deseado le da ENTER y el programa lleva a cabo el proceso, para
después despliega una tabla y muestra una aproximación.
Al final del proceso, el programa solicitará que se elija una opción: si
desea calcular la raíz de otra ecuación debe elegir la opción 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 apóstrofes.

• fprintf(‘Hola mundo’): Es parecido al comando disp, la diferencia


está en que este comando tiene mas posibilidades de visualización
gráfica.

• input(´Dame un valor’): Este comando se utiliza para pedir al


usuario un dato de entrada, además permite visualizar el texto
que se escribe dentro de los apóstrofes.

• syms x,y,z,etc: Sirve para que Matlab reconozca a las letras como
variables(símbolos).

• ezplot(f): Grafica la función(simbólica) que se escribe dentro de los


paréntesis.

• eval(f): Evalúa la función que se escribe dentro de los paréntesis.

• swith: Instrucción de programación, sirve para hacer una


estructura selectiva múltiple, 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: Instrucción de programación, evalúa una condición


(expresión condicional, lógica o aritmética) y ejecuta
instrucción(es) si la condición se cumple o no.
Su estructura de programación es la siguiente,

if expresión condicional

Acciones si la expresión resulta ser verdadera;

else

Acciones si la expresión resulta ser falsa;


end

• for: instrucción de programación, es utilizada para ejecutar un


bloque de sentencias un número fijo de veces, que es igual a valor
final menos el valor inicial dividido (ambos) entre el incremento. La
sintaxis de su construcción es la siguiente,

for declaración o iniciación de la(s) variable(s) :


condición(es): incremento(s)

// Proceso(s);
end

• while: Instrucción de programación, evalúa una condición


(expresión), 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 condición

// 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 traficación.

LÓGICA UTILIZADA EN LA
PROGRAMACIÓN
Utilizamos el comando de programación switch para hacer un
menú de opciones en el cual nos dé la opción de detener el proceso ya
sea por un porcentaje de error deseado o por un determinado número
de iteraciones, porque este método (falsa posición) 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 después hacemos un
proceso en el xa se igual a x y le pedimos a matlab que evalué la
función respecto a ese valor, lo mismo sucede con xb. Después
asignamos un valor de uno a fm igual a cero para que en el primer
cálculo del error sea 100%. Seguimos con la condición while et>e,
donde al principio de esta ciclo et tiene un valor de 100, esto es porque
el máximo porcentaje de error entrada e permitido es de 100 y
principalmente para que el proceso continúe o no. Esta es la parte
fundamental del programa. Dentro de esta condición, calculamos xr(x
falsa), después igualamos a x para poder evaluarla, a esa evaluación la
llamamos fr, después calculamos un nuevo error, es decir et deja de ser
100. Ahora para nuevos valores de xa y xb en la siguiente iteración
utilizamos una condición if, porque sabemos que si el producto de
f(xb)*f(xr)<0 la raíz se encuentra en [xr,xb], ó si el producto de
f(xb)*f(xr)>0 la raíz se encuentra en el intervalo [xa,xr], si se encuentra
en la primera condición hacemos un proceso para que la nueva xa
valga xr, y lógicamente 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 iteración. Si no se encuentra en
esta condición entonces hacemos un proceso para que la nueva xb
tenga el valor de xr; lo mismo sucede con la condición anterior,
lógicamente no es necesario calcular la nueva fb porque si xb tomará el
valor xr la evaluación de fb será la misma fxr, y así completamos la
primera iteración, lo mismo sucede con la siguiente iteración si se
cumple la condición hasta que et (error de iteración) se mayor que la
proporcionada por el usuario e.
El segundo caso (por numero de iteraciones), en lugar de un ciclo
while utilizamos una condición 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 cálculos de xr se
hacen como en el caso anterior.

Como en el proceso didáctico de la utilización de este método 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). También para comodidad del usuario, en elegir los puntos xa
y xb, graficamos la función con el comando ezplot.

CÓDIGO DE PROGRAMACIÓN EN
MATLAB:
fprintf('\nCÁLCULO DE LA RAÍZ DE UNA ECUACIÓN NO LINEAL POR EL MÉTODO DE LA FALSA
POSICION\n\n');
syms x;
f=input('Escriba la Función f(x)= ','s');
ezplot(f);
grid on;
fprintf('\nSe generó la gráfica de la función, revísela\n');
fprintf('\n::: Visualice un punto de corte de la gráfica de la función 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 número 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 Iteración 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;
fb=fr;
end
if et<e
fprintf('\n>>> La raíz aproximada es: \n');
fprintf(' x= %d\n\n',xr)
end
ni=ni+1;
fm=fr;
end
m=input('Desea calcular la raiz de otra ecuación, 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 Iteración 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 raíz aproximada es: \n');
fprintf(' x= %d\n\n',xr)
break
end
end
m=input('Desea calcular la raiz de otra ecuación, si(1) no(2):');
if(m==1);
clc;
clear all;
close all;
FALSAPOSICION
else
clc;
clear all
close all;
break
end
otherwise
fprintf ('\n\nOpción no válida, VUELVA A CORRER EL PROGRAMA!!!\n\n');

end

También podría gustarte