Está en la página 1de 9

Instituto Tecnol

ogico de L
azaro C
ardenas
Ingeniera Electr
onica
Programa en MATLAB

Asignatura: Analisis Numerico


Docente: M.C. Julio Cesar Gallo Sanchez

Alumno: Jose Armando Lara Ramos

4o Semestre

Febrero 8 de 2012

Jose Armando Lara Ramos

A continuacion se presenta un programa en Matlab el cual resuelve polinomios


reales y complejos mediante el metodo de Newton Raphson. Se utilizan matrices para
el tratamiento de los datos.

1.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

C
odigo del script newtonraphsonsistemascomplejos.m

% Calcula la ra
z de un sistema de eq. por el m
etodo newton-raphson
clear
disp(Escriba el n
umero de variables independientes a utilizar);
vi = input(siendo este menor igual a 10: );
v = sym(x,[1 vi]);
syms x1 x2 x3 x4 x5 x6 x7 x8 x9 x10;
disp(Ingrese la matriz que exprese el sistema de ecuaciones utilizando )
f = input(x1, x2, x3, etc. como variables independientes: );
j = jacobian(f,v);
disp(Ahora ingresa el vector inicial de dimensi
on igual al )
r = input(n
umero de variables independientes :);
maxit = input(Ingresa m
aximo n
umero de iteraciones: );
it = 1;
alto = 0;
while alto == 0
switch vi
case 1
je = subs(j,{x1},{r});
case 2
je = subs(j,{x1,x2},{r});
case 3
je = subs(j,{x1,x2,x3},{r});
case 4
je = subs(j,{x1,x2,x3,x4},{r});
case 5
je = subs(j,{x1,x2,x3,x4,x5},{r});
case 6
je = subs(j,{x1,x2,x3,x4,x5,x6},{r});
case 7
je = subs(j,{x1,x2,x3,x4,x5,x6,x7},{r});
case 8
je = subs(j,{x1,x2,x3,x4,x5,x6,x7,x8},{r});
case 9
je = subs(j,{x1,x2,x3,x4,x5,x6,x7,x8,x9},{r});
case 10
je = subs(j,{x1,x2,x3,x4,x5,x6,x7,x8,x9,x10},{r});
otherwise

Jose Armando Lara Ramos


disp(El n
umero de variables independientes es muy alto.)
return

38
39

end
if je == 0
disp(La matriz jacobiana evaluada es no singular)
return
end
jeinv = inv(je);
switch vi
case 1
fe = subs(f,{x1},{r});
case 2
fe = subs(f,{x1,x2},{r});
case 3
fe = subs(f,{x1,x2,x3},{r});
case 4
fe = subs(f,{x1,x2,x3,x4},{r});
case 5
fe = subs(f,{x1,x2,x3,x4,x5},{r});
case 6
fe = subs(f,{x1,x2,x3,x4,x5,x6},{r});
case 7
fe = subs(f,{x1,x2,x3,x4,x5,x6,x7},{r});
case 8
fe = subs(f,{x1,x2,x3,x4,x5,x6,x7,x8},{r});
case 9
fe = subs(f,{x1,x2,x3,x4,x5,x6,x7,x8,x9},{r});
case 10
fe = subs(f,{x1,x2,x3,x4,x5,x6,x7,x8,x9,x10},{r});
otherwise
disp(El n
umero de variables independientes es muy alto.)
return
end
r1 = r - (jeinv*fe);
if maxit <= it
alto = 1;
end
disp([---Iteraci
on n
umero num2str(it) ---])
disp(La aproximaci
on es: )
r2 = vpa(r1,7);
disp(r2)
r = r1;
it = it + 1;

40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81

end

Jose Armando Lara Ramos

2.

Explicaci
on de la l
ogica del script newtonraphsonsistemascomplejos.m

