Metodo de Punto Fijo y Newton-Raphson

UNIVERSIDAD SANTO TOMÁS FACULTAD DE INGENIERÍA MECÁNICA MÉTODOS NUMÉRICOS ‘’MÉTODOS DE PUNTO FIJO Y NEWTON-RAPHSON’’ Por

Views 165 Downloads 0 File size 566KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

UNIVERSIDAD SANTO TOMÁS FACULTAD DE INGENIERÍA MECÁNICA MÉTODOS NUMÉRICOS ‘’MÉTODOS DE PUNTO FIJO Y NEWTON-RAPHSON’’ Por: Edinson Ferley Guillén Cruz 2091277 Para el desarrollo de problemas en ingeniería, utilizamos los diferentes tipos de cálculos que existen solucionando el problema fácilmente, pero en ocasiones aparecen problemas que para su solución son necesarios aplicar métodos numéricos para conocer una respuesta precisa y aproximada a un valor real. En este caso se utiliza el método de Punto fijo y Newton-Raphson para conocer las raíces de una función de la forma más precisa y exacta posible. EJERCICIO 1 Una correa en v con una longitud de es usada para transmitir potencia entre ejes mediante poleas de radio y . Tomando como la mitad del ángulo de contacto de la polea pequeña y como la distancia entre ejes, es posible escribir la siguiente relación para la transmisión:

Calcular el angulo

empleando cinco cifras significativas.

Para desarrollar el ejercicio por los métodos de Punto fijo y Newton-Raphson es necesario graficar la función para saber cuántas raíces tiene, y para conocer un punto cercano a la raíz.

Primero se debe igualar la función a cero.

Luego con el programa Matlab escribir un código en un .m para graficar la función con los valores dados en el enunciado. %Grafica ejercicio 2 poleas function grafica_ejercicio_poleas() L=500; R=60; r=40; teta=0:0.1:pi/2; f=(tan(teta))-(teta)-((0.5*L-pi*R)/(R-r)); plot(teta,f); grid on

En el código se observa que teta es el dominio de la función, que va de 0 a pi/2 en intervalos de 0.1, lo cual nos da la siguiente gráfica:

Luego identificamos el punto cercano donde la gráfica corta en 0, en este caso tomamos como valor inicial a 1.3. Para saber si el valor inicial que escogimos nos sirve para implementar el método de punto fijo, es necesario hacer una comprobación donde se evalúa la derivada de la función despejada en términos de la variable. (

)

Hacer la comprobación por medio del siguiente código: function comprobacion_poleas syms L R r teta g2=atan(((0.5*L-pi*R)/(R-r))+teta); dg2=diff(g2,teta); L=500; R=60; r=40; teta=1.3; abs(eval(dg2))

Si el resultado del valor absoluto de la evaluación de la derivada nos da menor a 1 quiere decir que el valor inicial escogido converge y sirve para desarrollar el método, si no se debe escoger otro valor y revisar si converge. En este caso el resultado se observa en la siguiente imagen donde se observa que el resultado es menor que uno.

Teniendo claro el valor inicial y que este converge, se desarrolla el ejercicio implementando el código de punto fijo e ingresando la ecuación que genera la comprobación con sus respectivas variables, también se implementa el código de la gráfica al final del código de punto fijo para que al ejecutar el programa nos muestre también la gráfica. El código queda así: %Universidad Santo Tomas %Facultadad INgenieria Mecanica %Metodos Numericos %Algoritmo de punto fijo para aproximar la raz de la funcion f(x)=0 %Edinson Guillen function tetai=puntofijo_poleas() grafica_ejercicio_poleas() disp('Metodo de Punto fijo'); tetao=input('Defina el valor inicial:');%define teta0 n=input('Defina el numero de cifras significativas:');%define n

Es=0.5*10^(2-n);%error estimado it=0;%inicio contador de iteraciones Ea=Es+1;%iicio error aproximado relativo %Proceso Iterativo: tetant=tetao; while (Ea>Es) if it>0 disp([' it: ' sprintf('%4i',it) ... ' tetai: ' sprintf('%3.5f',tetant) ... ' Ea: ' sprintf('%3.5f',Ea)]); else disp([' it: ' sprintf('%4i',it) ... ' tetai: ' sprintf('%3.5f',tetant) ... ' Ea: ---']); end tetai=g(tetant);%Formula para punto fijo Ea=abs((tetai-tetant)/(tetai))*100; tetant=tetai; it=it+1; end function teta=g(tetai)%Function teta=g(teta) L=500; R=60; r=40; teta=atan(((0.5*L-pi*R)/(R-r))+tetai); function grafica_ejercicio_poleas() L=500; R=60; r=40; teta=0:0.1:pi/2; f=(tan(teta))-(teta)-((0.5*L-pi*R)/(R-r)); plot(teta,f); grid on

