Índice
1. Función principal
2. Subfunciones principales
3. Notas
1. Función principal
El programa esta compuesto
por la función principal raíces y 9 subfunciones.
Diagrama de la función principal y subfunciones principales *1
RAICES
(Función principal)
CUADRATICA
TRESRED
TRESCOMP
CUATRO
La función raíces necesita
de un polinomio de grado dos y hasta grado cuatro y que sea de la siguiente
forma:
-Se crea el polinomio (utilizando notación matricial) y se asigna a una
variable:
y = [3 5 9];
-Se llama a la función raíces enviando el polinomio que se creo: raíces (y)
La función verificará el grado del polinomio, llamará a la subfunción
correspondiente y en caso de que el polinomio sea de un grado inferior a dos o
mayor a cuatro se enviará un mensaje de error indicando que el polinomio no
puede ser resuelto por el programa.
Al llamar a la función principal se verifica que el primer coeficiente sea uno,
en caso contrario se dividirá el polinomio entre ese coeficiente para obtener
un polinomio de la forma:
x2 + Bx + C con B y C como cualquier coeficiente obtenido en la
división.
Teniendo ya un polinomio entre grado dos y cinco y de la forma antes descrita se
selecciona la subfunción principal a ejecutar (cuadrática, tresred, trescom,
cuatro) en base al grado del polinomio. La subfunción correspondiente regresara
los resultados y raíces lo desplegará en pantalla.
2. Subfunciones
principales
a) cuadrática:
El grado mínimo aceptado es dos, en este caso se llamará a la función
cuadratica, ésta procederá a realizar las siguientes operaciones:
Las raíces se obtienen directamente con la siguiente fórmula *2:
Si
Los resultados se almacenan
en una matriz y se envían a raices para su posterior impresión.
A los polinomios de tercer grado los vamos a dividir en dos: forma reducida y
forma completa.
Los polinomios de tercer grado de forma reducida son aquellos en los que el
segundo coeficiente es igual a 0:
los de forma completa (todos
sus coeficientes son diferentes de 0):
b) tres red:
La subfunción tres red se encarga de calcular las raíces de las ecuaciones de
tercer grado de forma reducida. Ésta subfunción utiliza las siguientes
subfunciones: calcula x uno y esta a su vez utiliza x uno usuario.
Tres red
Calcula x uno
Calcula x uno usuario
Tres red recibe el polinomio y calcula las raíces en base a lo siguiente:
Proceso iterativo (calcula x uno)
La subfunción calcula x uno
se encargará del proceso iterativo.
El proceso iterativo es aquel en el que se dan valores arbitrarios a la ecuación:
Entre más cercanos estemos
del valor de –D más exactos serán los resultados. Ésta subfunción intentará
encontrar el valor de x exacto (lo más posible) para satisfacer la ecuación
anterior sin necesidad de que el usuario de valores, para esto se tomarán dos
valores como tope: -1 000 y 1 000, se tomará un valor intermedio entre estos
valores (el primero obviamente será 500), se evaluara en ese valor intermedio
para ver si satisface la ecuación, en caso de no ser el valor buscado se
tomaran los valores mayores o menores a ese valor medio dependiendo de que el
valor arrojado sea mayor o menor al valor buscado, de ésta forma si el valor
buscado es mayor al arrojado por la ecuación se tomara ahora como limites el
500 y el 1 000, repitiéndose así este proceso 60 0000 veces o hasta encontrar
el numero deseado. Éste proceso es conocido como búsqueda binaria.
En caso de que la computadora no sea capaz de encontrar el valor para satisfacer
la ecuación se pedirá al usuario que lo busque por si mismo, para ello se
llama a la subfunción calcula x uno usuario en la cual se preguntará por un
valor al usuario y se le mostrará cual es el valor encontrado y el buscado, si
se desea continuar dando valores se debe responder con una "s" a la
pregunta si se desea continuar intentándolo o "n" en caso de que la
diferencia entre los dos numero sea mínima y el usuario no le de importancia a
esa diferencia, en caso de que el usuario encuentre un numero que satisfaga por
completo la ecuación se le indicará y ya no se le preguntará si desea
continuar buscando el valor *3.
Al encontrar x1 a través del proceso iterativo se regresa el valor a
la subfunción tres red y se calculará x2 y x3 de acuerdo
con las formulas indicadas.
c) tres com:
La subfunción tres com se encarga de calcular las raíces de tercer grado de
forma completa.
Tres com
Calculaxunoc
Calculaxunousuarioc
Las raíces se calculan de acuerdo a lo siguiente:
Proceso iterativo (calculaxunoc)
Aquí también encontramos x1
por proceso iterativo pero ahora con la función calculaxunoc. La única
diferencia entre calculaxuno (usada para los polinomios de tercer grado en forma
reducida) y calculaxunoc es la fórmula que se utiliza para encontrar el valor
de x1 pero el proceso es el mismo y en caso de no encontrarlo por si
solos, el programa y la computadora, el valor de x1, se llamará a
calculaxunousuarioc que, de igual forma, realiza el mismo proceso que
calculaxunousuario con otra fórmula. La fórmula que utilizan las subfunciones
calculaxunoc y calculaxunousuarioc ("c" de ecuación cúbica completa)
es:
d) cuatro:
Finalmente llegamos al caso en que la ecuación es un polinomio de grado cuatro.
Cuando tenemos uno de estos polinomios se llama a la subfunción principal
cuatro.
Cuatro
Calculaxunousuariocuatro
La subfunción cuatro calcula las raíces de la siguiente forma:
Siguiendo el procedimiento (iterativo) empleado hay que resolver la siguiente
ecuación cúbica:
pol(x) es el numero del
coeficiente del polinomio: pol(1) = coeficiente del primer termino, pol(2)
coeficiente del segundo termino, etc.
Para simplificar los cálculos dividiremos la ecuación anterior en:
Aquí mandamos llamar a la
subfunción calculaxunousuariocuatro y le enviamos las tres ecuaciones
anteriores para obtener el valor de ac *4, dentro de ésta subfunción
se pedirá al usuario que indique el numero de decimales a usar, pueden tomarse
solo 4 decimales o 16. Se deberá elegir el numero de decimales de acuerdo con
la exactitud con la que se quiera trabajar tomando en cuenta que una pequeña
diferencia al encontrar el valor buscado puede significar un gran error más
adelante, la magnitud del error depende del polinomio ya que en algunos una
pequeña diferencia puede no significar mucho pero en otros polinomios se podrá
encontrar un error de hasta enteros.
Los valores que teclee el usuario serán sustituidos en la siguiente ecuación:
calculaxunousuariocuatro
regresa el valor de ac y calculamos ac2 y ac3:
con lo cual procedemos a
obtener a y c por separado:
ahora calculamos (a2
+ b2) y (c2 + d2):
para así obtener b y d:
finalmente obtenemos las
cuatro raíces que buscamos:
La subfunción principal
cuatro regresa las raíces encontradas a raices y ésta última la imprime en
pantalla.
3. Notas
*1.- El diagrama completo
esta como diapositiva en el archivo diagrama.
*2.- Todas las fórmulas utilizadas se obtuvieron del documento escrito por el
Ingeniero Aeronáutico Juan Antonio Caso y que se encuentra en la página:
http://www.lpsat.net/caso/.
*3.- Este procedimiento es aplicable a todas las funciones que se encargan de
buscar por iteración una de las raíces, en realidad lo único que cambia es la
ecuación con la cual se trabaja. La única subfunción que no realiza el
proceso de buscar ese numero a través de la computadora es
calculaxunousuariocuatro ya que ésta subfunción directamente pregunta al
usuario por el valor a usar. No se utiliza el proceso de búsqueda binaria ya
que dicho proceso no da resultado, sería bueno que alguien investigara el por
qué de tal situación.
*4.- Las variables utilizadas en este procedimiento (ac1, ac2,
ac3, a, c, b, d, etc) son las mismas a las que se refiere el trabajo
del Ingeniero Juan Antonio Caso, para más información acerca de dónde y por
qué se obtienen dichas variables remitirse a dicho trabajo (específicamente
paginas: 9, 10 y 11) ya que el objetivo es mostrar el funcionamiento del
programa "raices" y no el procedimiento para obtener las raíces, la
explicación de la obtención de las raíces de un polinomio por método
iterativo ya esta escrita en el trabajo mencionado.
Autor:
Carlos Alberto Pérez
Avalos-carlosx@avantel.net