El n
umero de lnea en el codigo del script corresponde al n
umero en cada paso de
la explicacion.
1. Comentarios sobre la funcion del programa.
2. Se limpian los valores de todas las variables.
3. Se despliega un mensaje solicitando que se ingrese el n
umero de variables independientes a utilizar, es decir, del espacio del cual la matriz que se dara posteriormente estara definida. Por ejemplo de alguna matriz m la cual este definida
en m : R2 R2 , estariamos hablando de dos variables independientes.
4. Continua el mensaje anterior especificando un n
umero maximo de variables
independientes menoro igual a diez. El valor se guarda en la variable vi.
5. Se genera un vector con variables x1, x2, x3, . . . , xvi, etc. con longitud vi siendo
nombrado cada una de las variables dentro del vector como ya se indico.
6. Se declaran variables simbolicas las variables x1, x2, x3, . . . , x10 para poder realizar operaciones simbolicas con ellas, en especial la derivacion.
7. Se solicita al usuario el ingreso de una matriz que exprese el sistema de ecuaciones a solucionar.
8. Continua el mensaje anterior indicando que las variables independientes deben
de ser x1, x2, x3, . . . , x10 seg
un sean las que se utilicen. La matriz se guarda en
la variable f.
9. Se calcula la matriz jacobiana de la matriz original, derivando con respecto
al vector que contiene a las variables independientes. La matriz jacobiana se
guarda en j.
10. Se solicita al usuario ingrese un punto inicial para las iteraciones, siendo este
un vector de un reglon y de n
umero de columnas igual al n
umero de variables
independientes.
11. Continuacion del mensaje anterior. El vector se guarda en la variable r.
12. Se solicita maximo n
umero de iteraciones para el programa. En este caso se omita la opcion de error relativo debido a la incapacidad de calcular valor absoluto
de matrices.
13. Se inicializa la variable it en uno ya que esta guardara el n
umero de iteraciones
y comenzaremos en la primera iteracion.

Jose Armando Lara Ramos

14. Se iguala a cero la variable alto para ser utilizada como bandera de salida del
siguiente ciclo while.
15. Se inicia el ciclo while que contiene el codigo del metodo de Newton Raphson
para sistema de ecuaciones y variables complejas y el despliegue de resultados.
16. Comienza bloque switch el cual compara la variable vi con n
umeros del 1 al
10, con el objetivo de evaluar la matriz jacobiana dependiendo del n
umero de
variables independientes. Esto debido a que la funcion subs requiere las variables
independientes a sustituir.
17. Si el n
umero de variables independientes es igual a 1
18. Se eval
ua la matriz jacobiana en el vector r.
19. Si el n
umero de variables independientes es igual a 2
20. Se eval
ua la matriz jacobiana en el vector r.
21. Si el n
umero de variables independientes es igual a 3
22. Se eval
ua la matriz jacobiana en el vector r.
23. Si el n
umero de variables independientes es igual a 4
24. Se eval
ua la matriz jacobiana en el vector r.
25. Si el n
umero de variables independientes es igual a 5
26. Se eval
ua la matriz jacobiana en el vector r.
27. Si el n
umero de variables independientes es igual a 6
28. Se eval
ua la matriz jacobiana en el vector r.
29. Si el n
umero de variables independientes es igual a 7
30. Se eval
ua la matriz jacobiana en el vector r.
31. Si el n
umero de variables independientes es igual a 8
32. Se eval
ua la matriz jacobiana en el vector r.
33. Si el n
umero de variables independientes es igual a 9
34. Se eval
ua la matriz jacobiana en el vector r.
35. Si el n
umero de variables independientes es igual a 10
36. Se eval
ua la matriz jacobiana en el vector r.

Jose Armando Lara Ramos

