Documentos de Académico
Documentos de Profesional
Documentos de Cultura
RAÍCES DE ECUACIONES
TRASCENDENTALES
presentado por:
HUANCAVELICA, PERÚ
2021
RESUMEN
El cálculo de raíces se aplica a diversos problemas, en ingeniería son muy comunes en el área
de diseño. Se desarrollan en este punto distintos métodos para aproximar las raíces de una
ecuación. En todos los casos se supone la continuidad de la función 𝑓(𝑥) en el intervalo [𝑎, 𝑏]
en el que se encuentra la raíz 𝜉 buscada, 𝑓 (𝜉 ) = 0, que este intervalo ha sido hallado por
alguno de los métodos descriptos en el punto anterior y que la raíz 𝜉 es una raíz simple del
problema.
2
ÍNDICE
RESUMEN ............................................................................................................................. 2
ÍNDICE ................................................................................................................................... 3
INTRODUCCIÓN .................................................................................................................. 5
CAPITULO I .......................................................................................................................... 6
CAPITULO II ......................................................................................................................... 8
3
2.2.3.2. Método De Müller ................................................................................... 27
CONCLUSIONES ................................................................................................................ 32
ANEXOS .............................................................................................................................. 34
4
INTRODUCCIÓN
La búsqueda de raíces de ecuaciones es, tal vez, uno de los problemas más antiguos sobre el
que existe documentación.
Las sucesiones asintóticas son una herramienta usada en el análisis de las soluciones de
problemas que surgen en la Teoría de Perturbaciones. En este capítulo estudiaremos como se
aplica el método de expansiones asintóticas en la solución de problemas algebraicos y
trascendentes.
Encontrar la o las raíces de una ecuación requiere en general, dos pasos. El primero es la
determinación de uno o varios intervalos [𝑎, 𝑏] en el cual se encuentren comprendidas las
raíces buscadas. El segundo es trabajar en cada uno de esos intervalos para encontrar un valor
aproximado de la supuesta raíz contenida en el mismo. Sin embargo, hacer esto de forma
manual es sumamente agotado porque el procedimiento va a continuar hasta el infinito si no
le aplicamos un margen de error. El bucle o los procedimientos terminan cuando se halla
alcanzado el margen de error que se nos da en el problema, pero también hacer esto de forma
manual es cansado y es por eso se inventan o se hacen uso de algoritmos programados en
algún lenguaje de programación para que el ordenador lo realice de forma más rápida, pero
siempre hay que tener una condición (margen de error) ya que, si este no se pone, el
ordenador seguirá realizando el procedimiento hasta el infinito.
5
CAPITULO I
PRESENTACIÓN DE LA TEMÁTICA
1.1. FUNDAMENTACIÓN DEL TEMA
Ejemplos:
• 𝑥𝑒 𝑥 = 1
12
• cos 2 𝑥 = sin 𝑥 + 5
Determinar y saber en qué consiste cada uno de los métodos para encontrar
las raíces de funciones trascendentales.
6
1.2.2. OBJETIVOS ESPECÍFICOS
• En que consiste y cuáles son los métodos cerrados para encontrar las
raíces de funciones trascendentales.
• En que consiste y cuáles son los métodos abiertos para encontrar las raíces
de funciones trascendentales.
• En que consiste y cuáles son los métodos de raíces de polinomios para
encontrar las raíces de funciones trascendentales.
El presente trabajo fue elaborado para poder determinar y demostrar el uso de los
diferentes métodos para encontrar las raíces de funciones transcendentales, así
mismo fue con la finalidad de poder profundizar los temas y poner en práctica la
teoría de estos temas.
También la monografía servirá como un antecedente para los futuros lectores que
necesiten profundizar sus conocimientos relacionados a los temas que se trataron.
7
CAPITULO II
MARCO TEÓRICO
2.1. ANTECEDENTES DEL ESTUDIO
Necesidad de la
Necesidad de Tipo de
Método continuidad de ventajas
un intervalo ecuación
𝑓′
Fuerte,
aplicable a
Bisección Si No Cualquiera
funciones no
analíticas.
Converge
lentamente en
Falsa Posición Si Si Cualquiera
intervalos
grandes.
Converge
rápidamente, se
necesita
Newton –
No Si Cualquiera calcular 𝑓′,
Raphson
aplicable a
raíces
complejas.
Rápido, no
Secante no si Cualquiera requiere
calcular 𝑓′.
(Cortés Rosas, Gonzáles Cárdenas, Pinilla Morán, Salazar Moreno, & Tovar Pérez,
2019) elaboraron una tesis para la UNAM que lleva por título “Método de Factores
cuadráticos” en cual demostraron la a facilidad de cálculo del método de los factores
8
cuadráticos contrasta con el proceso matemático que se requiere para la obtención
de sus fórmulas.
9
Supongamos que 𝑓 es una función continua en el intervalo [𝑎, 𝑏] con
𝑓 (𝑎). 𝑓(𝑏) < 0, entonces existe un 𝑥 ′ dentro del intervalo tal que
𝑓 (𝑥 ′ ) = 0.
Proceso:
𝑎+𝑏
Se da una aproximación: 𝑥𝑚 = .
2
𝑎−𝑏
Calcular el nuevo error: 𝑒 = | |.
2
ln(𝑏 − 𝑎) − ln 𝛿
𝑛=
ln 2
Ejemplo
Solucion:
ln 1 − ln 0.001
𝑛= = 9.96 = 10
ln 2
10
Primera iteración:
Calculamos la aproximación
1+2
𝑥𝑚 = = 1.5
2
𝑓 (𝑎) = 𝑓 (1) = −7
𝑓 (𝑏) = 𝑓 (2) = 16
Evaluamos 𝑥𝑚 en la función:
Calculamos en error:
1−2
𝑒=| | = 0.5 > 0.001
2
Segunda iteración:
Calculamos la aproximación
1 + 1.5
𝑥𝑚 = = 1.25
2
𝑓 (𝑎) = 𝑓 (1) = −7
Evaluamos 𝑥𝑚 en función:
11
𝑓 (𝑥𝑚 ) = 𝑓 (1.25) = −2.42
Calculamos el error:
1 − 1.5
𝑒=| | = 0.25 > 0.001
2
𝑛 𝑎 𝑏 𝑥𝑚 |𝑓(𝑥𝑚 )| 𝑒
1 1 2 1.5 2.875 0.5
2 1 2 1.25 2.42188 0.25
3 1.250 1.500 1.375 0.13086 0.125
4 1.250 1.500 1.31250 1.16870 0.06250
5 1.3125 1.375 1.34375 0.52481 0.03125
6 1.34375 1.375 1.35938 0.19846 0.01563
7 1.35938 1.375 1.36719 0.03417 0.00781
8 1.36719 1.375 1.37109 0.04825 0.00391
9 1.36719 1.37101 1.36914 0.00702 0.00195
10 1.36719 1.36914 1.36816 0.01358 0.00098
11 1.36816 1.36914 1.36865 0.00329 0.00049
12 1.36865 1.36914 1.36890 0.00186 0.00025
13 1.36865 1.36890 1.36877 0.00071 0.00013
12
2.2.1.3. MÉTODO DE LA FALSA POSICIÓN
13
Para calcular el valor de 𝑥𝑀 se hace uso de:
Ejemplo:
Solución:
(2 − 1)(16)
𝑥𝑀 = 2 − = 1.30435
16 − (−7)
𝑓 (𝑥𝐼 ) = −7
𝑓 (𝑥𝐷 ) = 16
𝑓(𝑥𝑀 ) =– l. 33476
(2 − 1.30435)(16)
𝑥𝑀 = 2 − = 1.35791
16 − (−l. 33476)
𝑓 (𝑥𝐼 ) =– l. 33476
𝑓 (𝑥𝐷 ) = 16
14
𝑓 (𝑥𝑀 ) =– 0.22914
𝑖 𝑥𝐼 𝑥𝐷 𝑥𝑀 |𝑓(𝑥𝑀 )|
1 1 2 1.30435 1.33476
2 1.30435 2 1.35791 0.22914
3 1.35791 2 1.36698 0.03859
4 1.36698 2 1.36850 0.00648
5 1.36850 2 1.36876 0.00109
6 1.36850 2 1.36880 0.00018
15
2.2.2. MÉTODOS ABIERTOS
Luego de eso hay que tantear una raíz; esto puede hacerse por
observación directa de la ecuación; se denota el valor de tanteo o
valor de inicio como 𝑥0 . Una vez que se tiene 𝑥0 , se evalúa 𝑔(𝑥 ) en
𝑥0 , y este resultado es 𝑥1 . El valor de 𝑥1 comparado con 𝑥0 presenta
los 2 siguientes casos:
2.2.2.1.1. CASO 1: 𝒙𝟏 = 𝒙𝟎
2.2.2.1.2. CASO 2: 𝒙𝟏 ≠ 𝒙𝟎
16
𝒊 𝒙𝟎 𝒇(𝒙𝟎 )
1 𝑥1 = 𝑔(𝑥0 ) 𝑓(𝑥1 )
2 𝑥2 = 𝑔(𝑥1 ) 𝑓(𝑥2 )
3 𝑥3 = 𝑔(𝑥2 ) 𝑓(𝑥3 )
⁞ ⁞ ⁞
𝒊 −esima iteración 𝑥𝑖 = 𝑔(𝑥𝑖−1 ) 𝑓(𝑥𝑖 )
𝒊 + 𝟏 −esima iteración 𝑥𝑖+1 = 𝑔(𝑥1 ) 𝑓(𝑥𝑖+1 )
⁞ ⁞ ⁞
La condición de paro o error se basa en:
𝑥𝑖+1 − 𝑥𝑖
𝜀=| |
𝑥𝑖+1
Ejemplo:
Solución:
Despejamos 𝑥 de la ecuación:
cos 𝑥
𝑥= = 𝑔(𝑥)
3
𝜋
𝑥0 =
8
𝑔(𝑥0 ) = 0.30796
|𝑓(𝑥0 )| = 0.25422
𝑥1 = 𝑔(𝑥0 ) = 0.30796
17
Evaluamos el punto en la nueva función:
𝑔(𝑥1 ) = 0.31765
|𝑓(𝑥1 )| = 0.02907
Calculamos el error:
0.30796 − 0.392699
𝜀=| | = 0.27516 > 10−3
0.30796
𝑖 𝑥𝑖 𝑔(𝑥𝑖 ) |𝑓(𝑥𝑖 )| 𝜀
𝜋
0 0.30796 0.25422
8
1 0.30796 0.31765 0.02907 0.27516
2 0.31765 0.31666 0.00298 0.03051
3 0.31666 0.31676 0.00031 0.00313
4 0.31676 0.31675 0.00003 0.00032
Por tanto, la aproximación de la raíz es:
𝑥
̅ = 0.31676
18
2.2.2.2. MÉTODO DE NEWTON – RAPHSON
𝑓 (𝑥𝑖 )
𝑥𝑖+1 = 𝑥𝑖 − = 𝑔(𝑥)
𝑓 ′(𝑥𝑖 )
𝑥𝑖+1 −𝑥𝑖
El error va a estar dada por: 𝜀 = | |.
𝑥𝑖+1
Ejemplo:
19
Hallar una de las raíces de: 𝑓 (𝑥 ) = 𝑥 3 + 2𝑥 2 + 10𝑥 − 20, con 𝑥0 =
1 y con un mínimo de error del 10−3
Solución:
1era iteración:
𝑓(𝑥0 ) = −7
𝑓 ′(𝑥 ) = 3𝑥 2 + 4𝑥 + 10 ⇒ 𝑓 ′ (𝑥0 ) = 17
−7
𝑥1 = 1 − ⇒ 𝑥1 = 1.41176
17
Calculamos el error:
1.41176 − 1
𝜀=| | = 0.29166 > 10−3
1.41176
2da iteración:
Calculamos el error:
1.36934 − 1.41176
𝜀=| | = 0.03098 > 10−3
1.36934
20
La siguiente tabla muestra los valores obtenidos:
𝑖 𝑥𝑖 𝜀
0 1
1 1.41176 0.29166
2 1.36934 0.03098
3 1.36881 0.00039
Por lo tanto, la raíz aproximada es:
𝑥
̅ = 1.36881
Ejemplo:
Solución:
21
𝑥2
(13 + 2(1)2 + 10(1) − 20)(1 − 0)
=1− 3
(1 + 2(1)2 + 10(1) − 20) − (03 + 2(0)2 + 10(0) − 20)
= 1.53846
𝑖 𝑥𝑖 |𝑥𝑖+1 − 𝑥𝑖 |
0 0
1 1 1
2 1.53846 0.53846
3 1.35031 0.18815
4 1.36792 0.01761
5 1.36881 0.00090
Por lo tanto, la raíz aproximada es:
𝑥
̅ = 1.36881
22
2.2.3. RAÍCES DE POLINOMIOS
Este método, al igual que los anteriores sirven para determinar o encontrar una
de las raíces de polinomio y/o funciones. Y dentro de este método tenemos los
siguientes:
2.2.3.1. MÉTODO DE LOS FACTORES CUADRÁTICOS
Sea el polinomio:
𝐚𝟎 = 𝐛𝟎 𝐛𝟎 = 𝐚𝟎
𝐚𝟏 = 𝐛𝟏 + 𝐩𝐛𝟎 b1 = a1 − pb0
𝐚𝟐 = 𝐛𝟐 + 𝐩𝐛𝟏 + 𝐪𝐛𝟎 b2 = a2 − pb1 − qb0
𝐚𝟑 = 𝐛𝟑 + 𝐩𝐛𝟐 + 𝐪𝐛𝟏 b3 = a3 − pb2 − qb1
⁞ ⁞
23
𝐚𝐧−𝟏 = 𝐑 + 𝐩𝐛−𝟐 + 𝐪𝐛𝐧−𝟑 R = an−1 − pb−2 − qbn−3
𝐚𝐧 = 𝐒 + 𝐪𝐛𝐧−𝟐 S = an − qbn−2
En general los coeficientes del polinomio reducido están dados por:
𝑏𝑘 = 𝑎𝑘 − 𝑝𝑏𝑘−1 − 𝑞𝑏𝑘−2
Para: 𝑘 = 0,1,2,3 … (𝑛 − 2)
𝑆 = 𝑎𝑛 − 𝑞𝑏𝑛−2 = 0
𝒂𝒏−𝟏 − 𝒒𝒃𝒏−𝟑 𝒂𝒏
𝒑= 𝒒=
𝒃𝒏−𝟐 𝒃𝒏−𝟐
Y conociendo estos valores se podrán determinar los coeficientes del
polinomio reducido. El método propone que a partir de ciertos
valores iniciales para “p” y “q” mediante un proceso iterativo, se
puede llegar a determinar estos valores, para ello, vamos a definir los
incrementos ∆𝑝 y ∆𝑞.
∆𝒑 = 𝒑∗ − 𝒑 ∆𝒒 = 𝒒∗ − 𝒒
Donde: 𝑝∗ y 𝑞 ∗ son los nuevos valores calculados, considerando que
están dados por:
𝒂𝒏−𝟏 − 𝒒𝒃𝒏−𝟑 𝒂𝒏
𝒑∗ = 𝒒∗ =
𝒃𝒏−𝟐 𝒃𝒏−𝟐
Y reemplazando:
𝒂𝒏−𝟏 − 𝒒𝒃𝒏−𝟑 𝒂𝒏
∆𝒑 = −𝒑 ∆𝒒 = −𝒒
𝒃𝒏−𝟐 𝒃𝒏−𝟐
24
∆𝒑 𝒂𝒏 − 𝒒𝒃𝒏−𝟐
∆𝒒 =
𝒂𝒏−𝟏 − 𝒑𝒃𝒏−𝟐 − 𝒒𝒃𝒏−𝟑 𝒃𝒏−𝟐
=
𝒃𝒏−𝟐 𝑺
∆𝒒 =
𝑹 𝒃𝒏−𝟐
∆𝒑 =
𝒃𝒏−𝟐
Ejemplo
Solución:
𝑝(𝑥 ) = (𝑥 2 + 𝑝𝑥 + 𝑞)(𝑏0 𝑥 2 + 𝑏1 𝑥 + 𝑏2 ) + 𝑅𝑥 + 𝑆
Primera iteración:
𝑝=𝑞=0
𝑎3 −3
𝑝∗ = ∆𝑝 − 𝑝 = = = −0.5
𝑎2 6
𝑎4 4
𝑞 ∗ = ∆𝑞 − 𝑞 = = = 0.66667
𝑎2 6
𝑏0 = 𝑎0 = 1
b2 = 5.0834
𝑅 = a3 − p2 − qb1
25
S = a4 − qb2 = 4 − (0.66667)(5.0834) = 0.6109
𝑅 0.125
∆p = =− = −0.0246
𝑏2 5.0832
𝑆 0.6109
∆𝑞 = = = 0.1202
𝑏2 5.0832
𝑎𝑖 Iteraciones: 1 2 3 4 5 6
P −0,50000 −0,52459 −0,52902 −0,52992 −0,53010 −0,53013
Q 0,66667 0,78689 0,80585 0,80890 0,80939 0,8094
𝑎0 𝑏0 1,00000 1,00000 1,00000 1,00000 1,00000 1,00000
𝑎1 𝑏1 −0,50000 −0,47541 −0,47098 −0,47008 −0,46990 −0,46987
𝑎2 𝑏2 5,08333 4,96372 4,94499 4,94200 4,94152 4,94144
𝑎3 P −0,12500 −0,02199 −0,00446 −0,00088 −0,00017 −0,00003
𝑎4 S 0,61111 0,09412 0,01509 0,00243 0,00039 0,00006
∆𝑃 −0,02459 −0,00443 −0,00090 −0,00018 0,00003 −0,00001
∆𝑄 0,12022 0,01896 0,00305 0,00049 0,00008 0,00001
Como vemos en la 6ta iteración 𝑅, 𝑆, ∆𝑃 𝑦 ∆𝑄 se aproximan cada vez
mas a 0; el polinomio tendría la forma de:
𝑥1 = 0,26495 + 0,8594i
26
𝑥2 = 0,26495 − 0,8594i
x3 = 0,2355 + 2,2112i
x4 = 0,2355 − 2,2112i
27
Se toman 3 valores iniciales 𝑥0 , 𝑥1 , 𝑥2 y se halla el polinomio 𝑝(𝑥 )
de grado 2 que pasa por los puntos
(𝑥0 , 𝑓(𝑥0 )), (𝑥1 , 𝑓(𝑥1 )) 𝑦 (𝑥2 , 𝑓(𝑥2 )), y se toma una de las raíces de
𝑝(𝑥), la más cercana a 𝑥2 , como la siguiente aproximación 𝑥3 . Se
repite la operación con los nuevos valores iniciales 𝑥1 , 𝑥2 , 𝑥3 , y se
termina el proceso tan pronto como se satisfaga algún criterio de
convergencia.
𝑓 (𝑥𝑖 ) − 𝑓(𝑥𝑖−1 )
𝑓(𝑥𝑖 , 𝑥𝑖−1 ) =
𝑥𝑖 − 𝑥𝑖−1
𝑓 (𝑥𝑖−1 ) − 𝑓 (𝑥𝑖−2 )
𝑓(𝑥𝑖−1 , 𝑥𝑥𝑖−2 ) =
𝑥𝑖−1 − 𝑥𝑖−2
𝑝(𝑥 ) = 𝑎0 + 𝑎1 𝑥 + 𝑎2 𝑥 2
2𝑎0
𝑥𝑖+1 =
−𝑎1 ± √𝑎12 − 4𝑎0 𝑎2
28
Ejemplo:
Solución:
Primera iteración:
𝒇 (𝒙 𝟎 ) 𝒇(𝒙𝟏) = −𝟕 𝒇(𝒙𝟐 ) = 𝟏𝟔
= −𝟐𝟎
Calculamos los coeficientes del polinomio de grado 2:
𝑓 (𝑥2 , 𝑥1 ) − 𝑓 (𝑥1 , 𝑥0 ) 23 − 13
𝑓 (𝑥2 , 𝑥1 , 𝑥0 ) = = =5
𝑥2 − 𝑥0 2−0
Entonces:
𝑎2 = 𝑓 (𝑥2 , 𝑥1 , 𝑥0 ) = 5
29
Como vemos el segundo valor es mayor en absolutos que el primer
valor, lo usamos para determinar el 𝑥3 :
2𝑎0 2(−20)
𝑥3 = = = 1.35407
−𝑎1 − √𝑎12 − 4𝑎0 𝑎2 −29.54066
𝑥3 − 𝑥2 1.35407 − 2
𝜀=| | 100% = | | 100% ⇒ 𝜀 = 47.70285%
𝑥3 1.35407
Segunda iteración:
𝒙𝟎 = 𝟏 𝒙𝟏 = 𝟐 𝒙𝟐
𝒇(𝒙𝟎) = −𝟕 𝒇(𝒙𝟏 ) = 𝟏𝟔 = 𝟏. 𝟑𝟓𝟒𝟎𝟕
𝒇(𝒙𝟐 ) = −𝟎. 𝟑𝟎𝟗𝟓𝟗
Por lo tanto, tenemos lo siguiente:
𝑓 (𝑥1 ) − 𝑓(𝑥0 ) 16 + 7
𝑓 (𝑥1 , 𝑥0 ) = = = 23
𝑥1 − 𝑥0 2−1
Entonces:
𝑎2 = 𝑓 (𝑥2 , 𝑥1 , 𝑥0 ) = 6.35405
𝑎0 = 𝑓 (𝑥2 ) − 𝑥2 [𝑓 (𝑥2 , 𝑥1 ) − 𝑥1 𝑎2 ]
= −0.30959 − 1.35407(25.24978
− 2(6.35405)) = – 17.29190
30
Calculamos el denominador de la fórmula:
2𝑎0
𝑥3 = = 1.36865
−𝑎1 − √𝑎12 − 4𝑎0 𝑎2
𝑥3 − 𝑥2 1.36865 − 1.35407
𝜀=| | 100% = | | 100% ⇒ 𝜀
𝑥3 1.36865
= 1.06528%
𝑖 𝑥𝑖 𝜀
0 0
1 1 100%
2 2 50%
3 1.35407 47.70285%
4 1.36865 1.06528%
5 1.36881 0.01169%
31
CONCLUSIONES
• Los métodos cerrados hacen uso de 2 valores iniciales de la función para poder
encontrar la raíz de la función; dentro de lo métodos cerraos se encuentran los
métodos gráficos, método de la bisección y método de la falsa posición.
• Los métodos abiertos hacen uso de un solo valor inicial y de acuerdo con este valor
se va encontrando las raíces aproximadas de la función; dentro de esto método
tenemos: método del punto fijo, método de Newton – Raphson y el método de la
secante.
• El método de raíces de polinomios, al igual que los anteriores sirven para determinar
las raíces próximas de la función, sin embargo; con este método se puede encontrar
raíces reales, complejas e imaginarias, sin recurrir hacia otros métodos, dentro de
estos se encuentran: método de factores cuadráticos y el método de Müller.
32
REFERENCIAS BIBLIOGRÁFICAS
1. Cortés Rosas, j. J., Gonzáles Cárdenas, M. E., Pinilla Morán, V. D., Salazar Moreno,
A., & Tovar Pérez, V. H. (2019). Método de Factores Cuadráticos. México :
Universidad Nacional Autónoma de México.
33
ANEXOS
ALGORITMO DEL MÉTODO DE LA BISECCIÓN
#include <iostream>
#include <iomanip>
#include <cmath>
#include <math.h>
#define PRECISION 6
using namespace std;
double f(double x);
void imprimePuntos(double a, double b);
int main()
{
cout << setprecision(PRECISION);
double a, b, tolerancia;
cout<<"\n\t\t\tMETODO DE LA BISECCION"<<endl;
cout<<"\t\t\t========================"<<endl;
cout<<"\n\tIngrese el intervalo inicial [a, b]"<<endl;
cout<<"\n\ta = ";cin >>a;
cout<<"\tb = ";cin >> b;
imprimePuntos(a, b);
cout<<"\n\tEscoja el intervalo adecuado" << endl;
cout<<"\n\ta = ";cin >> a;
cout<<"\n\tb = ";
cin >> b;
float xr;
if(f(a)*f(b)>0)
{
cout <<"\n\tNo se puede aplicar el metodo de la biseccion"<<endl;
cout << "\tporque f("<<a<<") y f("<<b<<") tiene el mismo signo"<< endl;
}
else
{
cout << "\n\tTolerancia = ";cin >> tolerancia;
cout << "\n\ta\tb\tx\tf(a)\t\tf(b)\t\tf(x)\n" <<endl;
do
{
xr=(a+b)/2.0;
cout<<"\t"<<a<<"\t"<<b<<"\t"<<xr<<"\t"<<f(a)<<"t"<<f(b)<<"\t"<<f(xr)<<endl;
if(abs(f(xr))<=tolerancia)
{
cout <<"\n\n\tPara una tolerancia "<<tolerancia<<" la raiz de f es:"<<xr<<endl;
break;
}
else
{
if(f(xr)*f(a)>0)
{
a = xr;
}
else
{
34
if (f(xr)*f(b)>0)
{
b = xr;
}
}
}
}
while(1);
}
cin.get();
cin.get();
return 0;
}
double f(double x)
{
return (pow(x,3))+(2*pow(x,2))+(10*x)-20; //se coloca la funcion a evaluar
}
#define INTERVALOS 10
void imprimePuntos(double a, double b)
{
int puntos=INTERVALOS+1;
double ancho=(b-a)/INTERVALOS;
cout <<"\n";
cout <<"\tx\tf(x)\n" << endl;
for (int i=0;i<puntos;i++)
{
cout <<"\t"<<a<<"\t"<<f(a)<<endl;
a=a+ancho;
}
}
35
ALGORITMO DEL MÉTODO DE LA FALSA POSICIÓN
Al igual que el algoritmo anterior, este método también se elaboró su algoritmo a base de un
lenguaje de programación en c++.
#include <iostream>
#include <iomanip>
#include <cmath>
#include <math.h>
#define PRECISION 6
#define INTERVALOS 10
using namespace std;
void tabula(double a, double b);
double f(double x);
int main()
{
system("color 8a");
cout<< setprecision(PRECISION);
cout<<"\n\t\t\tMETODO DE LA FALSA POSICION"<<endl;
cout<<"\t\t\t==========================="<<endl;
cout<<"\n\tIngrese el intervalo inicial [a,b]:"<< endl;
double a, b, tolerancia;
cout<<"\n\ta = ";cin>>a;
cout<<"\tb = ";cin>>b;
tabula(a,b);
cout<<"\n\tEscoja el intervalo adecuado"<< endl;
cout<<"\n\ta = ";cin>>a;
cout<<"\tb = ";cin>>b;
double xr;
double xa = 0;
if(f(a)*f(b)>0)
{
cout<<"\n\tNo se puede aplicar el metodo de la falsa posicion"<<endl;
cout<<"\tporque f("<<a<<") y f("<<b<<") tienen el mismo signo"<< endl;
}
else
{
cout<<"\tIngrese la tolerancia = ";cin>>tolerancia;
cout<<"\n\ta\tb\tx\tf(a)\t\tf(b)\t\tf(x)\n"<<endl;
do
{
xr=b-f(b)*((b-a)/(f(b)-f(a)));
cout<<"\t"<<a<<"\t"<<b<<"\t"<<xr<<"\t"<<f(a)<<"\t"<<f(b)<<"\t"<<f(xr)<<endl;
if(fabs(xr-xa)/fabs(xr)<=tolerancia)
{
cout<<"\n\n\tPara una tolerancia de: "<<tolerancia<<" la raiz de f es:
"<<xr<<endl;
break;
}
else
{
xa=xr;
if(f(xr)*f(a)>0)
36
{
a = xr;
}
else
{
if(f(xr)*f(b)>0)
{
b = xr;
}
}
}
}
while(1);
}
cin.get();
cin.get();
return 0;
}
void tabula(double a, double b)
{
int puntos=INTERVALOS+1;
double ancho=(b-a)/INTERVALOS;
cout<<"\n\tx\tf(x)"<<endl;
for(int i=0;i<puntos;i++)
{
cout<<"\t"<<a<<"\t"<<f(a)<<endl;
a=a+ancho;
}
}
double f(double x)
{
return (pow(x,3))+(2*pow(x,2))+(10*x)-20; //se coloca la funcion que deseamos evaluar.
}
37
ALGORITMO DEL MÉTODO DEL PUNTO FIJO
function puntoFijoEd
fprintf('\n\t\t\tMETODO DEL PUNTO FIJO\n');
fprintf('\t\t\t=====================\n');
gx=input('\n\Ingrese la función g(x) que está igualada a x: ','s');
g=inline(gx);
x=input('\n\Ingrese el valor inicial de x: ');
maxiter=input('\n\Ingrese el número máximo de iteraciones: ');
error=input('\n\Ingrese el error minimo: ');
i=1;
fprintf('\nItera \t Valor de x \t Error\n');
fprintf('0 \t %f \t \n',x);
while (i<=maxiter)
a=x;
x=g(a);
e=abs(x-a);
fprintf('%d \t %1.6f \t \t %f \n',i,x,e);
if(e<error)
i=maxiter+1;
end
i=i+1;
end
fprintf('\n\tEl valor aproximado de x es: %f con un error de : %f
\n',x,e);
end
38
ALGORITMO DEL MÉTODO DE NEWTON – RAPHSON
Para la elaboración del algoritmo del método de Newton – Raphson, se empleo el lenguaje
de programación c++.
#include<iostream>
#include<iomanip>
#include<cmath>
#include<math.h>
#define PRECISION 10
#define MAX_ITERACIONES 100
#define INTERVALOS 6
using namespace std;
void tabula(double a,double b,int intervalos);
double f(double x);
double f_derivada(double x);
int main()
{
system("color 8a");
double a;
double b;
double tolerancia;
double x0;
double x1;
double error;
int iteracion;
bool converge =true;
cout<<setprecision(PRECISION);
cout<<"\n\t\t\tMETODO DE NEWTON - RAPHSON"<<endl;
cout<<"\t\t\t=========================="<<endl;
cout<<"\n\tIngrese el intervalo inicial [a,b]:"<<endl;
cout<<"\n\ta = ";cin>>a;
cout<<"\tb = ";cin>>b;
tabula(a,b,INTERVALOS);
cout<<"\n\tEscoja el punto inicial adecuado: x0 = ";cin>>x0;
cout<<"\n\tTolerancia = ";cin>>tolerancia;
cout<<"\n\tAproximacion inicial:\n";
cout<<"\tx0 = "<<x0<<"\n"<<"\tf(x0) = "<<f(x0)<<"\n"<<"\tf'(x0) = "<<f_derivada(x0)<<endl;
iteracion = 1;
do{
if(iteracion>MAX_ITERACIONES)
{
converge=false;
break;
}
else
{
x1=x0-f(x0)/f_derivada(x0);
error=fabs(x1-x0);
cout<<"\n\tIteracion #"<<iteracion<<endl;
cout<<"\tx"<<iteracion<<" = "<<x1<<"\n"<<"\tf(x"<<iteracion<<") =
"<<f(x1)<<"\n"<<"\tf'(x"<<iteracion<<") = "<<f_derivada(x1)<<"\n"<<"\terror = "<<error<<endl;
if(error<=tolerancia)
{
39
converge=true;
break;
}
else
{
x0=x1;
iteracion++;
}
}
}
while(1);
if(converge)
{
cout<<"\n\n\tPara una tolerancia de: "<<tolerancia<<" la raiz de f es: "<<x1<< endl;
}
else
{
cout <<"\n\n\tSe sobrepasó la máxima cantidad de iteraciones permitidas"<<endl;
}
cin.get();
cin.get();
return 0;
}
void tabula(double a,double b,int intervalos)
{
int puntos=intervalos + 1;
double ancho=(b-a)/intervalos;
cout<<"\n\tx\t\tf(x) "<< endl;
for(int i=0;i<puntos;i++)
{
cout<<"\t"<<a<<"\t\t"<<f(a)<<endl;
a=a+ancho;
}
}
double f(double x)
{
return (pow(x,3)+(2*(pow(x,2)))+(10*x)-20);//se coloca la funcion
}
double f_derivada(double x)
{
return ((3*(pow(x,2)))+(4*x)+10);//se coloca la derivada de la funcion.
}
40
Programa ejecutado, es el mismo ejemplo que se elaboró a mano
41
ALGORITMO DEL MÉTODO DE LA SECANTE
#include<iostream>
#include<iomanip>
#include<cmath>
#include<math.h>
using namespace std;
double f(double x)
{
return pow(x,3)+2*pow(x,2)+10*x-20;//se coloca la funcion
}
int main()
{
char salir;
int n,nmax;
float error;
double x0,x1,x2,tol;
do
{
system("cls");
cout<<"\n\t\t\tMETODO DE LA SECANTE"<<endl;
cout<<"\t\t\t===================="<<endl;
cout<<"\n\tIngrese el valor de x_0: ";cin>>x0;
cout<<"\n\tIngrese el valor de x_1: ";cin>>x1;
cout<<"\n\tIngrese el valor de la tolerancia: ";cin>>tol;
cout<<"\n\tIngrese el numero maximo de iteraciones: ";cin>>nmax;
n=1;
cout<<"\n\tITER"<<"\tx_0"<<"\t\tx_1"<<"\t\tx_2"<<"\t\tERROR"<<endl;
while(abs(x1-x0)>tol*(abs(x1)+1) && n<nmax)
{
x2=x1-(f(x1)*(x0-x1))/(f(x0)-f(x1));
x0=x1;
x1=x2;
error=abs(x2-x0);
cout<<"\n\t"<<n<<"\t"<<setprecision(6)<<x0<<"\t\t"<<setprecision(6)<<x1<<"\t\t"<<setprecision(6
)<<x2<<"\t\t"<<setprecision(6)<<error<<endl;
n++;
}
cout<<"\n\tDesea salir? s/n ";cin>>salir;
}
while(salir!='s' && salir!='S');
return 0;
}
42
Programa ejecutado, es el mismo ejemplo que se elaboró a mano
43
ALGORITMO DEL MÉTODO DE FACTORES CUADRÁTICOS
clear all;
clc;
syms x
t=[];
y=[];
e=[];
z=[];
u=0;
n=2;
g=0;
h=[];
o=[];
errora=1;
errorb=1;
tool=0;
fprintf('\n\t\t\tMETODO DE FACTORES CUADRATICOS\n');
fprintf('\t\t\t==============================\n');
f=input('\n\Ingrese la funcion a evaluar: ');
coeffs(f);
t=sym2poly(f);
k=length(t);
u=length(t);
p=length(t);
x=k;
a=input('Ingrese punto r: ');
b=input('Ingrese punto s: ');
tool=input('\nIngrese la tolerancia: ');
y(1)=1;
z(1)=1;
while (t(1)~=1)
fprintf('\n\nerror el primer termino deber ser de valor 1, vuelva a
ingresar polinomio...' )
clear all;
syms x
t=[];
y =[];
e=[];
u=0;
n=2;
g=0;
h=[];
o=[];
errora=1;
errorb=1;
tool=0;
f=input('\nIngrese la funcion a evaluar: ');
coeffs(f);
t=sym2poly(f);
k=length(t);
u=length(t);
44
p=length(t);
x=k;
a=input('Ingrese punto r: ');
b=input('Ingrese punto s: ');
tool=input('\nIngrese la tolerancia: ');
y(1)=1;
z(1)=1;
end
if (u==2)
r1=-t(2);
tool=1;
end
if (u==3)
r1=(-t(2)+((t(2))^2-4*t(3))^(1/2))/2;
r2=(-t(2)-((t(2))^2-4*t(3))^(1/2))/2;
end
while u>3
for i=1:k-1
if i<2
y(i+1)=a*t(i)+t(i+1);
else
y(i+1)=a*y(i)+b*y(i-1)+t(i+1);
end
end
for i=1:k-2
if i<2
z(i+1)=a*y(i)+y(i+1);
else
z(i+1)=a*z(i)+b*z(i-1)+y(i+1);
end
end
y=fliplr(y);
z=fliplr(z);
da=(y(1)*z(3)-y(2)*z(2))/((z(2))^2-z(1)*z(3));
db=(y(2)*z(1)-y(1)*z(2))/((z(2))^2-z(1)*z(3));
y=fliplr(y);
z=fliplr(z);
errora=da/a;
errorb=db/b;
a=a+da;
b=b+db;
u=length(y);
if (tool>abs(errora) | tool>abs(errorb) & u==1)
r5=(-a/b);
end
if (tool>abs(errora) | tool>abs(errorb) & u==2)
r3=(a+(a^2+4*b)^(1/2))/2;
r4=(a-(a^2+4*b)^(1/2))/2;
end
if (tool>abs(errora) | tool>abs(errorb) & u>=3)
r1=(a+(a^2+4*b)^(1/2))/2;
r2=(a-(a^2+4*b)^(1/2))/2;
g=g+1;
o(g)=r1;
h(g)=r2;
for (j=1:p-n)
e(j)=y(j);
45
end
y=e;
z=[];
z(1)=1;
t=e;
k=length(y);
u=length(y);
n=n+2;
errora=1;
errorb=1;
e=[];
end
end
fprintf('\n\tLas raices de la funcion son: \n');
if x==2
r1
end
if x==3
r1
r2
end
if x>3 & u==2
o
h
r5
end
if x>3 & u==3
o
h
r3
r4
end
fprintf('\n\tLos valores de r y s son: %f',a);
fprintf('\n%1.6f',b);
46
ALGORITMO DEL MÉTODO DE MÜLLER
47
Programa ejecutado, es el mismo ejemplo que se elaboró a mano
48