Al ejecutar el programa este nos pide el valor inicial, y el número de cifras significativas. Introduciendo los valores muestra la siguiente tabla:

Como se observa en la tabla, el programa por el método de punto fijo realizo 4 iteraciones para llegar a una respuesta con cinco cifras significativas aproximadas al punto donde la gráfica corta al eje en 0, con un error aproximado de 0.00817%. Ahora se desarrolla el ejercicio por el Método de Newton-Raphson, para desarrollar este ejercicio se iguala la función original a cero

Luego para hallar la raíz de la función se hace la primera derivada, lo que se conoce como una aproximación por la tangente de la función, como se ve en el siguiente código: %Derivada de la funcion f(teta) function derivada_funcion_poleas() syms L R r teta fteta=(tan(teta))-(teta)-((0.5*L-pi*R)/(R-r)); dfteta=diff(fteta)

Luego al ejecutar el código nos da la expresión de la derivada de la función.

Ahora se reemplaza la función igualada a cero y la derivada de esta en el código de NewtonRaphson para hallar la raíz. %Universidad Santo Tomas %Facultad de Ingenieria Mecanica %Metodos Numericos %Algoritmo de Newton-Raphson para aproximar la raiz de una funcion %Edinson Guillen %--------------------------------------------------------------------function tetai=newton_poleas() grafica_ejercicio_poleas() disp('Metodo de Newton-Raphson'); tetao=input('Defina el valor inicial: ');%define teta0 n=input('Define el numero de cifras significativas: ');%define n Es=0.5*10^(2-n);%error estimado it=0;%inicio contador de iteraciones Ea=Es+1;%inicio de error aproximado relativo %Proceso Iterativo tetant=tetao;

while (Ea>Es) if it>0 disp([' it: ' sprintf('%4i',it) ... ' tetai: ' sprintf('%3.5f',tetant) ... ' Ea: ' sprintf('%3.5f',Ea)]); else disp([' it: ' sprintf('%4i',it) ... ' tetai: ' sprintf('%3.5f',tetant) ... ' Ea: ---']); end tetai=tetant-(f(tetant)/df(tetant));%Formula para Newton Raphson Ea=abs((tetai-tetant)/tetai)*100; tetant=tetai; it=it+1; end function fteta=f(tetai)%funcion de equilibrio f(teta)=0 L=500; R=60; r=40; fteta=(tan(tetai))-(tetai)-((0.5*L-pi*R)/(R-r)); function dfteta=df(tetai)%derivada de la funcion de equilibrio f'(teta) dfteta=tan(tetai)^2; function grafica_ejercicio_poleas() L=500; R=60; r=40; teta=0:0.1:pi/2; f=(tan(teta))-(teta)-((0.5*L-pi*R)/(R-r)); plot(teta,f); grid on

Al ejecutar el código, el programa pide el valor inicial y el número de cifras significativas mostrando la siguiente tabla:

Como se observa en la tabla, el programa por el método de Newton-Raphson realizo 4 iteraciones para llegar a una respuesta con cinco cifras significativas aproximadas al punto donde la gráfica corta al eje en 0, con un error aproximado de 0.04229%. En conclusión en este ejercicio aunque por ambos métodos salen 3 iteraciones, el mejor método para conocer la raíz es el de punto fijo, ya que tiene un menor porcentaje de error y por lo tanto es más exacto y preciso que el método de newton-Raphson. EJERCICIO 2 En el mecanismo de cuatro barras mostrado, la relación entre el Angulo de entrada de salida esta dada por la ecuación de freudenstein. (

y el angulo

)

Dónde:

Si d=16cm, a=8cm, b=12cm y c=12 determine numéricamente para tomando como punto inicial .Realice cinco iteraciones tomando cinco cifras significativas.

Para desarrollar el ejercicio por los métodos de punto fijo y newton-Raphson es necesario graficar la función para saber cuántas raíces tiene, y así encontrar un punto cercano a la raíz. Como la ecuación ya está igualada a cero, lo que se hace es hacer un cambio de variables en la ecuación, donde es reemplazado por , y se reemplaza por su valor numérico que es de 20° o

de , para que cuando se introduzca la ecuación en los códigos de punto fijo y newton-Raphson no sea necesario cambiar la variable teta por fi, quedando la ecuación de la siguiente forma: (

( )

( )

(

))