37. Si el n
umero de variables independientes no coincide con ninguna opcion, entonces se ejecuta la siguiente lnea.
38. Se despliega un mensaje indicando el exceso de variables independientes.
39. El programa termina.
40. Termina el bloque switch que eval
ua la matriz jacobiana.
41. Comienza bloque if que detecta si la matriz jacobiana es invertible, es decir si
es singular.
42. Se despliega que la matriz es nula, es decir es no singular.
43. Termina el programa.
44. Termina bloque if que detecta si la matriz jacobiana es invertible.
45. Se invierte la matriz jacobiana evaluada y se guarda en la variable jeinv.
46. Comienza un bloque switch el cual compara el n
umero de variables independientes para la evaluacion de la matriz funcion. Esto debido a que la funcion subs
necesita el nombre de las variables independientes a sustituir.
47. Si el n
umero de variables independientes es igual a 1
48. Se eval
ua la matriz original en el vector r.
49. Si el n
umero de variables independientes es igual a 2
50. Se eval
ua la matriz original en el vector r.
51. Si el n
umero de variables independientes es igual a 3
52. Se eval
ua la matriz original en el vector r.
53. Si el n
umero de variables independientes es igual a 4
54. Se eval
ua la matriz original en el vector r.
55. Si el n
umero de variables independientes es igual a 5
56. Se eval
ua la matriz original en el vector r.
57. Si el n
umero de variables independientes es igual a 6
58. Se eval
ua la matriz original en el vector r.
59. Si el n
umero de variables independientes es igual a 7
60. Se eval
ua la matriz original en el vector r.

Jose Armando Lara Ramos

61. Si el n
umero de variables independientes es igual a 8
62. Se eval
ua la matriz original en el vector r.
63. Si el n
umero de variables independientes es igual a 9
64. Se eval
ua la matriz original en el vector r.
65. Si el n
umero de variables independientes es igual a 10
66. Se eval
ua la matriz original en el vector r.
67. Si el n
umero de variables independientes no coincide con ninguna opcion, entonces se ejecuta la siguiente lnea.
68. Se despliega un mensaje indicando el exceso de variables independientes.
69. El programa termina.
70. Termina el bloque switch que eval
ua la funcion matriz en r.
71. Se calcula el siguiente punto aproximacion haciendo uso del la ecuacion que
describe el metodo de Newton-Rahpson para matrices
rsiguiente = ractual [J(ractual )]1 f (ractual )
72. Comienza bloque if en el cual se compara el n
umeo de iteraciones que van, con
el n
umero maximo de iteraciones determinado por el usuario.
73. En caso de ser mayor o igual el n
umero de iteraciones maximas al n
umero actual
de iteraciones, la bandera alto se pone en uno y as termina el cliclo while que
es cuerpo del programa.
74. Termina el if que compara el n
umero de iteraciones.
75. Se despliega en la pantalla el n
umero de iteracion.
76. Se despliega la aproximacion actual.
77. Continua la lnea anterior. Aqu se utiliza la funcion vpa la cual convierte los
valores fraccionarios en una representacion decimal.
78. Se despliega el valor de la aproximacion como matriz.
79. Se guarda la aproximacion encontrada en la variable de aproximacion actual,
para la siguiente iteracion.
80. Se incrementa en uno el n
umero de iteraciones.
81. Se termina junto con el cliclo while el programa. mphwhile.

Jose Armando Lara Ramos

3.

Ejecuci
on del Programa

Como ejemplo se planea resolver la siguiente expresion:


Dada la ecuacion z 3 3 = 0, donde z C. Encuentre todas las soluciones de la
ecuacion. Para resolver la ecuacion hacemos z = x + y i, con i2 = 1, obteniendo:
(x + y i)3 3 = 0
Resolviendo el producto notable y agrupando terminos se obtiene
(x3 3xy 2 3) + (3x2 y y 2 ) i = 0
Haciendo r = (x, y)t con P (x, y) = x3 3xy 2 3 y Q(x, y) = 3x2 y y 2 , se tiene que

  
P (r)
0
F (r) =
=
=0
Q(r)
0
Con la matriz jacobiana (la cual la calculara el programa solo)
 2

3x 3t2
6xy
J(r) =
6xy
3x2 3y 2
Si rinicial = [1,5, 0], aplicando el algoritmo, este se detiene en N = 3 y la raz real
es la parte real del vector z1 = [1,44225, 0].

Figura 1: Ejecucion del programa.

Jose Armando Lara Ramos

Referencias
[1] An Introduction to Numerical Analysis for Electrical and Computer Engineers,
Chistopher J. Zarowski, Editorial Wiley, ISBN 0-471-46737-5.
[2] http://www.mathworks.com/help (Sitio de ayuda oficial de Matlab)
[3] Numerical Methods for Mathematics, Science and Engineering, 2nd Ed, 1992

También podría gustarte