Indice
1.
Función principal
2. Subfunciones
principales
3. Notas
El programa esta compuesto por la función
principal raices y 9 subfunciones.
Diagrama de la
función principal y subfunciones principales
*1
RAICES
(Función principal)
CUADRATICA
TRESRED
TRESCOMP
CUATROLa función raices 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 raices enviando el polinomio que se
creo: raices (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 (cuadratica, tresred, trescom, cuatro) en base al grado
del polinomio. La subfunción correspondiente regresara los
resultados y raices lo desplegará en pantalla.
a) cuadratica:
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) tresred:
La subfunción tresred se encarga de calcular las
raíces de las ecuaciones de
tercer grado de forma reducida. Ésta subfunción
utiliza las siguientes subfunciones: calculaxuno y esta a su vez
utiliza xunousuario.
Tresred
Calculaxuno
Calculaxunousuario
Tresred recibe el polinomio y calcula las raíces en base a
lo siguiente:
Proceso
iterativo (calculaxuno)
La subfunción calculaxuno 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
calculaxunousuario 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 tresred y se
calculará x2 y x3 de acuerdo con las
formulas indicadas.
c) trescom:
La subfunción trescom se encarga de calcular las
raíces de tercer grado de forma completa.
Trescom
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.
*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