Luego con el programa Matlab escribir un código en un .m para graficar la función con los valores dados en el enunciado. %Grafica ejercicio 3 barras function grafica_ejercicio_barras() a=8; b=12; c=12; d=16; teta=0:0.1:pi; R1=d/a; R2=d/b; R3=((d^2)+(a^2)+(b^2)-(c^2))/(2*a*b); f=(R1*cos(teta)-R2*cos(pi/9)+R3-cos(teta-(pi/9))); plot(teta,f); grid on

En el código se observa que teta es el dominio de la función, que va de 0 a pi en intervalos de 0.1, lo cual nos da la siguiente gráfica:

Luego identificamos el punto cercano donde la gráfica corta en 0, en este caso tomamos como valor inicial a 1.5. Para saber si el valor inicial que escogimos nos sirve para implementar el método de punto fijo, es necesario hacer una comprobación donde se evalúa la derivada de la función despejada en términos de la variable.

(

( )

(

)

)

Hacer la comprobación por medio del siguiente código: function comprobacion_barras syms a b c d teta R1 R2 R3 g2=acos((R2*cos(pi/9)+cos(teta-(pi/9))-R3)/R1); dg2=diff(g2,teta); a=8; b=12; c=12; d=16; teta=1.5; R1=d/a; R2=d/b; R3=((d^2)+(a^2)+(b^2)-(c^2))/(2*a*b); abs(eval(dg2))

Si el resultado del valor absoluto de la evaluación de la derivada nos da menor a 1 quiere decir que el valor inicial escogido converge y sirve para desarrollar el método, si no se debe escoger otro valor y revisar si converge. En este caso el resultado se observa en la siguiente imagen donde se observa que el resultado es menor que uno.

Teniendo claro el valor inicial y que este converge, se desarrolla el ejercicio implementando el código de punto fijo e ingresando la ecuación que genera la comprobación con sus respectivas variables, también se implementa el código de la gráfica al final del código de punto fijo para que al ejecutar el programa nos muestre también la gráfica. El código queda así: %Universidad Santo Tomas %Facultadad Ingenieria Mecanica %Metodos Numericos %Algoritmo de punto fijo para aproximar la raz de la funcion f(x)=0 %Edinson Guillen %--------------------------------------------------------------------function tetai=puntofijo_barras() grafica_ejercicio_barras() disp('Metodo de Punto fijo'); tetao=input('Defina el valor inicial:');%define teta0 n=input('Defina el numero de cifras significativas:');%define n Es=0.5*10^(2-n);%error estimado it=0;%inicio contador de iteraciones Ea=Es+1;%iicio error aproximado relativo %Proceso Iterativo: tetant=tetao; while (Ea>Es) if it>0 disp([' it: ' sprintf('%4i',it) ... ' tetai: ' sprintf('%3.5f',tetant) ... ' Ea: ' sprintf('%3.5f',Ea)]); else disp([' it: ' sprintf('%4i',it) ... ' tetai: ' sprintf('%3.5f',tetant) ... ' Ea: ---']); end tetai=g(tetant);%Formula para punto fijo Ea=abs((tetai-tetant)/(tetai))*100; tetant=tetai; it=it+1; end function teta=g(tetai)%Function teta=g(teta) a=8; b=12; c=12; d=16; R1=d/a; R2=d/b; R3=((d^2)+(a^2)+(b^2)-(c^2))/(2*a*b); teta=acos((R2*cos(pi/9)+cos(tetai-(pi/9))-R3)/R1); function grafica_ejercicio_barras() a=8; b=12; c=12;

d=16; teta=0:0.1:pi; R1=d/a; R2=d/b; R3=((d^2)+(a^2)+(b^2)-(c^2))/(2*a*b); f=(R1*cos(teta)-R2*cos(pi/9)+R3-cos(teta-(pi/9))); plot(teta,f); grid on

Al ejecutar el programa este nos pide el valor inicial, y el número de cifras significativas. Introduciendo los valores muestra la siguiente tabla:

Como se observa en la tabla, el programa por el método de punto fijo realizo 14 iteraciones para llegar a una respuesta con cinco cifras significativas aproximadas al punto donde la gráfica corta al eje en 0, con un error aproximado de 0.00065%. Ahora se desarrolla el ejercicio por el Método de Newton-Raphson, para desarrollar este ejercicio se iguala la función original a cero (

)

