Documentos de Académico
Documentos de Profesional
Documentos de Cultura
FACULTAD DE INGENIERÍA
DEPARTAMENTO DE COMPUTACIÓN
INTEGRANTES:
TRABAJO PRÁCTICO Nº 1
OBSERVACIONES FECHA
NOTA:
𝑓(𝑝𝑛−1 )
𝑝𝑛 = 𝑝𝑛−1 −
𝑓´(𝑝𝑛−1 )
𝑓(𝑝𝑛−1 )
𝑝𝑛 = 𝑝𝑛−1 −
𝑓´(𝑝𝑛−1 )
Importante:
Se debe tomar siempre como 𝑝0 un valor tal que 𝑓(𝑝0 ) . 𝑓´´(𝑝0 ) > 0.
El método converge siempre que tomemos un 𝑝0 lo bastante cercano al valor de la
raíz.
La principal ventaja del método mencionado, es que converge cuadráticamente siempre y cuando
la raíz que se busca sea una raíz simple de la función analizada.
-1-
Desarrollo
Teniendo en cuenta que los momentos de inercia de la circunferencia y el cuadrado son
respectivamente:
𝜋𝑟 4
𝐽𝑐𝑖𝑟𝑐 = (1) 𝑟 = 𝑟𝑎𝑑𝑖𝑜 𝑑𝑒 𝑙𝑎 𝑐𝑖𝑟𝑐𝑢𝑛𝑓𝑒𝑟𝑒𝑛𝑐𝑖𝑎
4
𝑙4
𝐽𝑐𝑢𝑎𝑑 = (2) 𝑙 = 𝑙 𝑒𝑠 𝑒𝑙 𝑙𝑎𝑑𝑜 𝑑𝑒𝑙 𝑐𝑢𝑎𝑑𝑟𝑎𝑑𝑜
12
Y si llamamos:
(𝑎 − 𝑡)
4. 𝑙 = (𝑎 − 𝑡) → 𝑙 =
4
De este modo, teniendo esto en cuenta la suma de los momentos de inercia será
𝜋𝑟 4 𝑙 4 𝑡4 (𝑎 − 𝑡)4
+ = + (3)
4 12 64. 𝜋 3 3072
Para todo valor dentro del intervalo [0; 𝑎]
𝑡4 (100 − 𝑡)4
+ (4)
64. 𝜋 3 3072
-2-
Figura 1. Gráfica de la función (4)
Como debemos obtener el valor mínimo d la función en el intervalo [0; 𝑎], se derivó la
función y se la igualo a cero. En otras palabras fue necesario buscar las raíces de la función:
𝑡3 (𝑎 − 𝑡)3
𝑓(𝑡) = − (5)
16. 𝜋 3 768
Para poder aplicar el algoritmo de Newton-Raphson fue necesario calcular la derivada de la
función anterior. Por lo tanto:
3. 𝑡 2 (𝑎 − 𝑡)2
𝑓´(𝑡) = + (6)
16. 𝜋 3 256
𝑎
Definidas las funciones 𝑓(𝑡) 𝑦 𝑓´(𝑡), la semilla 𝑝0 = 2 = 50, el error relativo
𝑝𝑛 −𝑝𝑛−1
| | ≤ 1𝑥10−3 y aplicando la expresión:
𝑝𝑛
𝑓(𝑝𝑛−1 )
𝑝𝑛 = 𝑝𝑛−1 −
𝑓´(𝑝𝑛−1 )
-3-
El lenguaje utilizado para realizar las sucesivas iteraciones fue Python (ver código 1 en
anexo).
A continuación se presenta una tabla con las sucesivas iteraciones y sus respectivos valores
𝑝𝑛 −𝑝𝑛−1
tanto de 𝑝𝑛 , 𝑝𝑛−1 𝑦 | |
𝑝𝑛
𝑝𝑛 − 𝑝𝑛−1
𝑛 𝑝𝑛 | | <; >; =; 1𝑥10−3
𝑝𝑛
1 50 - -
2 46.41511113 0.07768729519 >
−3
3 46.364667237 1.087981345 𝑥 10 >
4 46.364664897 5.046948596 𝑥 10−8 <
Finalmente se obtuvo en la cuarta iteración que el valor de corte del alambre, de modo tal
que la suma de los momentos de inercia de la circunferencia y el cuadrado sea mínima, es
de t =46.364664897 ± 0,5 𝑥 10−8 , pero como el error pedido es de 0.001, entonces.
t = 46.365 ± 0.001
Esto significa que los lados del cuadrado deberán tener una longitud de l = 13.409 ±
0.001cms y el radio de la circunferencia r = 7.379 ± 0.001 cms.
Una vez finalizado este cálculo, se procedió a modificar el código de forma tal que el
usuario sea capaz de ingresar la longitud del alambre, así también como el error mínimo
deseado. De este modo las iteraciones sucesivas se realizarán para los nuevos datos
obteniendo los resultados correspondientes a cada caso. (ver código 2 en anexo)
-4-
Conclusión
Como conclusión del trabajo realizado, podemos decir que la programación matemática es
una herramienta muy útil, la cual permite realizar iteraciones y obtener resultados con una
precisión que de otro modo resultaría prácticamente imposible.
Sin embargo, para quienes no se encuentran familiarizados con los distintos lenguajes
existentes o las formas de programación puede causar un gran “dolor de cabeza” el hecho
de no entender que es lo que no permite que el código funcione. En más de una situación se
trata de factores externos al problema en sí, y termina resultado un tanto molesto para el
usuario.
Respecto al método en sí, si se llega a observar la gran convergencia que posee, ya que
variando el valor de “a”, en el código que lo permite, se observa que siempre llega al
resultado esperado en pocas iteraciones, lo que confirma su convergencia cuadrada.
Otra forma que podría haber sido utilizada para obtener el resultado deseado es el método
de la bisección. A diferencia del método de Newton-Rapson, el método de la bisección
converge en forma muy lenta, pero garantiza convergencia en todos los casos en que haya
una raíz dentro del intervalo analizado. Cabe remarcar que en el método de Newton Rapson
esto no es así, si la semilla inicial no es una aproximación cercana a la raíz.
-5-
Bibliografía
A continuación una lista de la bibliografía consultada para la realización del trabajo:
http://www.epsem.upc.edu/~fpq/ale-hp/modulos/aplicaciones/newton.pdf
http://es.wikipedia.org/wiki/M%C3%A9todo_de_Newton
http://www.cursosdeprogramacionadistancia.com/static/pdf/material-sin-
personalizar-python.pdf.
http://logix4u.net/component/content/article/27-tutorials/44-how-to-create-
windows-executable-exe-from-python-script
-6-
Anexos
Anexo 1: Código para método de Newton-Rapson con “a” constante
import math
def newtonRaphson():
xActual = 50.0
xSiguiente = calcularXSiguiente(xActual)
epsilon = calcularErrorRelativo(xActual,xSiguiente)
cantidadDeIteraciones = 0
xActual = xSiguiente
xSiguiente = calcularXSiguiente(xActual)
epsilon = calcularErrorRelativo(xActual,xSiguiente)
cantidadDeIteraciones += 1
def evaluarEnFuncion(x):
def evaluarEnDerivadaDeLaFuncion(x):
def calcularXSiguiente(x):
return x - (evaluarEnFuncion(x)/evaluarEnDerivadaDeLaFuncion(x))
evaluacionEnElSiguiente = evaluarEnFuncion(xSiguiente)
evaluacionEnElActual = evaluarEnFuncion(x)
-7-
errorRelativo = (evaluacionEnElSiguiente - evaluacionEnElActual) /
evaluacionEnElSiguiente
return -errorRelativo
return errorRelativo
def main():
print "El valor aproximado de corte del alambre es de", resultado1, "y fueron
necesarias", resultado2, "iteraciones"
main()
raw_input()
-8-
Anexo 2: Código para método de Newton-Rapson con “a” introducido por el usuario.
import math
xActual = a / 2.0
xSiguiente = calcularXSiguiente(xActual, a)
epsilon = calcularErrorRelativo(xActual,xSiguiente,a)
cantidadDeIteraciones = 0
lado = (a - xSiguiente)/4.0
xActual = xSiguiente
xSiguiente = calcularXSiguiente(xActual, a)
epsilon = calcularErrorRelativo(xActual,xSiguiente,a)
cantidadDeIteraciones += 1
return xActual -
(evaluarEnFuncion(xActual,a)/evaluarEnDerivadaDeLaFuncion(xActual,a))
evaluacionEnElSiguiente = evaluarEnFuncion(xSiguiente,a)
evaluacionEnElActual = evaluarEnFuncion(xActual,a)
-9-
errorRelativo = (evaluacionEnElSiguiente - evaluacionEnElActual) /
evaluacionEnElSiguiente
return -errorRelativo
return errorRelativo
def main():
print "El siguiente programa permite obtener el punto de corte de un alambre de modo
tal que se puedan formar un cuadrado y una circuenferencia cuya suma de momentos de
inercia sea mínima"
raw_input()
print "La longitud del alambre ingresado es : ",a,"y el minimo error : ",minimoError
raw_input()
print "El valor aproximado de corte es", resultado1, "cms. y la cantidad de iteraciones"
- 10 -
raw_input()
main()
raw_input()
- 11 -