Académique Documents
Professionnel Documents
Culture Documents
Alumno:
Instituto Politcnico
Ramos Albarrn Fernando Nacional
Escuela Superior de
Ingeniera Mecnica y
Elctrica
Ingeniera Elctrica
Curso Propedutico 1
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
NDICE
INTRODUCCIN.................................................................................................................................2
I. RAICES DE ECUACIONES.............................................................................................................4
Mtodos cerrados..........................................................................................................................4
El Mtodo de Biseccin..............................................................................................................6
El Mtodo de Regla Falsa..........................................................................................................12
Mtodos abiertos.........................................................................................................................21
Mtodo de Newton - Raphson.................................................................................................22
Mtodo de la Secante...............................................................................................................27
Races de polinomios....................................................................................................................30
Mtodo de Lin Bairstow...........................................................................................................30
II. SISTEMAS DE ECUACIONES ALGEBRAICAS LINEALES...............................................................39
Eliminacin Gaussiana Simple y Sustitucin hacia atrs...............................................................39
Gauss-Jordan................................................................................................................................44
Matriz Inversa y Multiplicacin de Matrices.................................................................................47
Mtodo Iterativo de Gauss...........................................................................................................50
III. SISTEMAS DE ECUACIONES NO LINEALES............................................................................55
Mtodo de Newton Raphson para n ecuaciones.......................................................................55
IV. AJUSTE DE CURVAS..............................................................................................................61
Mnimos Cuadrados.....................................................................................................................62
Interpolacin Polinomial de Newton en Diferencias Divididas.....................................................66
Polinomios de Interpolacin de Lagrange....................................................................................73
V. ECUACIONES DIFERENCIALES ORDINARIAS.............................................................................77
Mtodo de Euler..........................................................................................................................78
Mtodos de Runge-Kutta de cuarto orden...................................................................................80
Comparacin Grfica de los Mtodos de Runge Kutta en MATLAB hasta 5to. Orden...................83
Cdigo de las funciones en MATLAB de los mtodos usados.......................................................88
Curso Propedutico 2
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Curso Propedutico 3
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
INTRODUCCIN
Los mtodos numricos son tcnicas mediante las cuales es posible formular problemas de tal
forma que puedan resolverse usando operaciones aritmticas. Aunque hay muchos tipos de
mtodos numricos, todos comparten una caracterstica comn: Invariablemente los mtodos
numricos llevan a cabo un buen nmero de tediosos clculos aritmticos. No es raro que con el
desarrollo de computadoras digitales eficientes y rpidas, el papel de los mtodos numricos en la
solucin de problemas de ingeniera haya aumentado considerablemente en los ltimos aos.
AI usar la computadora para obtener soluciones directamente, se pueden aproximar los clculos
sin tener que recurrir a suposiciones de simplificacin o tcnicas deficientes. Aunque dichas
suposiciones son aun extremadamente valiosas tanto para resolver problemas como para
proporcionar una mayor comprensin, los mtodos numricos representan alternativas que
amplan considerablemente la capacidad para confrontar y resolver los problemas; como
resultado, se dispone de ms tiempo para aprovechar las habilidades creativas personales. Por
consiguiente, es posible dar ms importancia a la formulacin de un problema, a la interpretacin
de la solucin y a su incorporacin al sistema total, o conciencia holstica.
Hay muchos problemas que no pueden plantearse al emplear programas hechos. Si se est
versado en los mtodos numricos y se es un adepto de la programacin de computadoras,
entonces se tiene la capacidad de disear programas propios para resolver los problemas, sin tener
que comprar un software costoso. En el presente documento se usar la programacin en C++ para
construir nuestros propios programas para la resolucin de problemas usando los mtodos
numricos que se describen a continuacin:
1. Races de ecuaciones. Estos problemas estn relacionados con el valor de una variable o
de un parmetro que satisface una ecuacin ya sea trascendental o un polinomio (En ste
documento trataremos las races de un polinomio). Son especialmente valiosos en
proyectos de ingeniera donde con frecuencia resulta imposible despejar analticamente
parmetros de ecuaciones de diseo.
2. Sistemas de ecuaciones algebraicas lineales. En esencia, estos problemas son similares a
los de races de ecuaciones en el sentido de que estn relacionados con valores que
satisfacen ecuaciones. Sin embargo, a diferencia de satisfacer una sola ecuacin, se busca
un conjunto de valores que satisfaga simultneamente a un conjunto de ecuaciones
algebraicas. Las ecuaciones lineales simultneas surgen en el contexto de una variedad de
problemas y en todas las disciplinas de la ingeniera. En particular, se originan a partir de
Curso Propedutico 4
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Curso Propedutico 5
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
I. RAICES DE ECUACIONES
Mtodos cerrados.
Los mtodos cerrados consisten en dar 2 puntos tales que stos encierren el valor de la raz, dichos
puntos es cuando al sustituirlos en la funcin, sta cambia de signo. En ste caso se aplica un
anlisis de la curva mediante la implementacin de un programa tabula.cpp en c++, el cual evala
la funcin para valores obtenidos a travs de un intervalo dado y un nmero de puntos en los
cuales se divide dicho intervalo. El programa tabula.cpp muestra al final los puntos para los cuales
en la funcin hay un cambio de signo, estos puntos se usan en los mtodos cerrados de biseccin y
regla falsa.
Se introduce la funcin en la librera #define en el cdigo del programa de c++, cmo se indica a
continuacin:
#define f1(x)(1.0*pow(x,4)-5.0*pow(x,3)+0.5*pow(x,2)-11.0*x+10.0)
Se ejecuta, para 10 puntos, con un intervalo inferior de 0 a 5.5. La ejecucin en C++ se muestra a
continuacin:
Curso Propedutico 6
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
--------------------------------
Process exited after 8.446 seconds with return value 0
Presione una tecla para continuar . . .
Curso Propedutico 7
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
El programa indica para que intervalos de la funcin hay un cambio de signo; por lo tanto, esos
valores lo ms probable es que encierren una o ms races.
El Mtodo de Biseccin.
Se sabe que un polinomio de grado n tiene n races las cuales pueden ser:
Reales y distintas.
Reales e iguales.
Complejas conjugadas.
De acuerdo a ello un polinomio de grado impar tendr por lo menos una raz real, para dichas
races ocuparemos los mtodos numricos de Biseccin, Regla Falsa, Newton Raphson.
En general, si f(x) es real y contina en el intervalo que va desde xl hasta xu y f(xl) y f(xu) tienen
signos opuestos, es decir,
f ( xl ) f ( xu ) <0 (2)
Entonces hay al menos una raz real entre xl y xu. Los mtodos de bsqueda incremental
aprovechan esta caracterstica localizando un intervalo en el que la funcin cambie de signo.
Entonces, la localizacin del cambio de signo (y, en consecuencia, de la raz) se logra con ms
exactitud al dividir el intervalo en varios subintervalos. Se investiga cada uno de estos subintervalos
para encontrar el cambio de signo. El proceso se repite y la aproximacin a la raz mejora cada vez
ms en la medida que los subintervalos se dividen en intervalos cada vez ms pequeos. Por lo que
sabemos que existe, al menos, una raz real. A partir de este punto se va reduciendo el intervalo
sucesivamente hasta hacerlo tan pequeo como exija la precisin que hayamos decidido emplear.
En seguida se explicara a fondo y paso a paso el mtodo:
Curso Propedutico 8
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Figura 1.3. Ilustracin de las formas generales en que puede ocurrir una raz en un intervalo
preescrito por los lmites inferior xl y superior xu. Las fi guras a) y c) muestran que si f(xl) y f(xu)
tienen el mismo signo, entonces no habr races dentro del intervalo o habr un nmero par de
ellas. Las fi guras b) y d) muestran que si la funcin tiene signos diferentes en los puntos
extremos, entonces habr un nmero impar de races dentro del intervalo.
Criterio de convergencia.
(3)
A partir del polinomio del cual se obtuvieron los intervalos para los cuales la funcin cambia de
signo, se usa el primer intervalo +0.5500 y +1.1000 para probar el programa de biseccin.cpp y
obtener la primer raz. Para eso se escribe la funcin en la cabecera #define al igual que en el
programa de tabula.cpp y se corre el programa para un criterio de convergencia de 0.0001 y 20
iteraciones.
Curso Propedutico 9
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Curso Propedutico 10
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Curso Propedutico 11
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Ahora que se encontr una raz, se divide el polinomio original entre el factor de dicha raz (Esto es,
intercambiando el signo de la raz), para obtener un nuevo polinomio que se usar en el mtodo
de la regla falsa para determinar la segunda raz. Se ejecuta el programa
Divide_dos_polinomios.cpp. El cual pide tanto los grados como los coeficientes del divisor y del
dividendo y muestra el cociente y el residuo. Se tiene que especificar si un coeficiente es cero (En
dado caso). La salida del programa en c++ se muestra a continuacin.
Curso Propedutico 12
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
residuo[+4]=-0.00065
--------------------------------
Process exited after 240 seconds with return value 0
Presione una tecla para continuar . . .
Curso Propedutico 13
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Curso Propedutico 14
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
de la raz. El hecho de que se reemplace la curva por una lnea recta da una falsa posicin de
la raz; de aqu el nombre de mtodo de la falsa posicin, o en latn, regula falsi. Tambin se le
conoce como mtodo de interpolacin lineal.
Usando tringulos semejantes, la interseccin de la lnea recta con el eje de las x se estima
mediante
(5)
En la cual se despeja xr
(6)
sta es la frmula de la falsa posicin. El valor de xr calculado con la ecuacin (6), reemplazar,
despus, a cualquiera de los dos valores iniciales, xl o xu, y da un valor de la funcin con el mismo
signo de f(xr). De esta manera, los valores xl y xu siempre encierran la verdadera raz. El proceso se
repite hasta que la aproximacin a la raz sea adecuada. El algoritmo es idntico al de la biseccin
(figura 1.2), excepto en que la ecuacin se usa en el paso 2. Adems, se usa el mismo criterio de
terminacin [ecuacin (3)] para concluir los clculos.
Figura 1.6 Representacin grfica del mtodo de la falsa posicin. Con los tringulos semejantes sombreados se obtiene
la frmula para el mtodo.
A partir del polinomio de tercer grado que se obtiene de hacer la divisin, se usa el segundo
intervalo +4.9500 y +5.5000 para probar el programa de regla_falsa.cpp y obtener la segunda raz.
Para eso se escribe la funcin en la cabecera #define al igual que en el programa de biseccion.cpp y
se corre el programa para un criterio de convergencia de 0.0001 y 20 iteraciones.
Curso Propedutico 15
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Curso Propedutico 16
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Se usa nuevamente el programa para dividir polinomios, usando el factor de la segunda raz como
divisor y el polinomio de tercer grado como dividendo. La salida del programa es la siguiente:
Curso Propedutico 17
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
residuo[+1]=+0.00000
residuo[+2]=+0.00000
residuo[+3]=-0.00048
--------------------------------
Process exited after 60.66 seconds with return value 0
Presione una tecla para continuar . . .
Se puede apreciar que su discriminante es negativo, por lo tanto se obtendrn races complejas, se
puede usar la formula general de segundo orden. Se ejecuta el programa
Ecuacion_general_2do_orden.cpp, y se obtienen dichas races complejas. La salida del programa
implementado en c++ es la siguiente:
Curso Propedutico 18
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Curso Propedutico 19
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
A veces es necesario multiplicar dos polinomios, como es el caso de las interpolaciones de Newton
y Lagrange; sin embargo, esos mtodos se basan en el uso de matrices y arreglos implementados
ya dentro del programa del mtodo, por lo cual enseguida se muestra un programa individual
desarrollado para multiplicar 2 polinomios. Si multiplicamos el polinomio de segundo grado de la
ecuacin 7 por el factor de la segunda raz encontrada por el mtodo de regla falsa, se tiene que
obtener el polinomio de tercer grado de la ecuacin 4. La salida del programa es:
Curso Propedutico 20
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Curso Propedutico 21
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Curso Propedutico 22
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Mtodos abiertos.
En los mtodos cerrados del captulo anterior la raz se encuentra dentro de un intervalo
predeterminado por un lmite inferior y otro superior. La aplicacin repetida de estos mtodos
siempre genera aproximaciones cada vez ms cercanas a la raz. Se dice que tales mtodos son
convergentes porque se acercan progresivamente a la raz a medida que se avanza en el clculo
(figura 1.10a).
En contraste, los mtodos abiertos descritos en este captulo se basan en frmulas que requieren
nicamente de un solo valor de inicio x o que empiecen con un par de ellos, pero que no
necesariamente encierran la raz. stos, algunas veces divergen o se alejan de la raz verdadera a
medida que se avanza en el clculo (figura 1.10b). Sin embargo, cuando los mtodos abiertos
convergen (figura 1.10c), en general lo hacen mucho ms rpido que los mtodos cerrados.
Figura 1.10. Representacin grfica delas diferencias fundamentales entre los mtodos a) cerrados, b) y c) los mtodos
abiertos para el clculo de races. En a) se ilustra el mtodo de biseccin, donde la raz est contenida dentro del
intervalo dado por xl, y xu. En contraste, en los mtodos abiertos, ilustrados en b) y c), se utiliza una frmula para
dirigirse de xi a xi+1, con un esquema iterativo. As, el mtodo puede b) diverger o c) converger rpidamente,
dependiendo de los valores iniciales.
Curso Propedutico 23
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
(8)
(9)
Figura 1.11. Representacin grfica del mtodo de Newton-Raphson. Se extrapola una tangente a la funcin en xi [esto
es, f(xi)] hasta el eje x para obtener una estimacin de la raz en xi + 1.
Curso Propedutico 24
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Figura 1.12. Caso especial donde el mtodo de Newton-Raphson exhibe una convergencia deficiente.
f ( x )=x 54 x 4 +5 x 36 x +4 (10)
Curso Propedutico 25
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
x[+16]=+2.0000 y[+16]=+0.0000
x[+17]=+2.2500 y[+17]=+2.6025
x[+18]=+2.5000 y[+18]=+8.5312
x[+19]=+2.7500 y[+19]=+19.9951
x[+20]=+3.0000 y[+20]=+40.0000
Hay una raz entre-1.2500 y -0.7500
Y la raz es: -1.0000
Hay una raz entre+0.7500 y +1.2500
Y la raz es: +1.0000
Hay una raz entre+1.7500 y +2.2500
Y la raz es: +2.0000
--------------------------------
Process exited after 4.711 seconds with return value 0
Presione una tecla para continuar . . .
Figura 1.13. Una mejora de programa tabula.cpp puede ser si encuentra un valor para el cual la funcin sea cero, indicar
que hay una raz en ese valor, ste cdigo se agrega dentro de la funcin tabula, pero para aplicar el mtodo tambin se
puede indicar dentro de los intervalos en los que est dicha raz. En dado caso se podra ampliar el nmero de puntos o
el intervalo elegido.
Como el mtodo de Newton-Raphson requiere slo un valor inicial, se toma el punto -1.25 con un
criterio de convergencia de 0.0001 a 20 iteraciones. La salida del programa es:
Curso Propedutico 26
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
--------------------------------
Process exited after 28.02 seconds with return value 0
Presione una tecla para continuar . . .
Curso Propedutico 27
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Curso Propedutico 28
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Mtodo de la Secante.
Un problema potencial en la implementacin del mtodo de Newton-Raphson es la evaluacin de
la derivada. Aunque esto no es un inconveniente para los polinomios ni para muchas otras
funciones, existen algunas funciones cuyas derivadas en ocasiones resultan muy difciles de
calcular. En dichos casos, la derivada se puede aproximar mediante una diferencia finita dividida
hacia atrs, como en (figura 1.15).
(13)
Esta aproximacin se sustituye en la ecuacin (9) para obtener la siguiente ecuacin iterativa:
(14)
La cul es la frmula para el mtodo de la secante. Observe que el mtodo requiere de dos valores
iniciales de x. Sin embargo, debido a que no se necesita que f(x) cambie de signo entre los valores
dados, este mtodo no se clasifica como un mtodo cerrado.
Figura 1.15. Representacin grfica del mtodo de la secante. Esta tcnica es similar a la del mtodo de Newton-Raphson
(fi gura 1.11) en el sentido de que una aproximacin de la raz se predice extrapolando una tangente de la funcin hasta
el eje x. Sin embargo, el mtodo de la secante usa una diferencia dividida en lugar de una derivada para estimar la
pendiente.
Se selecciona el segundo intervalo entre +0.7500 y +1.2500 para usar el mtodo de la Secante. Al
momento de introducir la funcin del polinomio en las directivas #define se introduce el polinomio
reducido de la ecuacin 12. Los 2 puntos mencionados en ste prrafo encierran a la raz y se
consideran como los puntos iniciales, no necesariamente tienen que encerrar a la raz como antes
se mencion, pero para ste caso usamos esos puntos, adems un criterio de convergencia de
0.0001 a 20 iteraciones. La salida del programa es la siguiente:
Curso Propedutico 29
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Se usa el programa para dividir polinomios, para reducir el polinomio de cuarto orden de la
ecuacin 12 a uno de tercer orden dividindolo entre el factor de la raz obtenida por el mtodo de
la secante.
--------------------------------
Process exited after 48.78 seconds with return value 0
Presione una tecla para continuar . . .
Curso Propedutico 30
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Curso Propedutico 31
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
3 2
f ( x )=x 4 x + 6 x4 (15)
Este resultado se usar para aproximar un factor cuadrtico en el cual el factor cuadrtico inicial
consiste en los factores de las 2 races que se han encontrado con los mtodos abiertos, el factor
cuadrtico que se encontrar al resolverlo por la frmula general de segundo grado proporcionar
las races complejas, al dividir el polinomio de tercer grado de la ecuacin 15 se habr obtenido un
ltimo facto que al igualarlo a cero y despejar, ser la ltima raz real del polinomio de 5to orden
de la ecuacin 10.
Races de polinomios
Mtodo de Lin Bairstow
El mtodo de Bairstow es un mtodo iterativo relacionado de alguna manera con los mtodos de
Mller y de Newton-Raphson. Antes de hacer la descripcin matemtica de ste, recuerde la forma
factorizada de un polinomio, por ejemplo
5 ( x )= ( x+l ) ( x 4 )( x 5 ) ( x+ 3 )( x 2 ) (16)
Si se divide entre un factor que no es una raz (por ejemplo, x + 6), el cociente es un polinomio de
cuarto grado. Aunque, en este caso, habr un residuo diferente de cero.
Con estas consideraciones se puede elaborar un algoritmo para determinar la raz de un polinomio:
Por lo general, el mtodo de Bairstow se basa en esta manera de proceder. Por consiguiente,
depende del proceso matemtico de dividir un polinomio entre un factor.
Se divide entre el factor x t para dar un segundo polinomio que es de un grado menor:
n 1 ( x ) =b 1+b 2 x +b 3 x 2+ + bn xn 1 (18)
Con un residuo R = b0, donde los coeficientes se calculan por la relacin de recurrencia
Curso Propedutico 32
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
bn=an (19.1)
Observe que si t es una raz del polinomio original, el residuo b0 sera igual a cero.
Para permitir la evaluacin de races complejas, el mtodo de Bairstow divide el polinomio entre
un factor cuadrtico x2 rx s. Si esto se hace con la ecuacin (17), el resultado es un nuevo
polinomio
Con un residuo
Como con la divisin sinttica normal, se utiliza una relacin de recurrencia simple para realizar la
divisin entre el factor cuadrtico:
bn=an (22.1)
El factor cuadrtico se introduce para permitir la determinacin de las races complejas. Esto se
relaciona con el hecho de que, si los coeficientes del polinomio original son reales, las races
complejas se presentan en pares conjugados. Si x2 rx s es un divisor exacto del polinomio, las
races complejas pueden determinarse con la frmula cuadrtica. As, el mtodo se reduce a
determinar los valores de r y s que hacen que el factor cuadrtico sea un divisor exacto. En otras
palabras, se buscan los valores que hacen que el residuo sea igual a cero.
La inspeccin de la ecuacin (21) nos lleva a concluir que para que el residuo sea cero, b0 y b1
deben ser cero. Como es improbable que los valores iniciales para evaluar r y s conduzcan a este
resultado, debemos determinar una forma sistemtica para modificar los valores iniciales, de tal
forma que b0 y b1 tiendan a cero. Para lograrlo, el mtodo de Bairstow usa una estrategia similar a
la del mtodo de Newton-Raphson. Como tanto b0 como b1 son funciones de r y s, se pueden
expandir usando una serie de Taylor y se obtiene un sistema de ecuaciones de derivadas parciales
dnde las variables son incrementos de los factores de la aproximacin del factor cuadrtico, r y
s. Bairstow demostr que las derivadas parciales se obtienen por divisin sinttica de las b en
forma similar a como las b mismas fueron obtenidas:
cn=bn (23.1)
Curso Propedutico 33
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Las derivadas parciales se obtienen por la divisin sinttica de las b y se sustituyen en el sistema de
ecuaciones de derivadas parciales junto con las b para dar el siguiente sistema:
c 2 r + c 3 s= b 1 (24.1)
c 1 r + c 2 s= b 0 (24.2)
Estas ecuaciones se resuelven para r y s, las cuales, a su vez, se emplean para mejorar los
valores iniciales de r y s. En cada paso, se estima un error aproximado en r y s:
(25.1)
(25.2)
Cuando ambos errores estimados caen por debajo de un criterio especificado de terminacin es,
los valores de las races se determinan mediante:
r r 24 s
x= (26)
2
(27)
Curso Propedutico 34
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Curso Propedutico 35
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
c[+3]=+1.00000
c[+2]=+0.00000
c[+1]=+16.00000
Er: +0.00000
Es: +4.50000
FACTOR:
+1.00000x^2-2.00000x+2.00000
******ITERACION*****: +3
b[+3]=+1.00000
b[+2]=-2.00000
b[+1]=+0.00000
b[+0]=+0.00000
c[+3]=+1.00000
c[+2]=+0.00000
c[+1]=-2.00000
Er: +0.00000
Es: +0.00000
El Mtodo CONVERGE a+3iteraciones.
El factor cuadrtico es:
+1.00000x^2-2.00000x+2.00000
--------------------------------
Process exited after 36.83 seconds with return value 0
Presione una tecla para continuar . . .
Se usa el programa de ecuaciones de segundo grado para resolver dicho factor cuadrtico.
Curso Propedutico 36
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
La quinta y ltima raz se encuentra al dividir el polinomio de tercer grado de la ecuacin 15, entre
el factor encontrado y despejar usando la ecuacin 27.
Curso Propedutico 37
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Curso Propedutico 38
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Curso Propedutico 39
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Curso Propedutico 40
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
(28)
Donde las a son los coeficientes constantes y las b son los trminos independientes constantes. La
tcnica que se describe en este captulo se conoce como la eliminacin de Gauss, ya que implica
una combinacin de ecuaciones para eliminar las incgnitas. Aunque ste es uno de los mtodos
ms antiguos para resolver ecuaciones lineales simultneas, contina siendo uno de los algoritmos
de mayor importancia, y es la base para resolver ecuaciones lineales en muchos paquetes de
software populares.
La estrategia bsica consiste en multiplicar las ecuaciones por constantes, de tal forma que se
elimine una de las incgnitas cuando se combinen las dos ecuaciones. El resultado es una sola
ecuacin en la que se puede despejar la incgnita restante. Este valor se sustituye en cualquiera de
las ecuaciones originales para calcular la otra variable.
Esta tcnica bsica puede extenderse a sistemas grandes de ecuaciones desarrollando un esquema
sistemtico o algortmico para eliminar incgnitas y sustituir hacia atrs. Aunque tales tcnicas son
muy adecuadas para utilizarlas en computadoras, se requiere de algunas modificaciones para
obtener un algoritmo confiable. En particular, el programa debe evitar la divisin entre cero. Al
mtodo siguiente se le llama eliminacin gaussiana simple, ya que no evita este problema. En las
siguientes secciones se vern algunas caractersticas adicionales necesarias para obtener un
programa de cmputo efectivo.
Donde los valores de a ' n , m y b ' n se calculan como (para k=1,2,3,,N -1 [Tamao del
sistema]):
(29)
Curso Propedutico 41
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Donde el superndice prima indica que los elementos han cambiado sus valores originales. El
elemento a k, k se denomina el coeficiente o elemento pivote. En particular cuando dicho
elemento es cero hay una divisin entre cero y el mtodo falla, para eso en el Programa de
eliminacin Gaussiana Simple desarrollado en C++ se implementa un algoritmo que intercambia
filas hasta encontrar un elemento diferente de cero, si no se encuentra un valor diferente a cero el
programa indica que el sistema no tiene solucin o hay infinidad de soluciones. Ya que en dado
caso no habra matriz inversa del sistema o su determinante sera igual a cero, por lo cual se llega a
la misma conclusin de que no existe solucin o hay infinidad de ellas.
(30)
El siguiente paso para resolver el sistema es emplear sustitucin hacia atrs. Este resultado se
puede sustituir hacia atrs en la (n 1) sima ecuacin y despegar xn 1. El procedimiento, que se
repite para evaluar las x restantes, se representa mediante la frmula:
(31)
Curso Propedutico 42
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
A[+1][+3]=6
A[+2][+1]=4
A[+2][+2]=8
A[+2][+3]=-1
A[+3][+1]=-2
A[+3][+2]=3
A[+3][+3]=5
MATRIZ DE TERMINOS DEPENDIENTES
A[+1][+1]=+1.0000 A[+1][+2]=+2.0000 A[+1][+3]=+6.0000
A[+2][+1]=+4.0000 A[+2][+2]=+8.0000 A[+2][+3]=-1.0000
A[+3][+1]=-2.0000 A[+3][+2]=+3.0000 A[+3][+3]=+5.0000
Se intercambia la fila +2 con la fila +3
LA MATRIZ TRIANGULAR SUPERIOR ES:
u[+1][+1]=+1.0000 u[+1][+2]=+2.0000 u[+1][+3]=+6.0000
u[+2][+1]=+0.0000 u[+2][+2]=+7.0000 u[+2][+3]=+17.0000
u[+3][+1]=+0.0000 u[+3][+2]=+0.0000 u[+3][+3]=-25.0000
VECTOR INDEPENDIENTE Y:
y[+1]=+1.0000
y[+2]=+3.0000
y[+3]=-3.0000
Aplicando sustitucin hacia atrs
VECTOR SOLUCION:
x[+1]=+0.0057
x[+2]=+0.1371
x[+3]=+0.1200
--------------------------------
Process exited after 17.68 seconds with return value 0
Presione una tecla para continuar . . .
Curso Propedutico 43
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Curso Propedutico 44
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Curso Propedutico 45
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Gauss-Jordan
El mtodo de Gauss-Jordan es una variacin de la eliminacin de Gauss. La principal diferencia
consiste en que cuando una incgnita se elimina en el mtodo de Gauss-Jordan, sta es eliminada
de todas las otras ecuaciones, no slo de las subsecuentes. Adems, todos los renglones se
normalizan al dividirlos entre su elemento pivote. De esta forma, el paso de eliminacin genera
una matriz identidad en vez de una triangular (figura 2.2). En consecuencia, no es necesario usar la
sustitucin hacia atrs para obtener la solucin.
Curso Propedutico 46
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Se introduce el mismo sistema que se resolvi por Eliminacin Gaussiana Simple para el programa
desarrollado para Gauss-Jordan. El vector de trminos independientes se guarda en una misma
matriz donde se guardan los elementos de la matriz de trminos dependientes. La salida del
programa en C++ es:
Curso Propedutico 47
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Curso Propedutico 48
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
MATRIZ A
3 -1 -1
-1 1 0
-1 0 1
MATRIZ INVERSA
1 1 1
1 2 1
1 1 2
MATRIZ IDENTIDAD
1 2.38419e-007 2.38419e-007
0 1 0
-1.19209e-007 0 1
Presione una tecla para continuar . . .
Curso Propedutico 49
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Curso Propedutico 50
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Curso Propedutico 51
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
(32)
(33)
(34)
Curso Propedutico 52
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
(35)
El criterio de convergencia que se maneja para ste mtodo es el valor absoluto de la norma del
vector de soluciones de la iteracin anterior menos la norma del vector de soluciones de la
iteracin actual, entre la norma del vector de soluciones de la iteracin anterior, tanto para ste
mtodo cmo para el Newton-Raphson para solucin de n ecuaciones no lineales que se ver
enseguida. Para probar el mtodo de Gauss Iterativo implementado en C++, se usa el siguiente
sistema de ecuaciones.
(36)
Curso Propedutico 53
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
******Iteracin+1**********
y[+1]= +1.7500 y[+2]= +3.3750 y[+3]= +3.0000
******Iteracin+2**********
y[+1]= +1.8438 y[+2]= +3.8750 y[+3]= +3.0250
******Iteracin+3**********
y[+1]= +1.9625 y[+2]= +3.9250 y[+3]= +2.9625
******Iteracin+4**********
y[+1]= +1.9906 y[+2]= +3.9766 y[+3]= +3.0000
******Iteracin+5**********
y[+1]= +1.9941 y[+2]= +3.9953 y[+3]= +3.0009
******Iteracin+6**********
y[+1]= +1.9986 y[+2]= +3.9972 y[+3]= +2.9986
******Iteracin+7**********
y[+1]= +1.9996 y[+2]= +3.9991 y[+3]= +3.0000
******Iteracin+8**********
y[+1]= +1.9998 y[+2]= +3.9998 y[+3]= +3.0000
******Iteracin+9**********
y[+1]= +1.9999 y[+2]= +3.9999 y[+3]= +2.9999
******Iteracin+10**********
y[+1]= +2.0000 y[+2]= +4.0000 y[+3]= +3.0000
******Iteracin+11**********
y[+1]= +2.0000 y[+2]= +4.0000 y[+3]= +3.0000
******Iteracin+12**********
y[+1]= +2.0000 y[+2]= +4.0000 y[+3]= +3.0000
El mtodo converge a +12iteraciones
La solucin es:
x[+1]= +2.0000x[+2]= +4.0000x[+3]= +3.0000
--------------------------------
Process exited after 33.63 seconds with return value 0
Presione una tecla para continuar . . .
Curso Propedutico 54
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Curso Propedutico 55
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Curso Propedutico 56
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
(37)
Utilizando la serie de Taylor se puede hacer una aproximacin lineal para una funcin
en un incremento como:
(38)
(39)
Curso Propedutico 57
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
En forma compacta:
(40)
Donde J(x) es la matriz de primeras derivada o Jacobiano. Como se quiere encontrar el cero de la
funcin, la aproximacin lineal que se debe resolver es:
(41)
Donde las actualizaciones se hacen como:
(42)
(43)
El Jacobiano es:
(44 )
Y el arreglo de funciones
(45)
Curso Propedutico 58
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
******Iteracin+1**********
delta[+1]= -0.536029
delta[+2]= +0.656125
xk+1[+1]= +2.036029
xk+1[+2]= +2.843875
MATRIZ JACOBIANA DE LA +2 ITERACION ES:
Jacob[+1][+1]=+6.915933Jacob[+1][+2]=+2.036029
Jacob[+2][+1]=+24.262877Jacob[+2][+2]=+35.741270
VECTOR DE FUNCIONES DE LA +2 ITERACION ES:
F(x)[+1]=-0.064375
F(x)[+2]=-4.756208
******Iteracin+2**********
delta[+1]= +0.037328
delta[+2]= -0.158413
xk+1[+1]= +1.998701
xk+1[+2]= +3.002289
MATRIZ JACOBIANA DE LA +3 ITERACION ES:
Jacob[+1][+1]=+6.999690Jacob[+1][+2]=+1.998701
Jacob[+2][+1]=+27.041210Jacob[+2][+2]=+37.004056
VECTOR DE FUNCIONES DE LA +3 ITERACION ES:
F(x)[+1]=-0.004520
F(x)[+2]=+0.049571
******Iteracin+3**********
delta[+1]= -0.001299
delta[+2]= +0.002289
xk+1[+1]= +2.000000
xk+1[+2]= +2.999999
MATRIZ JACOBIANA DE LA +4 ITERACION ES:
Jacob[+1][+1]=+6.999999Jacob[+1][+2]=+2.000000
Jacob[+2][+1]=+26.999989Jacob[+2][+2]=+36.999993
VECTOR DE FUNCIONES DE LA +4 ITERACION ES:
Curso Propedutico 59
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
F(x)[+1]=-0.000001
F(x)[+2]=-0.000022
******Iteracin+4**********
delta[+1]= -0.000000
delta[+2]= -0.000001
xk+1[+1]= +2.000000
xk+1[+2]= +3.000000
El mtodo converge a +4iteraciones
La solucin es:
xk+1[+1]= +2.000000
xk+1[+2]= +3.000000
--------------------------------
Process exited after 13.5 seconds with return value 0
Presione una tecla para continuar . . .
Curso Propedutico 60
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Curso Propedutico 61
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Curso Propedutico 62
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Existen dos mtodos generales para el ajuste de curvas que se distinguen entre s al considerar la
cantidad de error asociado con los datos. Primero, si los datos exhiben un grado significativo de
error o ruido, la estrategia ser obtener una sola curva que represente la tendencia general de
los datos. Como cualquier dato individual puede ser incorrecto, no se busca intersecar todos los
puntos. En lugar de esto, se construye una curva que siga la tendencia de los puntos tomados
como un grupo. Un procedimiento de este tipo se llama regresin por mnimos cuadrados.
Segundo, si se sabe que los datos son muy precisos, el procedimiento bsico ser colocar una curva
o una serie de curvas que pasen por cada uno de los puntos en forma directa. Usualmente tales
datos provienen de tablas. Como ejemplos se tienen los valores de la densidad del agua o la
capacidad calorfica de los gases en funcin de la temperatura. La estimacin de valores entre
puntos discretos bien conocidos se llama interpolacin.
Curso Propedutico 63
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Mnimos Cuadrados
Para entender el procedimiento de mnimos cuadrados para el ajuste de datos con un polinomio
de grado n. Habra que suponer que se ajusta un polinomio de segundo grado o cuadrtico:
(47)
(48)
(49)
Donde todas las sumatorias van desde i = 1 hasta n. Observe que las tres ecuaciones anteriores son
lineales y tienen tres incgnitas: a0, a1 y a2. Los coeficientes de las incgnitas se evalan de
manera directa, a partir de los datos observados. En este caso, observamos que el problema de
determinar un polinomio de segundo grado por mnimos cuadrados es equivalente a resolver un
sistema de tres ecuaciones lineales simultneas. En la parte tres se estudiaron las tcnicas para
resolver tales ecuaciones.
Curso Propedutico 64
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
El caso bidimensional se extiende con facilidad a un polinomio de m-simo grado como sigue
El anlisis anterior se puede extender fcilmente a este caso ms general. As, se reconoce que la
determinacin de los coeficientes de un polinomio de m-simo grado es equivalente a resolver un
sistema de m + 1 ecuaciones lineales simultneas. En forma general, para ajustar a un polinomio
de grado n, se tiene:
(51)
Para el programa desarrollado en C++ Se ajusta a un polinomio de segundo orden los datos de la
siguiente tabla.
La solucin del sistema es a = [2:4785; 2:3592; 1:8607] y el ajuste da como resultado el polinomio
p(x) = 2.4785+2.3592x+1.8607x2.
Curso Propedutico 65
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Curso Propedutico 66
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Curso Propedutico 67
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
La forma ms simple de interpolacin consiste en unir dos puntos con una lnea recta. Dicha
tcnica, llamada interpolacin lineal, se ilustra de manera grfica en la figura 4.2. Utilizando
tringulos semejantes.
(52)
Reordenndose se tiene:
(53)
Que es una frmula de interpolacin lineal. La notacin f1(x) designa que ste es un polinomio de
interpolacin de primer grado. Observe que adems de representar la pendiente de la lnea que
une los puntos, el trmino [f(x1) f(x0)]/(x1 x0) es una aproximacin en diferencia dividida finita
a la primer derivada. En general, cuanto menor sea el intervalo entre los datos, mejor ser la
aproximacin. Esto se debe al hecho de que, conforme el intervalo disminuye, una funcin
continua estar mejor aproximada por una lnea recta.
Figura 4.2 .Ejemplos de interpolacin polinomial: a) de primer grado (lineal) que une dos puntos, b) de segundo grado
(cuadrtica o parablica) que une tres puntos y c) de tercer grado (cbica) que une cuatro puntos.
Curso Propedutico 68
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Si se tienen tres puntos como datos, stos pueden ajustarse en un polinomio de segundo grado
(tambin conocido como polinomio cuadrtico o parbola). Una forma particularmente
conveniente para ello es
Observe que aunque la ecuacin (53) parece diferir del polinomio general
f ( x )=a 0+a 1 x +a 2 x 2+ + anxn . las dos ecuaciones son equivalentes.
El anlisis anterior puede generalizarse para ajustar un polinomio de n-simo grado a n+ 1 datos. El
polinomio de n-simo grado es
Como se hizo antes con las interpolaciones lineales y cuadrticas, los puntos asociados con datos
se utilizan para evaluar los coeficientes b0, b1,..., bn. Para un polinomio de n-simo grado se
requieren n + 1 puntos: [x0, f(x0)], [x1, f(x1)],..., [xn, f(xn)]. Se usan estos datos y las siguientes
ecuaciones para evaluar los coeficientes:
b 0=f (x 0) (56)
b 1=f [ x 1, x 0]
b 2=f [ x 2, x 1, x 0]
bn=f [ xn , x n 1 , , x 1, x 0 ]
Donde las evaluaciones de la funcin colocadas entre parntesis son diferencias divididas finitas.
Por ejemplo, la primera diferencia dividida finita en forma general se representa como:
(57)
La segunda diferencia dividida finita, que representa la diferencia de las dos primeras diferencias
divididas, se expresa en forma general como:
(58)
Curso Propedutico 69
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
(59)
Estas diferencias sirven para evaluar los coeficientes en las ecuaciones (56), los cuales se
sustituirn en la ecuacin (55) para obtener el polinomio de interpolacin
(60)
Figura 4.3 Representacin grfica de la naturaleza recursiva de las diferencias divididas finitas.
Curso Propedutico 70
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Y[4]= 27.20
Y[5]= 40.90
Y[6]= 61.10
MATRIZ DD
Valores de B
b[1]= 2.1
b[2]= 5.6
b[3]= 0.15
b[4]= 1.23333
b[5]= -0.625
b[6]= 0.241667
MATRIZ Polinomios
1 0 0 0 0 0
1 0 0 0 0 0
1 -1 0 0 0 0
1 -3 2 0 0 0
1 -6 11 -6 0 0
1 -10 35 -50 24 0
Curso Propedutico 71
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Curso Propedutico 72
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Curso Propedutico 73
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Figura 4.4 Programa de Interpolacin de Newton para un polinomio de grado n-1 puntos dados
Curso Propedutico 74
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
(61)
Donde
(62)
(63)
(64)
Para el programa en C++. Se comprueban los mismos puntos que se emplearon para encontrar el
polinomio de diferencias divididas de Newton, para el polinomio de interpolacin de Lagrange.
ste tiene que ser exactamente el mismo.
Curso Propedutico 75
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
fx(0)= 2.10
fx(1)= 7.70
fx(2)= 13.60
fx(3)= 27.20
fx(4)= 40.90
fx(5)= 61.10
/n El polinomio de Lagrange :
Curso Propedutico 76
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Curso Propedutico 77
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Figura 4.5 Programa de Interpolacin de Lagrange para un polinomio de grado n-1 puntos dados
Curso Propedutico 78
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
(65)
Y sea
(66)
Esta frmula se aplica paso a paso para calcular un valor posterior y, por lo tanto, para trazar la
trayectoria de la solucin. Todos los mtodos de un paso que se expresen de esta forma general,
tan slo van a diferir en la manera en la que se estima la pendiente. En otras palabras, se toma la
pendiente al inicio del intervalo como una aproximacin de la pendiente promedio sobre todo el
intervalo. Tal procedimiento, llamado mtodo de Euler. Despus se revisa otro mtodo de un paso
que emplean otras formas de estimar la pendiente que dan como resultado predicciones ms
exactas. Todas estas tcnicas en general se conocen como mtodos de Runge-Kutta.
Curso Propedutico 79
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Mtodo de Euler
La primera derivada ofrece una estimacin directa de la pendiente en xi
fp(x,y)(exp(-x)*2*cos(2*x)-exp(-x)*sin(2*x))
Como el programa proporciona tambin los puntos de la solucin original, se define tambin
f(x,y)(sin(2*x)*exp(-x))
En las directivas #define, la cul es la solucin a dicha EDO. El programa muestra en forma tabulada
los resultados paso a paso.
Curso Propedutico 80
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
+3.000000+0.298797-0.013911+0.109519
+3.300000+0.331652+0.011491+0.058605
+3.600000+0.349234+0.021686+0.011559
+3.900000+0.352701+0.020212-0.018028
+4.200000+0.347293+0.012815-0.028389
+4.500000+0.338776+0.004578-0.024822
+4.800000+0.331330-0.001435-0.014773
+5.100000+0.326898-0.004267-0.004442
+5.400000+0.325565-0.004430+0.002675
+5.700000+0.326368-0.003076+0.005709
+6.000000+0.328080-0.001330+0.005513
+6.300000+0.329735+0.000062+0.003609
--------------------------------
Process exited after 64.68 seconds with return value 0
Presione una tecla para continuar . . .
Curso Propedutico 81
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
(69)
Donde
(70)
Observe que con las EDO que estn en funcin slo de x, el mtodo RK clsico de cuarto orden es
similar a la regla de Simpson 1/3. Adems, el mtodo RK de cuarto orden tiene similitud con el
procedimiento de Heun en cuanto a que se usan mltiples estimaciones de la pendiente para
Curso Propedutico 82
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
obtener una mejor pendiente promedio en el intervalo. Como se muestra en la figura 5.2, cada
una de las k representa una pendiente.
Figura 5.3. Representacin grfica de las pendientes estimadas empleadas en el mtodo RK de cuarto Orden
Para RK de 4to orden, se usa la misma funcin que se us para Euler, con el mismo paso y
condiciones iniciales.
Curso Propedutico 83
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
+5.700000-0.003144-0.003076+0.005709+0.005924+0.005924+0.005513+0.001746
+6.000000-0.001398-0.001330+0.005513+0.004678+0.004678+0.003609+0.001392
+6.300000-0.000006+0.000062+0.003609+0.002469+0.002469+0.001387+0.000744
--------------------------------
Process exited after 47.91 seconds with return value 0
Presione una tecla para continuar . . .
Curso Propedutico 84
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Se modific el cdigo original para aplicar el mtodo por separado, para ejecutar un script
(exp_sin_b_2.m) por separado llamando a las funciones originales, en ste caso el mtodo de
Euler, cmo su funcin es la primera en ser llamada, es en el que se grafica la funcin original, ese
cdigo se omite en las funciones de los dems mtodos. Los archivos .m por separado, estn
programados para proporcionar la grfica del mtodo en comparacin con la funcin original, que
se introduzca su derivada, cada funcin recibe dicha funcin y calcula su primitiva para ser
comparada; adems se proporcionan los valores en forma tabulada.
Nota: En los archivos .m originales, hay vario cdigo en comentarios, la mayora es significativo y
sin gran relevancia, ya que se fue perfeccionando poco a poco hasta corregir errores de
programacin y se omite en ste documento. Hay otro cdigo que se puede usar para
proporcionar valores que se omiten en las tabulaciones. Al final de ste texto, se agregan los
cdigos de las funciones utilizadas.
Curso Propedutico 85
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
bx
()
bcos ( bx )sin
f ' ( x )=ex
Para b=2
syms x f;
f='exp(-x)*(2*cos(2*x)-sin(2*x))';
ti=0;
tf=2*pi;
Xi=0;
Yi=0;
h=0.3;
Euler_Method(f,ti,tf,Xi,Yi,h);
Heun_Method(f,ti,tf,Xi,Yi,h);
Mid_Method(f,ti,tf,Xi,Yi,h);
Runge_Kutta2_Ralston(f,ti,tf,Xi,Yi,h);
Runge_Kutta3(f,ti,tf,Xi,Yi,h);
Runge_Kutta4(f,ti,tf,Xi,Yi,h);
Runge_Kutta5_Butcher(f,ti,tf,Xi,Yi,h);
title('Comparacin de los mtodos de Runge Kutta con la funcin
original');
xlabel('Tiempo t (seg)');
ylabel('f(t)');
legend('Euler','Solucin verdadera','Heun','Punto Medio','Ralston','Runge
Kutta 3', 'Runge Kutta 4','Runge Kutta 5 (Butcher)');
Curso Propedutico 86
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
0.4
0.2
-0.2
0 1 2 3 4 5 6
Tiempo t (seg)
Figura 5.5 Comparacin grafica de los mtodos de Runge Kutta, para la EDO.
2x
()
2cos ( bx ) sin
f ' ( x )=e x
primitiva =
sin(2*x)*exp(-x)
B =
Curso Propedutico 87
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
0 0 0 0 0 0
1.0000 0.3000 0.4183 0.6000 2.0000 0.6000
2.0000 0.6000 0.5115 0.8414 0.8045 0.8414
3.0000 0.9000 0.3959 0.8072 -0.1138 0.8072
4.0000 1.2000 0.2034 0.6330 -0.5807 0.6330
5.0000 1.5000 0.0315 0.4387 -0.6476 0.4387
6.0000 1.8000 -0.0731 0.2967 -0.4733 0.2967
7.0000 2.1000 -0.1067 0.2298 -0.2233 0.2298
8.0000 2.4000 -0.0904 0.2257 -0.0133 0.2257
9.0000 2.7000 -0.0519 0.2576 0.1062 0.2576
10.0000 3.0000 -0.0139 0.2988 0.1372 0.2988
11.0000 3.3000 0.0115 0.3317 0.1095 0.3317
12.0000 3.6000 0.0217 0.3492 0.0586 0.3492
13.0000 3.9000 0.0202 0.3527 0.0116 0.3527
14.0000 4.2000 0.0128 0.3473 -0.0180 0.3473
15.0000 4.5000 0.0046 0.3388 -0.0284 0.3388
16.0000 4.8000 -0.0014 0.3313 -0.0248 0.3313
17.0000 5.1000 -0.0043 0.3269 -0.0148 0.3269
18.0000 5.4000 -0.0044 0.3256 -0.0044 0.3256
19.0000 5.7000 -0.0031 0.3264 0.0027 0.3264
20.0000 6.0000 -0.0013 0.3281 0.0057 0.3281
x Y_Verdadero Y_Heun
B =
0 0 0
0.3000 0.4183 0.4207
0.6000 0.5115 0.5243
0.9000 0.3959 0.4201
1.2000 0.2034 0.2359
1.5000 0.0315 0.0677
1.8000 -0.0731 -0.0368
2.1000 -0.1067 -0.0722
2.4000 -0.0904 -0.0583
2.7000 -0.0519 -0.0218
3.0000 -0.0139 0.0152
3.3000 0.0115 0.0404
3.6000 0.0217 0.0510
3.9000 0.0202 0.0500
4.2000 0.0128 0.0430
4.5000 0.0046 0.0351
4.8000 -0.0014 0.0291
5.1000 -0.0043 0.0262
5.4000 -0.0044 0.0260
5.7000 -0.0031 0.0272
6.0000 -0.0013 0.0289
x Y_Verdadero Y_Punto_Medio
B =
0 0 0
0.3000 0.4183 0.4171
0.6000 0.5115 0.5050
0.9000 0.3959 0.3837
1.2000 0.2034 0.1871
Curso Propedutico 88
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
x Y_Verdadero Y_Runge_Kutta2_Ralston
B =
0 0 0
0.3000 0.4183 0.4181
0.6000 0.5115 0.5137
0.9000 0.3959 0.4011
1.2000 0.2034 0.2109
1.5000 0.0315 0.0402
1.8000 -0.0731 -0.0642
2.1000 -0.1067 -0.0982
2.4000 -0.0904 -0.0825
2.7000 -0.0519 -0.0446
3.0000 -0.0139 -0.0068
3.3000 0.0115 0.0185
3.6000 0.0217 0.0287
3.9000 0.0202 0.0274
4.2000 0.0128 0.0201
4.5000 0.0046 0.0119
4.8000 -0.0014 0.0059
5.1000 -0.0043 0.0031
5.4000 -0.0044 0.0029
5.7000 -0.0031 0.0042
6.0000 -0.0013 0.0060
x Y_Verdadero Y_Runge_Kutta3
B =
0 0 0
0.3000 0.4183 0.4183
0.6000 0.5115 0.5114
0.9000 0.3959 0.3959
1.2000 0.2034 0.2034
1.5000 0.0315 0.0314
1.8000 -0.0731 -0.0732
2.1000 -0.1067 -0.1068
Curso Propedutico 89
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
x Y_Verdadero Y_Runge_Kutta4
B =
0 0 0
0.3000 0.4183 0.4183
0.6000 0.5115 0.5114
0.9000 0.3959 0.3959
1.2000 0.2034 0.2034
1.5000 0.0315 0.0314
1.8000 -0.0731 -0.0732
2.1000 -0.1067 -0.1068
2.4000 -0.0904 -0.0904
2.7000 -0.0519 -0.0520
3.0000 -0.0139 -0.0140
3.3000 0.0115 0.0114
3.6000 0.0217 0.0216
3.9000 0.0202 0.0201
4.2000 0.0128 0.0127
4.5000 0.0046 0.0045
4.8000 -0.0014 -0.0015
5.1000 -0.0043 -0.0043
5.4000 -0.0044 -0.0045
5.7000 -0.0031 -0.0031
6.0000 -0.0013 -0.0014
x Y_Verdadero Y_Runge_Kutta5_Butcher
B =
0 0 0
0.3000 0.4183 0.4183
0.6000 0.5115 0.5115
0.9000 0.3959 0.3959
1.2000 0.2034 0.2034
1.5000 0.0315 0.0315
1.8000 -0.0731 -0.0731
2.1000 -0.1067 -0.1067
2.4000 -0.0904 -0.0904
Curso Propedutico 90
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
function Euler_Method(f,ti,tf,Xi,Yi,h)
n=(tf-ti)/h;
x1=zeros(n,1);
y1=zeros(n,1);
x1=[ti:h:tf];
y1(1)=Yi;
y2(1)=Yi;
A(1)=0;
for k=1:n
x=x1(k);
y=y1(k);
fp(k+1)=eval(f);
y2(k+1)=y1(k)+(fp(k+1))*h;
y1(k+1)=y2(k+1);
A(k+1,1)=k;
end
plot(x1,y1,'-r')
primitiva=int(sym(f))
Q=length(x1);
for u=1:Q
x=x1(u);
y3(u)=eval(primitiva);
end
hold on
plot(x1,y3,'-b')
disp(' i x Y_Verdadero Y_Euler Pendiente
Y+1_Euler')
B=[A, x1', y3', y1, fp', y2']
end
function Heun_Method(f,ti,tf,Xi,Yi,h)
n=(tf-ti)/h;
Curso Propedutico 91
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
x1=zeros(n,1);
y1=zeros(n,1);
x1=[ti:h:tf];
y1(1)=Yi;
y2(1)=Yi;
A(1)=0;
for k=1:n
x=x1(k);
y=y1(k);
fp(k+1)=eval(f);
y2(k+1)=y1(k)+(fp(k+1))*h;
y=y2(k+1);
x=x1(k+1);
fp2(k+1)=eval(f);
feval(k+1)=(fp(k+1)+fp2(k+1))/2;
y1(k+1)=y1(k)+feval(k+1)*h;
A(k+1,1)=k;
end
plot(x1,y1,'-g')
primitiva=int(sym(f));
Q=length(x1);
for u=1:Q
x=x1(u);
y4(u)=eval(primitiva);
end
disp(' x Y_Verdadero Y_Heun')
B=[x1', y4', y1]
end
function Mid_Method(f,ti,tf,Xi,Yi,h)
n=(tf-ti)/h;
x1=zeros(n,1);
y1=zeros(n,1);
x1=[ti:h:tf];
y1(1)=Yi;
y2(1)=Yi;
A(1)=0;
for k=1:n
x=x1(k);
y=y1(k);
fp(k+1)=eval(f);
y2(k+1)=y1(k)+((fp(k+1))*h)/2;
y=y2(k+1);
x=x1(k)+h/2;
fp2(k+1)=eval(f);
y1(k+1)=y1(k)+(fp2(k+1))*h;
A(k+1,1)=k;
end
plot(x1,y1,'-m')
primitiva=int(sym(f));
Q=length(x1);
Curso Propedutico 92
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
for u=1:Q
x=x1(u);
y4(u)=eval(primitiva);
end
disp(' x Y_Verdadero Y_Punto_Medio')
B=[x1', y4', y1]
end
function Runge_Kutta2_Ralston(f,ti,tf,Xi,Yi,h)
n=(tf-ti)/h;
x1=zeros(n,1);
y1=zeros(n,1);
x1=[ti:h:tf];
y1(1)=Yi;
y2(1)=Yi;
A(1)=0;
for k=1:n
x=x1(k);
y=y1(k);
k1(k+1)=eval(f);
y2(k+1)=y1(k)+((k1(k+1))*3*h)/4;
y=y2(k+1);
x=x1(k)+3*h/4;
k2(k+1)=eval(f);
y1(k+1)=y1(k)+((1/3)*k1(k+1)+(2/3)*(k2(k+1)))*h;
A(k+1,1)=k;
end
plot(x1,y1,'-c')
primitiva=int(sym(f));
Q=length(x1);
for u=1:Q
x=x1(u);
y4(u)=eval(primitiva);
end
disp(' x Y_Verdadero Y_Runge_Kutta2_Ralston')
B=[x1', y4', y1]
end
function Runge_Kutta3(f,ti,tf,Xi,Yi,h)
n=(tf-ti)/h;
x1=zeros(n,1);
y1=zeros(n,1);
x1=[ti:h:tf]
y1(1)=Yi;
y2(1)=Yi;
A(1)=0;
for k=1:n
x=x1(k);
y=y1(k);
k1(k+1)=eval(f);
y2(k+1)=y1(k)+((k1(k+1))*h)/2;
Curso Propedutico 93
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
y=y2(k+1);
x=x1(k)+h/2;
k2(k+1)=eval(f);
y3(k+1)=y1(k)-h*k1(k+1)+2*h*k2(k+1);
y=y3(k+1);
x=x1(k)+h;
k3(k+1)=eval(f);
y1(k+1)=y1(k)+(1/6)*(k1(k+1)+4*(k2(k+1))+(k3(k+1)))*h;
A(k+1,1)=k;
end
plot(x1,y1,'ok')
primitiva=int(sym(f));
Q=length(x1);
for u=1:Q
x=x1(u);
y4(u)=eval(primitiva);
end
disp(' x Y_Verdadero Y_Runge_Kutta3')
B=[x1', y4', y1]
end
function Runge_Kutta4(f,ti,tf,Xi,Yi,h)
n=(tf-ti)/h;
x1=zeros(n,1);
y1=zeros(n,1);
x1=[ti:h:tf]
y1(1)=Yi;
y2(1)=Yi;
A(1)=0;
for k=1:n
x=x1(k);
y=y1(k);
k1(k+1)=eval(f);
y2(k+1)=y1(k)+((k1(k+1))*h)/2;
y=y2(k+1);
x=x1(k)+h/2;
k2(k+1)=eval(f);
y3(k+1)=y1(k)+((k2(k+1))*h)/2;
y=y3(k+1);
x=x1(k)+h/2;
k3(k+1)=eval(f);
y4(k+1)=y1(k)+(k3(k+1))*h;
y=y4(k+1);
x=x1(k)+h;
k4(k+1)=eval(f);
y1(k+1)=y1(k)+(1/6)*(k1(k+1)+2*(k2(k+1))+2*(k3(k+1))+k4(k+1))*h;
A(k+1,1)=k;
end
plot(x1,y1,'*y')
primitiva=int(sym(f))
Curso Propedutico 94
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
Q=length(x1);
for u=1:Q
x=x1(u);
y4(u)=eval(primitiva);
end
disp(' x Y_Verdadero Y_Runge_Kutta4')
B=[x1', y4', y1]
end
function Runge_Kutta5_Butcher(f,ti,tf,Xi,Yi,h)
n=(tf-ti)/h;
x1=zeros(n,1);
y1=zeros(n,1);
x1=[ti:h:tf]
y1(1)=Yi;
y2(1)=Yi;
A(1)=0;
for k=1:n
x=x1(k);
y=y1(k);
k1(k+1)=eval(f);
y2(k+1)=y1(k)+((k1(k+1))*h)/4;
y=y2(k+1);
x=x1(k)+h/4;
k2(k+1)=eval(f);
y3(k+1)=y1(k)+((k1(k+1))*h)/8+((k2(k+1))*h)/8;
y=y3(k+1);
x=x1(k)+h/4;
k3(k+1)=eval(f);
y4(k+1)=y1(k)-((k2(k+1))*h)/2+(k3(k+1))*h;
y=y4(k+1);
x=x1(k)+h/2;
k4(k+1)=eval(f);
y5(k+1)=y1(k)+(3/16)*(k1(k+1))*h+(9/16)*h*(k4(k+1));
y=y5(k+1);
x=x1(k)+(3/4)*h;
k5(k+1)=eval(f);
y6(k+1)=y1(k)-(3/7)*(k1(k+1))*h+(2/7)*(k2(k+1))*h+(12/7)*(k3(k+1))*h-
(12/7)*(k4(k+1))*h+(8/7)*(k5(k+1))*h;
y=y6(k+1);
x=x1(k)+h;
k6(k+1)=eval(f);
y1(k+1)=y1(k)+(1/90)*(7*(k1(k+1))+32*(k3(k+1))+12*(k4(k+1))
+32*(k5(k+1))+7*(k6(k+1)))*h;
A(k+1,1)=k;
end
plot(x1,y1,'xk')
primitiva=int(sym(f))
Q=length(x1);
for u=1:Q
x=x1(u);
y4(u)=eval(primitiva);
Curso Propedutico 95
Escuela Superior de Ingeniera Mecnica y Elctrica. Programacin y Mtodos Numricos.
end
disp(' x Y_Verdadero Y_Runge_Kutta5_Butcher')
B=[x1', y4', y1]
end
Curso Propedutico 96