Luego para hallar la raíz de la función se hace la primera derivada, lo que se conoce como una aproximación por la tangente de la función, como se ve en el siguiente código: %Derivada de la funcion f(teta) function derivada_funcion_barras() syms a b c d teta R1 R2 R3 R1=d/a;

R2=d/b; R3=((d^2)+(a^2)+(b^2)-(c^2))/(2*a*b); fteta=(R1*cos(teta)-R2*cos(pi/9)+R3-cos(teta-(pi/9))); dfteta=diff(fteta)

Luego al ejecutar el código nos da la expresión de la derivada de la función.

Ahora se reemplaza la función igualada a cero y la derivada de esta en el código de NewtonRaphson para hallar la raíz. %Universidad Santo Tomas %Facultad de Ingenieria Mecanica %Metodos Numericos %Algoritmo de Newton-Raphson para aproximar la raiz de una funcion %Edinson Guillen %--------------------------------------------------------------------function tetai=newton_barras() grafica_ejercicio_barras() disp('Metodo de Newton-Raphson'); tetao=input('Defina el valor inicial: ');%define teta0 n=input('Define el numero de cifras significativas: ');%define n Es=0.5*10^(2-n);%error estimado it=0;%inicio contador de iteraciones Ea=Es+1;%inicio de error aproximado relativo %Proceso Iterativo tetant=tetao; while (Ea>Es) if it>0 disp([' it: ' sprintf('%4i',it) ... ' tetai: ' sprintf('%3.5f',tetant) ... ' Ea: ' sprintf('%3.5f',Ea)]); else disp([' it: ' sprintf('%4i',it) ... ' tetai: ' sprintf('%3.5f',tetant) ... ' Ea: ---']); end tetai=tetant-(f(tetant)/df(tetant));%Formula para Newton Raphson Ea=abs((tetai-tetant)/tetai)*100; tetant=tetai;

it=it+1; end function fteta=f(tetai)%funcion de equilibrio f(teta)=0 a=8; b=12; c=12; d=16; R1=d/a; R2=d/b; R3=((d^2)+(a^2)+(b^2)-(c^2))/(2*a*b); fteta=(R1*cos(tetai)-R2*cos(pi/9)+R3-cos(tetai-(pi/9))); function dfteta=df(tetai)%derivada de la funcion de equilibrio f'(teta) a=8; d=16; dfteta=(sin(tetai - (pi/9)) - (d*sin(tetai))/a); function grafica_ejercicio_barras() a=8; b=12; c=12; d=16; teta=0:0.1:pi; R1=d/a; R2=d/b; R3=((d^2)+(a^2)+(b^2)-(c^2))/(2*a*b); f=(R1*cos(teta)-R2*cos(pi/9)+R3-cos(teta-(pi/9))); plot(teta,f); grid on

Al ejecutar el código, el programa pide el valor inicial y el número de cifras significativas mostrando la siguiente tabla:

Como se observa en la tabla, el programa por el método de Newton-Raphson realizo 3 iteraciones para llegar a una respuesta con cinco cifras significativas aproximadas al punto donde la gráfica corta al eje en 0, con un error aproximado de 0.17260%. Luego la raíz queda en 1.6392. En conclusión en este ejercicio aunque por el método de newton realiza menos iteraciones, tiene un porcentaje de error mayor que método de punto fijo, luego el mejor método para solucionar este ejercicio es el de punto fijo. TABLAS DE RESULTADOS EJERICIO 1:

Tabla Método Punto fijo Poleas

Tabla Método Newton-Raphson Poleas

Valor inicial

1,3

Valor inicial

1,3

Cifras significativas

5

Cifras significativas

5

Iteración #

4

Iteración #

4

Resultado

1,3485

Resultado

1,3485

Error Aproximado

0,00817

Error Aproximado

0,04229

Según las tablas de resultados del ejercicio 1, el mejor método para solucionar el problema es el de Punto fijo, ya que aunque este hace el mismo número de iteraciones tiene un error aproximado menor lo cual lo hace mejor. EJERCICIO 2

Tabla Método Punto Fijo Barras

Tabla Método Newton-Raphson Barras

Valor inicial

1,5

Valor inicial

1,5

Cifras significativas

5

Cifras significativas

5

Iteración #

14

Iteración #

3

Resultado

1,6392

Resultado

1,6392

Error Aproximado

0,00065

Error Aproximado

0,1726

Según las tablas de resultados del ejercicio 2, el mejor método para solucionar el problema es el de Punto fijo, ya que aunque este hace mayor número de iteraciones tiene un error aproximado menor lo cual lo hace mejor.