INFORME FINAL
PROYECTO DE INVESTIGACIÓN
Pág.
1. ÍNDICE .............................................................................. 1
2. 'RESUMEN .............................................................................. 2
3. INTRODUCCIÓN .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . .. . .. . .. . . . . . . . . . . . .. . . . .. . 3
6. RESULTADOS ............................................................................. 9
6.1 Capítulo 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 9
6.2 Capítulo 11 .............................................................................. 56
6.3 Capítulo 111 ............................•................................................ 88
6.4 Capítulo IV ........................................................................... 108
6.5 Capítulo V .............................................................................. 138
6.6 Capítulo VI ............................................................................. 167
6. 7 Capítulo VIl ............................................................................ 176
6.8 Capítulo VIII ............................................................................ 198
7. DISCUSIÓN .............................................................................. 232
8. REFERENCIALES ......................................................................234
9. APÉNDICE ...............................................................................235
A. Codificación Runge-Kutta 2do. Orden para EDO 2do. Orden .............. 235
B. Codificación Runge-Kutta 3er. Orden para EDO 2do. Orden .............. .236
10. ANEXOS ..................... .: . ......................................................... 237
1
2. RESUMEN
Este texto toma como base los fundamentos que rigen los métodos numéricos;
mostrando en detalle los algoritmos y codificaciones para la solución de problemas
físicos de nivel universitario y de investigación. Se han desarrollado las diferentes
fórmulas numéricas en codificaciones usando lenguaje Fortran, permitiendo
generar en el estudiante un conocimiento activo de los fundamentos que rigen los
métodos tales como el de solución de ecuaciones no lineales, sistemas de
ecuaciones, interpolación, ajuste de curvas, integración, derivación numérica y
solución de ecuaciones diferenciales ordinarias y parciales. Se presentan
problemas físicos resueltos, logrando que este texto se convierta en un
instrumento para facilitar el proceso de enseñanza-aprendizaje de acuerdo con los
objetivos y contenidos del silabo oficial de la asignatura de Métodos Numéricos de
la Física, superando la situación actual en la que la gran mayoría de textos que
presentan métodos numéricos están dirigidos a problemas específicos de
ingeniería y dejan de lado aplicaciones importantes para la física.
2
3. INTRODUCCIÓN
El Autor.
3
4. MARCO TEÓRICO
4
En el Capítulo IV, se aborda el problema de ajuste y aproximación de
curvas; en física los datos a menudo son valorés discretos a lo largo de un
· continuo, es por ello que, se describen técnicas para el ajuste de curvas de
tales datos para obtener de igual . modo estimaciones intermedias, pero
podremos además conseguir versidhes simplificadas de funciones en un
numero de valores discretos a lo largo del dominio de interés, pudiendo luego
derivar una función más simple para ajustar esos valores.
En el Capítulo V, se tratan los métodos de mayor eficiencia y simplicidad
para la construcción de nuevos puntos partiendo del conocimiento de un
conjunto discreto de puntos. En física, ingeniería y otras ciencias es frecuente
disponer de un cierto número de puntos obtenidos por muestreo o a partir de
un experimento y pretender construir una función que los ajuste; ahí radica su
importancia.
En el Capítulo VI, se analizan las formulas numéricas para aproximación
de la derivada, que se utilizan para evaluar las derivadas por ~edio de valores
dados en los puntos de una retícula. En el trabajo científico son importantes ya
que facilitan la solución numérica de ecuaciones diferenciales ordinarias y
parciales.
En el Capítulo VIl, se tratan las formulas numéricas de integración, las
cuales son construidas tomando como base los polinomios de interpolación de
Newton hacia adelante. En ciencias e ingeniería se presenta con frecuencia
este tipo de problemas dada la necesidad de integrar una función que sería, en
general, de una de las tres formas siguientes:
... Una función simple y continua tal como un polinomio, una función
exponencial o una función trigonométrica.
• Una función complicada y continua que es difícil o imposible de integrar
directamente.
• Una función tabuJada en ooñde ios valores de x y f(x) se ctsn en un
conjunto de pUQtos.. dis.cr~os, CQniOo es el caso a menudo, de datos
experimentale~
5
En el Capítulo VIII, se tratan las formulas numéricas que permiten
aproximar la solución de una ecuación diferencial ordinaria. Muchas de las
leyes generales de la naturaleza se expresan en el lenguaje de las ecuaciones
'diferenciales; abundan también las aplicaciones en ingeniería, economía¡
matemáticas y en muchos otros campos de la ciencia aplicada. En este
capítulo se desarrolla el tratamiento computacional de las EDO, con los
métodOs de Euler, los cuales en particular son adecuados para uriN
programación rápida debido a su sencillez; sin embargo, a pesar de su gran
estabilidad, requiere un tamaño de paso muy pequeño para alcanzar una
precisión razonabl~. también se desarrollan los métodos Runge-Kutta de
segundo, tercer y cuarto orden.
6
5. MATERIALES Y MÉTODOS
7
La mayoría actualmente se encuentran en la Facultad de Ciencias
Naturales y Matemática de la Universidad Nacional del Callao, En estos textos
se presentan los conceptos, leyes y principios de los métodos de solución
sistemas de ecuaciones, integración, derivación, solución de ecuaciones
diferenciales, entre otros.
8
S. RESULTADOS
6.1 Capitulo 1
9
Por estas razones, el FORTRAN es considerado ser el primer lenguaje de
programación ampliamente usado soportado a través de una variedad de arquitecturas
de computador.
La primera versión FORTRAN 77 tenía una serie de desventajas. Entre ellas
una estructura muy rígida adaptada al uso de tarjetas perforadas ("forma fija"}, que
requería que ciertas columnas tuvieran usos específicos. Además, no permitía un uso
dinámico de la memoria y no permitía realizar operaciones entre arreglos de números.
Para mejorar esta situación, en 1990 se presento un tercer estándar ANSI conocido
como FORTRAN 90, que contenía muchas nuevas características y permitía una
programación mas estructurada. Una serie de cambios menores se presentaron en
1995 (FORTRAN 95}, y actualmente se trabaja en un nuevo estándar ANSI
(FORTRAN 2003). (Aicubierre, M., 2005).
Un lenguaje orientador de proceso tal como Fortran, se llama a veces lenguaje
algorítmico. Nos permite expresar un algoritmo matemático en una forma más
adecuada para la comunicación con los computadores. Un procedimiento Fortran que
instrumenta un algoritmo matemático especifica un procedimiento iterativo para hallar
la solución de una ecuación, el programa Fortran debe especificar (1) la exactitud que
s_~ requiere, (2) el número de iteraciones que se van a realizar y (3) que hacer en caso
de no convergencia. (Parte de la información fue recuperada de:
http://es.wikipedia.org/wiki/Fortran, en marzo del2014).
10
1.2 Características y mejoras de Fortran 90
11
Es conveniente que un tipo INTEGER(4) no tenga más de 9 dígitos. Las
constantes enteras por lo general no se deben usar en operaciones aritméticas.
(Brian, 1994).
Las constantes o datos reales pueden ser con exponente y sin exponente, el
rango de una constante real depende también del tipo declarado, existen dos tipos:
REAL(4), REAL(8) ó OOUBLE PRECISION, también se pueden usar las
representaciones alternativas: REAL *4, REAL*8. El numero de bytes que ocupa
REAL(4) es 4 y su rango va desde: -3.4028235E+38 hasta -1.1754944E-38 para los
números negativos; para los números positivos el rango va desde: +1. 754944E-38
hasta +3.4028235E+38. En el caso del tipo REAL(8) ó OOUBLE PRECISION el
numero de bytes qué se usan son 8, el rango para los números negativos va desde: -
1. 7976931348623160+308 hasta
Las constantes o datos carácter los datos de tipo carácter pueden ser almacenados
y utilizados siempre y cuando se haya definido previamente el número de caracteres
con la declaración CHARACTER(N), donde N indica el número a almacenar, por cada
carácter se ocupa un byte de memoria
Los datos y constantes de tipo lógico pueden contener dos valores solamente
verdadero o falso, el numero de bytes de memoria ocupada por un dato lógico
depende de cómo se defina así LOGICAL(1) ocupa un byte (O para falso o 1 para
verdadero), existen además el tipo LOGICAL(2) y LOGICAL(4).
12
Si no se especifica el tipo de variable al inicio de un programa, Fortran asume por
defecto el tipo de dato que contendrá, así:
Para todas las variables que empiecen con las letras (1, J, K, L, M y N}, se asume
que contienen valores enteros del tipo INTEGER(4) y para las que empiecen con las
letras (A - H y O - Z), se asumirá que contienen valores reales, por defecto del tipo
REAL(4). Se puede definir al inicio de un programa el tipo de datos que deseamos .
que contenga una variable, de modo que una variable puede ser real, entero,
compleja, carácter o lógica.
tales como PARAMETER que señala que el dato es un~ ~onstante y su valor
no puede ser cambiado durante la ejecución del program~. EXTERNAL que
declara el nombre de una función externa a una s_ubrutina o INTRINSIC la que
declara una función intrínseca a una función o subfij~na. (Brian, 19~4).
13
Cuando es necesario efectuar una operación que contenga consecutivamente dos
operaciones a efectuar con operadores de prioridad similar es necesario usar
paréntesis para indicar que operación se debe realizar primero, veamos un ejemplo:
abe= a **(b**c)
a
- = a/(b*c)
b.c
Como vemos el uso de paréntesis se hace necesario pues de lo contrario el
computador ejecutara operaciones en un orden que no corresponde al que deseamos.
Cabe mencionar que cualquier tipo de ecuación u operación aritmética deberá ser
ingresada usando cuidadosamente los operadores, esto quiere decir que no pod~mos
• Operadores Relaciónales. Son aquellos que nos definen una relación entre
dos valores numéricos o dos datos del tipo carácter, no es posible comparar un
dato numérico con un dato carácter o lógico, el resultado de la comparación es
del tipo lógico (verdadero o falso) y es posible usar otro operador numérico en
las cantidades a comparar, los operadores relacionales son:
14
• Operadores Lógicos. Un OP,erador lógico solo puede ser usado con
constantes y variables definidas como lógicas e incluso funciones del tipo
lógico, estos operadores tienen un orden de precedencia es decir una
secuencia de ejecución, los operadores del tipo lógico son:
Fortran 90 permite también como argumentos números enteros, cabe mencionar que
al encontrarse dos operadores lógicos de igual precedencia, el orden de ejecución va
de izquierda a derecha.
...
1.5 Procedimientos y fUhciones
15
1.5.1 Especificación de variables
Sintaxis
nombre de variable define la variable a la cual se van a introducir los valores (valor1,
valor2), que figuran entre barras diagonales, en el caso de que una variable este
dimensionada por ejemplo: sea la variable nombr de dimensión (3) (definido
previamente), deberemos asignar 3 valores, es decir /valor1, valor2, valor3/; ingresado
así la variable nombr ya contiene los tres valores definidos. Podemos también
ingresar valores de tipo carácter a las variables, siempre que hayan sido preparadas
para recibir este tipo de datos; es posible también ingresar valores a variables de tipo
complejo, por ejemplo: sea la variable compleja var1 , para ingresar las partes real e
imaginaria hacemos DATA var1/ (real, imaginaria)/, este tipo de asignación es muy útil,
sobretodo en el caso de trabajo con matrices complejas.
DIMENSION Define la variable como del tipo cadena, es decir podemos usar
esta expresión para definir matrices o arreglos dimensionados.
Sintax~s
tipo)]
16
CHARACTER Prepara variables para almacenar caracteres, es decir permite
guardar valores como letras ó números en formato caracter.
-\.~i
Sin~~is
'
CHARACTER (IÓngitud), [nombre de variable]
Cabe mencionar que como en todas las declaraciones de variables, esta expresión.
debe colocarse en el inicio del programa antes de cualquier instrucción ejecutable,
además no puede especificarse más de una vez a la misma variable.
Sintaxis
COMPLEX((KIND=tipo)),atributo::[nornbres de
variaBles]
17
La opción KIND tiene la misma función; atributo se refiere al tipo de declaración
especial asignada para la variable (DIMENSION, EXTERNAL, INTRINSIC,
PARAMETER, PRIVATE, PUBLIC, SAVE o TARGET); como en todas las
declaraciones de tipo de variable esta debe figurar en el inicio de programa antes de
las instrucciones ejecutables.
tipo entero.
Sintaxis
tipo, consiste en un numero real (1 ,2 y 4), el cual definirá el tipo de dato a ingresar, así
INTEGER(1) va desde: -128 hasta +127, en el caso de INTEGER(2) va desde: -
32,768 hasta 32,767, y para INTEGER(4) desde: -2,147'483,648 hasta 2,147'483,647,
por defecto, es decir si omitimos colocar el tipo se asumirá que es del tipo 4.
Sintaxis
tipo indicará la longitud del número real almacenadq, es decir precisión doble (tipo
8) ó precisión simple (tipo 4). Los atributos se especifican separados por comas y
definen al conjunto de variables (var) como EXTERNAL, INTRINSIC, PRIVATE,
PUBLIC, etc. Los nombres de variables pueden hacer referencia incluso a cadenas
ó variables dimensionadas, funciones ó subprogramas.
18
1.5.2 Procedimientos de entrada y salida de datos
Sintaxis
Sintaxis
FORMAT, el estamento adicional ERR, requiere número de línea (ni) para dirigir la
\
Sintaxis
19
unidad es un número entero que caracteriza al archivo ó medio para lectura ó
escritura, nomarch especifica el nombre y ruta del archivo ó medio para lectura ó
escritura, la indicación stat se refiere a una característica propia del medio a emplear
estas pueden ser: OLD (unidad ya existente), NEW (crear una unidad nueva),
REPLACE (reemplaza el archivo existente con otro del mismo nombre), SCRATCH
(crea un archivo temporal y lo elimina cuando la unidad se cierra).
Sintaxis
unidad es un número entero que especifica la unidad a cerrar; stat puede tener dos
valores KEEP (mantener el archivo en memoria) ó DELETE (eliminar el archivo una
vez cerrado).
Sintaxis
REWIND [unidad]
El parámetro unidad indica el número entero especificado con el comando OPEN para
la unidad de lectura ó escritura en uso.
Sintaxis
La línea de formato indicará la etiqueta de la línea con el formato para salida de datos
por pantalla, el símbolo asterisco(*) puede empléarse en lugar de la línea de formato;
los nombres de las variables (var1, var2, .. ), deben estar separados por comas.
20
1.5.3 Procedimientos para trabajo con matrices y vectores
1'~.
La matriz puede ser cualquier cadena· excepto de tipo caracter, el resultado es una
matriz de dimensiones ni.
La matriz. puede ser cualquier cadena excepto de tipo caracter, el resultado es una
matriz del mismo tipo que la matriz argumento.
21
1.5.4 Procedimientos para trabajo con valores numéricos
El argumento (arg) puede ser cualquier valor entero, real ó complejo, el resultado es
un valor del mismo tipo que el argumento.
Los argumentos a1, a2, a3, ... deben ser del mismo tipo, excepto del tipo caracter, el
resultado será un valor del mismo tipo que los argumentos indicados.
Los argumentos a 1, a2, a3, ... deben ser del mismo tipo, excepto del tipo caracter, el
resultado será un valor del mismo tipo que los argumentos indicados.
El argumento (arg), debe ser real, el resultado será un valor del mismo tipo que el
argumento indicado.
El argumento (arg), debe ser real, el resultado será un valor del mismo tipo que el
argumento indicado.
El argumento (arg), debe ser real, el resultado será un valor del mismo tipo que el
argumento indicado.
El arqumf3nto (arg), debe ser real, el resultado será un valor del mismo tipo que el
argumento indicado.
23
El argumento (arg), debe ser un real de tipo REAL(4); el resultado será un valor del
mismo tipo que el argumento indicado.
El argumento (arg), debe ser un real de tipo REAL(4); el resultado será un valor del
mismo tipo que el argumento indicado.
El argumento (arg), debe ser un real de tipo REAL(4); el resultado será un valor del
mismo tipo que el argumento indicado.
El argumento (arg), debe ser un real de tipo REAL(4); el resultado será un valor del
mismo tipo que el argumento indicado.
.i El argumento (arg), debe ser un real de tipo REAL(4); e~-rz~ultado será un valor del
mismo tipo que el argumento indicado.
24
TANH Retorna la tangente hiperbólica en radianes de un argumento
real.
Sintaxis
TANH (arg)
El argumento (arg}, debe ser un real de tipo REAL(4); el resultado será un valor del
mismo tipo que el argumento indicado.
El argumento (arg), debe ser real con largl s 1; el resultado será un valor del mismo
tipo que el argumento indicado.
El argumento (arg), debe ser real con largl :S 1; el resultado será un valor del mismo
tipo que el argumento indicado.
El argumento (arg), debe ser real con ¡argl s 1; el resultado será un valor del mismo
tipo que el argumento indicado.
25
ASIND Retorna el arco seno del argumento en grados sexagesimales
en el intervalo [-90, 90].
Sintaxis
ASIND (arg)
El argumento (arg}, debe ser real con ¡argl s 1; el resultado será un valor del mismo
tipo que el argumento indicado.
El argumento (arg}, debe ser real; el resultado será un valor del mismo tipo que el
argumento indicado.
ATAND (arg)
El argumento (arg}, debe ser real; el resultado será un valor del mismo tipo que el
argumento indicado.
26
El argumento (arg), debe ser un complejo de tipo COMPLEX(4); el resultado será un
valor del mismo tipo que el argumento indicado.
El argument9. (;;Jrg), deb~"ser real, el resultado será un valor del mismo tipo que el
argumento indicado.
27
El argumento (arg), debe ser real, el resultado será un valor del mismo tipo que el
argumento indicado.
El argumento (arg), debe ser real, el resultado será un valor del mismo tipo que el
argumento indicado.
El argumento (arg), debe ser real, el resultado será un valor del mismo tipo que el
argumento indicado.
El argumento (arg), debe ser real, el resultado será un valor del mismo tipo que el
argumento indicado.
El argumento (arg), debe ser real, el resultado será un valor del mismo tipo que el
argumento indicado.
28
1.5.6 Funciones de definición y llamado de programas
Sintaxis
COMMON Crea una lista de parámetros y variables que pueden ser usadas
por más de una subrutina.
Sintaxis
Sintaxis
29'
El tipo espec, se refiere al tipo de especificación de la función es decir si es real,
entera ó compleja; el nombre se refiere al que identifica la función; variables a emplear
designa separados por comas los nombres de las variables que utiliza la función.
Cabe mencionar que para que estas variables sean reconocidas por la función
deben estar definidas en el COMMON del programa principal y en el mismo orden, de
lo contrario se pueden producir resultados incorrectos, al finalizar las instrucciones
definidas en la función se finaliza con el comando RETURN y luego END en la línea
final
Sintaxis
El nombre del programa debe ser dado usando letras o combinaciones de números y
letras, no se pueden utilizar espacios en blanco ni caracteres especiales a excepción
del bajo guión ( _ ).
Esta declaración debe ser ubicada siempre al inicio del programa y este nombre no
debe ser usado por algún subprograma, subrutina ó función; asimismo, no debe ser
duplicado ó declarado en algún procedimiento EXTERNAL
Sintaxis
RETURN [caracter]
30
SUBROUTINE Identifica una unidad de programa como una subrutina, dándole
un nombre e identificando sus argumentos.
Sintaxis
utilizar]
Para acceder a una subrutina será necesario el llamado desde el programa principal
haciendo uso de CALL, definido con anterioridad.
Sintaxis
CASE_(condición 1)
CASE (condición 2)
31
CASE DEFAULT
ENDSELECT
La variable a ser evaluada puede ser entera, real, compleja ó carácter; se recuerda
que al finalizar cada expresión CASE debe colocarse END SELECT.
Sintaxis
Lista de proposiciones
32
El nombre DO, es opcional si se elige debe colocarse también luego de la proposición
END DO, si se omite no causa dificultades; sin embargo, es conveniente usarlo
cuando trabajamos con programas extensos a modo de identificador; la variable (var)
a usar como contador deberá ser de tipo entero, el valor de inicio y alto también
deberán ser de tipo entero, corresponde a los valore de inicio y termino de iteración; el
incremento puede ser un entero positivo ó negativo dependiendo de la aplicación.
Adicionalmente es posible definir una etiqueta (etiq), es decir indicar una línea en el
programa a la que se dirige el control luego de finalizado el ciclo DO, en dicha línea
deberá colocarse la proposición CONTINUE, esto indica que luego de este punto el
programa continua su ejecución.
Sintaxis
END DO (nombre)
·.·':Se le pueden aplicar las mismas reglas que para los ciclos DO. En cuanto a ~.
expresión lógica a ser evaluada diremos simplemente que estas hacen uso de los
operadores lógicos antes definidos, así es posible evaluar
.
valores de variables de ~··
,_.:o:.'".•::o-::or
tipo, por ejemplo si se desea que cierto ciclo se ejecute mientras el valor de una
33
variable sea menor ó igual que 1O, en cuanto el valor sea mayor a 1O el ciclo
terminara.
Sintaxis
GOTO (etiqueta)
La etiqueta nos iridica el número de línea de programa a la cual se saltara por decirlo
de alguna manera, para continuar con la ejecución del programa.
En cuanto a las condiciones para poder hacer uso de GOTO, diremos que no se
puede transferir el control a un bloque DO, IF ELSE IF, fuera del ciclo en ejecución.
Sintaxis
{bloque de instrucciones 1}
{bloque de instrucciones 2}
El.SE
{bloque de instrucciones 3}
34
nombre bloq, se refiere a un nombre que es opcionalmente colocado para que
podamos identificar al grupo IF, es útil cuando se trabaja en programas extensos; las
expresiones 1 y 2, se refieren a las evaluaciones que arrojan un valor de verdadero o
falso, por ejemplo si a = 2 y b = 1 entonces al decir a > b nos arrojara verdadero y se
ejecutara el bloque de instrucciones que le siguen a la expresión THEN y al finalizar
termina la evaluación y se dirige el control a la línea que le sigue a END IF.
En cuanto a ELSE IF, esta indica que en caso de ser falsa la expresión 1, se deberá
evaluar la expresión 2 y de ser verdadera se ejecutara el bloque de instrucciones 2 y
finaliza la evaluación, en caso de que no lo sea pasa por alto este bloque, continua
entonces con la siguiente línea si se da el caso de que todas las expresiones
anteriormente evaluadas den por resultado falso se ejecutaran las instrucciones del
bloque 3, finalizado este se termina la evaluación y se dirige el control a la linea
posterior a END IF.
Muchas veces es útil usar lo que se conoce como IF lógico el cual funciona de manera
similar con la diferencia que no hace falta colocar END IF, su tarea es evaluar el valor
de una expresión lógica e inmediatamente ejecutar alguna tarea, veamos la sintaxis:
Consta de una línea, la instrucción que podemos ejecutar puede ser cualqHi'~
menos CASE, SELECT CASE, DO, END DO, DO WHILE, WHERE, END WHERE, IF,
END IF, END, END FUNCTION ó END SUBOUTINE.
35
Sintaxis
WHERE (expresión 1)
{proposiciones de asignación 1}
ELSEWHERE
- {proposiciones de asignación 2}
ENDWHERE
Sintaxis
PAUSE (mensaje)
Sintaxis
STOP [mensaje]
36
1.5.8 Procedimientos de formato Entrada/Salida
Sintaxis
FORMAl [descriptores]
Los descriptores definen la forma en que se presentan ó extraen los datos de las
variables, existen dos tipos los de edición y los de entrada y salida de datos a
continuación se muestra una tabla para los más utilizados en ambos casos.
37
Tabla (1.2) Descriptores de edición.
Descriptor de
Efecto de edición ·
edición
nx Espacios en blanco
1 Envía la posición de escritura a la línea siguiente
$ Indica posición de cursor para entrada de registro
' ' (apostrofes) Permite adición de texto en salida de escritura
El valor en arg puede ser entero, real ó complejo, el resultado será un número real
de tipo REAL(8).
El valor en arg debe ser entero, el resultado será un número real de tipo REAL(4).
El valor en arg debe ser real tipo REAL(4), el resultado será un número entero de-
tipo INTEGER(4).
38
NINT Convierte el argumento establecido en un número entero de
clase arbitraria, en este caso se emplea el redondeo.
Sintaxis
NINT (arg, clase)
El valor en arg debe ser real de tipo REAL(4}, el resultado será un número entero
de clase INTEGER(1), INTEGER(2) ó INTEGER(3).
El valor en arg puede ser entero, real ó complejo, el resultado será un número real
de tipo REAL(4) ó REAL(8).
39
En la fase de programación se debe transformar el algoritmo en un conjunto de
instrucciones detalladas y sin ambigüedad; en este punto se hace necesario ampliar el
conjunto de comandos, sentencias e instrucciones en Fortran para lograr la
elaboración de rutinas cíclicas y subprogramas que permitan individualizar las etapas
para la solución de un problema.
1.6.1 Algoritmos
40
Los diagramas de flujo utilizan una terminología simbólica tal como se
muestra a continuación:
42
Empleando la simbología mostrada el algoritmo ejemplo indicado en la sección
1.6.1, se puede construir en el siguiente diagrama de flujo:
INICIO
A,B C=A+B
N
e
e
e
43
Ejemplo:
Usando un programa en Fortran calcule el seno hiperbólico de rt/2 si se sabe que este
se puede representar mediante la serie infinita:
oo X 2n+l
senh(x)= I --
n=o (2n + 1)!
Ea% S Es%
44
Codificación:
PROGRAM SENOHYP
REAL(4)X,EA,ES,F,SUMA,D
45
Ejemplo:
El Programa debe presentar los resultados por pantalla y por archivo, permitiendo
exportar los datos a Excel u otro graficador y elaborar la grafica correspondiente.
46
Gráfica:
------------------~1~ ~.-----------------------
!
------------------~1ro-·~:------------------+----
!
-------------------~Mo,------------------f-----
1
uo--;--------------~-------
\.----------------loo---¡----------------;1-
------'·---------------so~-------------J•-----------
:
-------'~o..------------60-:----------/-------------
'
--·-----·------- -----------------40-¡----·---- --------------·--
¡
- - - - - - - - - - - - -----20-;-------- - - - - - - ·
-6 -4 -2 o 2 4 6
47
Gráfica:
-------------------2-o--5-,- - - - - - - - - - - - - - - - -
l-¡--------------
1
-~---- -·-··--
----~---------~ i -----------
!
1
·---- .... ·-··.-··-·····---------··-····· --·······-·-- ··--·~z-:5---L - · ---- ··--·--·----------·--·--·-··- ··-·-- ---···--- ---
RESULTADOS
HX 0.25000000 HY = 0.25000000
-l. 000 -0.750 -0.500 -0.250 0.000 0.250 0.500 0.750 l. 000
-l. 000 -0.400 l. 819 2.350 l. 756 0.600 -0.556 -1.150 -0.619 l. 600
-0.750 -l. 650 0.881 l. 725 l. 444 0.600 -0.244 -0.525 0.319 2.850
-0.500 -2.900 -0.056 1.100 1.131 0.600 0.069 0.100 1.256 4.100
-0.250 -4.150 -0.994 0.475 0.819 0.600 0.381 0.725 2.194: 5.350
0.000 -5.400 -l. 931 -0.150 0.506 0.600 0.694 1.350 3 .13<1 6,600
0.250 -6.650 -2.869 -0.775 0.194 0.600 l. 006 l. 975 4.069 7.850
0.500 -7.900 -3.806 -1.400 -o .119 0.600 1.319 2.600 5.006 9.100
0.750 -9.150 -4.744 -2.025 -0.431 0.600 l. 631 3.225 5.944 10.350
l. 000 -10.400 -5.681 -2.650 -0.744 0.600 l. 944 3.850 6.881 11.600
48
Gráfica:
15
Codificación:
PROGRAM FUNCION
49
WRITE(*,100)I,X,Y
WRITE(1,100)I,X,Y
END DO
ELSE IF (NT.EQ.2)THEN
WRITE(*,*)' INGRESE LOS LIMITES DE LA FUNCIONEN X,
XO Y Xf'
READ(*,*)A,B
DO I=1,N1+1
XK(I)=A+(I-1)*H1
DO J=1,N2+1
YK(J)=C+(J-1)*H2
ZK(I,J}=Z(XK(I),YK(J))
END DO
END DO
FUNCTION F(X)
F=cos(x**2)+sin(x**3)
RETURN
END
FUNCTION Z(X,Y)
Z=5*X*Y+6*X**3+0.6
RETURN
END
50
1.7 Problemas de aplicación
Ingresar por archivo y teclado los elementos de dos matrices cuadradas de orden 2 (A
y B), definidas tal como se muestra a continuación:
A = leos(a) sen(b)1 er
y B=
tan(e) cot( d) log(g)
N) N!
( K -K!(N-K)!
51
Ingresar por archivo los datos de velocidad vs. tiempo mostrado en la siguiente tabla:
-·-----
Tiempo 0.0 0.5 1.0 1.5 2.0 2.5 3.0
(s)
-----~
• ~2+sen (n+1)
3
L.
n=l 2n +n 3
00 1
• ~ 2n -{1 +sen 2
(n 3 ))
00 1
• ~-(2-n---1)-(2_n_+-1)
n3(-J2 +2Y
.n=l¿oo
-
3n
-
oo -Jn3 +1
•L
n=l e
n
52
Se _propone la siguiente codificación:
PROGRAM CONVERGENCIA
REAL(4) NX,EA,ES,F,SUMA,D
53
f. Elaborar un programa en Fortran que permita resolver el siguiente problema:
Se deja caer una pelota desde una altura de 20 m, cada vez que toca el suelo
rebota 3/4 de su altura anterior, encuentre la distancia total que viaja la pelota
antes de llegar a reposo. (Considere la solución como una serie infinita).
E= 1 f rq~
47tE 0 i=I
i. Mediante un programa en Fortran, evalué los 100 Primeros términos del seno
(1t/2) según la serie:
oo X 2n+l
sen(x)= L(-l)n - -
n=O (2n+l)!
54
Elaborar un programa en Fortran que calcule el número de bacterias que
habrá luego de un periodo de incubación de 5 horas, siendo que se cuenta
con una cantidad inicial N0 de 108 individuos y un tiempo de generación de 30
min.
55
6.2 Capítulo 11
Sea f(x) continua en un intervalo [a, e] y supongamos que f(a) < f(c). Entonces
para cada z, tal que: f(a) < z < f(c), existe un x 0 E [a, e] tal que: f(Xo) = z. La misma
conclusión se obtiene paia el caso que f(a) > f(c).
Básicamente el Teorema del Valor Intermedio nos dice que toda función continua en
un intervalo cerrado, una vez que alcanzó ciertos valores en los extremos del intervalo,
entonces debe alcanzar todos los valores intermedios.
56
Funcionamiento
Suponga que el intervalo entre x = a y x = e, denotado por [a, e], tiene una sola
raíz como se muestra en la figura (2.1), el método de bisección se sustenta en el
hecho de que para que en un intervalo [a, e] exista una raíz basta que los signos de
f(x) en los extremos sean opuestos o bien que se anulen f(a)f(c) sO.
Primero se divide en dos el intervalo [a, e], estas mitades son: [a, b] y [b, e], donde
b = (a + c)/2, al verificar los signos de f(a)f(b) y f(b)f(c), se localiza la mitad del intervalo
que contiene a la raíz, este intervalo se divide en dos de nuevo, y se evalúa el error
porcentual alcanzado (ea%) respecto al solicitado por el usuario (1 o-3 ::;; es% S1 o-\
recomendado para evitar acumulación de error por redondeo y truncamiento), cuya
magnitud indica el grado de aproximación en el resultado, para calcular el error
porcentual alcanzado emplearemos la siguiente fórmula:
b
actual - bprevia
lQQOI' _ O/'
1-----IX ;o- ea ;o (2.1)
b actual
e. %ses%
Cuando la raíz buscada es cero, se debe adicionar un valor del orden de 10-3 al valor
de bactual a fin de evitar error por división entre cero.
57
La figura (2.1) ilustra el proceso de aproximación por bisección.
y == f(x)
Algoritmo:
(i) Ingresar: a, e y es
(ii) Evaluar: f(a)*f(c) :s; O
• Si se cumple, Continuar al paso iii)
• Si no se cumple, regresar al paso i) (la función no tiene raíz en el intervalo)
(iii) Calcular: b =(a + c)*O.S
(iv) Evaluar: f(a)*f(b) :s; O
• Si se cumple, hacer: e= b
'"' Si no se cumple, hacer: a = b
(v) Calcular ea
(vi) Evaluar: ea :s; es
• Si se cumple, la raíz es b
• Si no se cumple, volver al paso iii)
58
Limitaciones:
Ejemplo:
. .
r--~-~-·--_,_-,,~.-.---· --..,..,..·-----··-<">"·---··-.----·~-----,...···--.~--- ·--·-<~w--......---~="--~l
¡ 1.500 '
! 1
1 1
l 1.000 w ;~~--- • • •••••• 1
¡! 0.000
/
f. . .. ¡1
1 0.000 1.000 2.000 3.000 4.000 5.000 6.000 1
Figura (2.1 a). Grafica de la función Seno(x) desde 0.0 hasta 5.0 con espaciamiento de
0.1 unidades.
59
Aplicando el método de Bisección se obtienen los resultados mostrados en la a
continuación:
METODO BISECCION
INGRESE A, C Y ES
2.5 4.0 0.1
RESULTADOS BISECCION
Codificación:
PROGRAM BISECCION
REAL(4) A,B,BP,C,EA,ES
60
IF (F(A)*F(B).LE.0)THEN
C=B
ELSE
A=B
END IF
IF(EA.LE.ES)THEN
WRITE(*,17)EA,B
ELSE
BP=B
GOTO 15
END IF
16 FORMAT (I3,7(F9.4,1X))
17 FORMAT (1X,' APROXIMACION FINAL AL ',F9.4,'% =',F9.4)
END
FUNCTION F(X)
F=SIN(X)
RETURN
END
Algoritmo:
(i) Ingresar a, e y N
(ii) Calcular h, usando: h = (e- a)/N
(iii) Evaluar para 1 desde 1 hasta N, la condición:
F(a+(i -1)*h)*F(a+i*h):::; o
• Si es afirmativo, se muestra el intervalo: [a+(i -1)*h, a+i*h]
= Si no es afirmativo se continua la búsqueda
61
Ejemplo:
Calcular los intervalos de ubicación de las posibles raíces de la función cos(x),
evaluando un dominio general [0.1, 1O], con un ancho de búsqueda de 0.1; es decir
N= 99.
*******************************************
* BUSQUEDA DE INTERVALOS DE UNA RAIZ *
*******************************************
INTRODUCIR A, e y N
0.1 10 99
RESULTADOS
ITERACION: 15 INTERVALO: 1.5000 , 1.6000]
ITERACION: 47 INTERVALO: 4.7000 , 4.8000]
ITERACION: 78 INTERVALO: 7.8000 , 7.9000]
Lo cual indica que se encontró intervalos que cumplen la condición en las iteraciones o
búsquedas número 15, 47 y 78.
Codificación:
PROGRAM BUSQUEDA_INTERVALOS
REAL(4)A,C,H
WRITE(*,*)' *******************************************1
WRITE(*, *)' * BUSQUEDA DE INTERVALOS DE UNA RAIZ * 1
WRITE(*,*)' *******************************************'
WRITE ( *, *) 11
WRITE(*,*)'INTRODUCIR A,C y N'
READ(*J*)A,C,N
WRITE ( *, *) 1'
H=(C-A)/N
WRITE(*,*)'RESULTADOSI
DO I=l,N
IF(F(A+(I-l)*H)*F(A+I*H).LE.0)THEN
WRITE(*,10)I,A+(I-l)*H,A+I*H
ELSE
END IF
END DO
10 FORMAT(lX, 1ITERACION:',I2, 'INTERVAL0:[ 1,F8.4,1X, ', ',F8.4, ']')
END
FUNCTION F(X)
F=COS(X)
RETURN
END
62
2.3 Método de Falsa Posición
Funcionamiento:
Dado un intervalo [a, e], que contenga a la raíz de la función lineal que pasa por
(a, f(a)) y (e, f(c)). la ordenada en un punto se escribe como:
fl(c) - fl(a)
y=f(a)+ (x-a) (2.2)
c-a
Despejando x, se tiene:
c-a
x =a+ (y-f(a)) (2.3)
f(c)-f(a)
Después de encontrar b, el intervalo [a, e] se divide en [a, b] y [b, e], si: f(a)f(b) :::; O,
la raíz se encuentra en [a, b], en caso contrario, está en [b, e]. Los extremos del nuevo
intervalo que contiene a la raíz se renombran a y c. y se evalúa el error porcentual
alcanzado (ea%) respecto al solicitado por el usuario como tolerancia (es%), cuya
magnitud indica el grado de aproximación en el resultado.
63
/ 1a. interpolación
/ / 2a. interpolación
/ 3a. interpolación
/ 1 a. aprox!mac!?n .
/~ 2a. aproxtmac1on
'.
3a. aproximación
.
x=a 1 x =e
1
1
Raíz exacta
1
Figura (2.2). Método de falsa posición. Tomado de: Nakamura, S. (1992); "Métodos
Numéricos Aplicados con Software".
Algoritmo:
(i) Ingresar: a, e y es
(ii) Evaluar: f(a)*f(c) ::; O
• Si se cumple, Continuar al paso iii)
• Si no se cumple, regresar al paso i) (la función no tiene raíz en el intervalo)
(iii) Calcular b usando (2.4)
(iv) Evaluar: f(a)*f(b) ::; O
o Si se cumple, hacer: e= b
= Si no se cumple, hacer: a = b
(v) Calcular ea
(vi) Evaluar: ea ::; es
• Si se cumple, la raíz es b
• Si no se cumple, volver al paso iii)
Limitaciones:
64
Ejemplo:
Calcular la raíz del polinomio -10x 3+5x2+3x+10, en el intervalo [O, 2], con un
error aproximado de 0.1 %.
5.000 '' - -- ,,
-5.000
INGRESE A,C Y ES
0.0 2.0 o. 1
RESULTADOS FALSA POSICION
65
Codificación:
PROGRAM FALSA_POSICION
REAL(4) A,C,ES,EA,B,BP
FUNCTION F(X)
F=-18*X**3+5*X**2+5*X+18
RETURN
END
66
2.4 Método de Newton-Raphson
Funcionamiento:
(2.5)
(2.6)
(2.7)
67
Despejando x 1, se tiene:
(2.8)
(2.9)
68
En el proceso iterativo la ecuación (2.1 O), puede escribirse como:
Dónde: h, es un número real que cumple lo siguiente: 1o-3 :::; h :::; 1o- 1, y se define
de antemano.
Algoritmo:
Limitaciones:
69
Ejemplo:
INGRESO DE DATOS
INGRESE XO Y TOL
0.1 0.01
RESULTADOS NEWTON-RAPHSON
N xo X1 DFX ABS(F(XO)¡F(X1))
1 0.10000 0.99814 -1.00202 l. 35465
2 0.99814 0.82820 -2.67578 0.40034
3 0.82820 0.80167 -2.04922 0.05319
4 o. 80167 0.80107 -l. 96104 0.00118
70
La raíz obtenida luego de 4 iteraciones, con una diferencia en valor absoluto de .00118
y una aproximación de cinco decimales fue: 0.80107
Codificación:
REAL(4) X0,X1,TOL,DFX,E
5 WRITE(*, *)''
WRITE ( * , * ) ' RAIZ DE UNA FUNCION (METODO DE NEWTON_RAPHSON)'
WRITE(*,*)' ============================================== 1
FUNCTION F(X)
F=-x+cos(x**2)
RETURN
END
71
2.5 Método de la Secante
Funcionamiento:
f'(xo) = f(x¡)-f(xo)
X 1 -X 0
(2.12)
72
El esquema geométrico de aproximación puede observarse en la figura (2.4).
Algoritmo:
Limitaciones:
73
Ejemplo:
5.000
4.500 i ...
4DOO
3.500 . . .. ··- ....
3.000 ......... .
2.500 ·'·
2.000 ---~-~ - .....
1.500
1.000 . --· ---- ..
0.500 '"-·------·-·-···
0.000 -- -------....... .
-o.5oQJ.ooo · · · o;soo· ·
-1.000 ···-·-··--···-······· .
-1.500 _¡_ ___ -- -·- --· .
-2.000
METODO DE LA SECANTE
RESULTADOS
N XO X1 X2 ABS (X2-X1)
1 0.50000 0.60000 l . 21917 0.61917
2 0.60000 1.21917 0.67943 0.53974
3 1.21917 0.67943 0.73477 0.05534
4 0.67943 0.73477 0.86954 0.13478
5 0.73477 0.86954 0.81791 0.05164
6 0.86954 0.81791 0.82639 0.00848
7 0.81791 0.82639 0.82727 0.00088
74
Codificación:
PROGRAM SECANTE
REAL(4) XB,Xl,TOL,E
WRITE(*,*)'METODO DE LA SECANTE'
WRITE ( *, *) ' '
WRITE(*,*)'INGRESAR LOS PUNTOS DE APROXI~4CION Xe, Xl y TOL'
READ(*,*)XB,Xl,TOL
WRITE(*,*)'RESULTADOS '
WRITE(*,*)' N XB Xl X2 ABS(X2-X1)'
N=e
18 N=N+l
X2=X8-F(XB)*((X1-XB)/(F(X1)-F(Xe)))
E=ABS(X2-X1)
WRITE(*,22)N,XB,X1,X2,E
IF(E.LE.TOL)THEN
WRITE(*,2B)X2,E
ELSE
XB=Xl
X1=X2
GOTO 18
END IF
28 FORMAT(' LA RAIZ HALLADA ES: ',F9.5,1x, 'APROXIMACION = ',F9.5)
22 FORMAT(1X,I2,4(F9.5,1X))
END
FUNCTION F(X)
F=-1B*x**5+5*cos(x**2)
RETURN
END
75
Casi todos los métodos considerados hasta ahora han aproximado la función en la
vecindad de la raíz por medio de una recta. El método de Muller se basa en aproximar
la función en la vecindad de la raíz por medio de un polinomio cuadrático
denominado: ecuación característica, que es de la forma:
a 2 x 2 +a 1 x+a 0 =0
Donde las raíces de este polinomio satisfacen:
Funcionamiento:
76
Haciendo h2/h 1 = y, es posible resolver las otras dos ecuaciones par~ a y b.
Para a:
a= yfi-fo(l+y)+fz (2.13)
yh¡(I +y)
Para b:
(2.14)
(2.15)
t¡
¡.
11 ~hz-·-h¡
1
!
Figura (2.5). Aproximación por el método de Muller. Tomado de: Curtis, F. (2000);
"Análisis Numérico con aplicaciones".
77
Para la siguiente aproximación se toma la raíz del polinomio como uno de los
puntos de un conjunto de tres, tomando los tres puntos cuya separación entre si sea la
más pequeña (es decir, si la raíz está a la derecha de Xo, se toman Xo y X1 y la raíz; si
está a la izquierda, se toman Xo. x 2 y la raíz). Siempre vuelven a colocarse los
subíndices a fin de Xo que sea el valor de en medio.
Es posible indicar un solo punto para arranque del método, este sería el valor
central Xo, considerando que x2 sería: xa- a y x1 seria: xa + a; donde a es un valor del
orden de 10-1.
Algoritmo:
78
Limitaciones:
Ejemplo:
/;
- --- --------/---------3-----. ------- --- ---------------------------------------------------- -----·--
¡ -. 0-
/ - - - -4
1 ---- ------- - ----5- e - ------ ---. -- ---· - ·-·· --- . ------------
L ______ ------------------------------ --------~--------- --·----- - - - - - - - - - ·
N XO X1 X2 H1 H2 A B e XR
1 0.5000 l. 0000 0.0000 0.5000 0.5000 -1.0764 2.1232 0.3307 0.3549
2 0.3549 0.5000 0.0000 0.1451 0.3549 -0.8083 2.4918 -0.0138 0.3605
3 0.3605 0.5000 0.3549 o .1395 0.0056 -0.9470 2.5014 0.0001 0.3604
79
Codificación:
PROGRAM MULLER
REAL(4) X8,X1,X2,ALFA,TOL
FUNCTION F(X)
F=3*X+SIN(X)-EXP(X)
RETURN
END
80
2. 7 Método de Laguerre
Los sistemas de álgebra por computadora son de especial valor para obtener
Jos ceros de una función. Tienen funciones integradas que encuentran Jos ceros.
Aunque su uso puede ser limitado en problemas grandes del mundo real; en general,
siguen estando adaptados a los métodos ya estudiados; así, cuando no existen
discontinuidades, la bisección es lenta pero certera y el método de Newton es rápido
aunque puede ser inestable, ambos problemas se resuelven con el método de
Laguerre. Curtis, F. (2000).
Funcionamiento:
Supóngase un polinomio de grado n: Pn (x) =(x- x1) (x- X2) (x- X3) .... (x- Xn).
Al calcular la derivada de In IPnJ, es fácil demostrar que~
P' 1
A=-n
pn
=:L--n
(x-xJ
i=l
(2.16)
(2.17)
Sea x 1 la raíz que quiere determinarse. Supóngase que todas las otras raíces están
lejos de x 1 y que están acumuladas estrechamente entre si en algún punto x = X. Se
definen las siguientes cantidades: a = x - x 1 y b = x - X. Las ecuaciones para A y 8
pueden volver a escribirse como: ·
y (2.18)
81
A partir de estas dos ecuaciones se elimina b para obtener a:
n
a= - - - : r = = = = = = (2.19)
A± ~(n -l)(nB- A 2
)
Algoritmo:
82
Limitaciones:
Ejemplo:
METODO DE LAGUERRE
83
Codificación:
PROGRAM LAGUERRE
REAL(4) X0,X1,N,A,B,AA,FX0,DFX0,DDFX0,H
WRITE(*,*)'METODO DE LAGUERRE'
WRITE ( *, *) ' '
WRITE(*,*)'INGRESAR ORDEN DEL POLINOMIO, PTO APROX X0 V TOL'
READ(*,*)N,X0,TOL
H=0.001
WRITE(*,*)'RESULTADOS'
WRITE ( *, *) ' '
WRITE(*,*)'IT X0 FX0 DFX0 DDFX0 a X1'
10 NN=NN+1
FX0=F(X0)
DFX0=(F(X0+H)-F(X0-H))/(2.0*H)
DDFX0=(F(X0+H)-2.0*F(X0)+F(X0-H))/H**2.0
A=DFX0/FX0
B=(A**2)-(DDFX0/FX0)
IF(A.GT.0)THEN
AA=N/(A+SQRT((N-1)*(N*B-A*A)))
ELSE
AA=N/(A-SQRT((N-1)*(N*B-A*A)))
END IF
X1=X0-AA
WRITE(*j21)NNjX0jFX0,DFX0 1 DDFX0 1 AA 1 X1
WRITE(*J*)'A ='JA
WRITE(*J*)'B ='JB
IF(ABS(AA).LE.TOL)THEN
WRITE(*J20)X1
ELSE
X0=X1
GOTO 10
END IF
20 FORMAT(1X, 'VALOR FINAL DE RAIZ = ',F9.5)
21 FORMAT(1XJI2J6(F9.5,1X))
END
FUNCTION F(X)
F=X**3-8.6*X**2+22.41*X-16.236
RETURN
END
84
Problemas de aplicación
a. La función f(x) =x- 0.2senx -0.5, tiene una raíz entre ><o =0.5 y x1 = 1.0,
se verifica fácilmente que: f(0.5) = -0.09589 mientras que f (1.0) =
0.33171, localizar mediante un programa, la raíz correcta hasta seis
cifras significativas usando el método de Bisección; genere, el diagrama
de flujo correspondiente y luego haciendo uso del comando OPEN y la
instrucción FUNCTION, generalice el código a cualquier función,
indicando lectura y escritura por archivo de datos.
c. Desarrolle un programa que calcule la raíz positiva de f(x) =x- cos (2x),
mediante el método de Newton hasta seis cifras significativas, utilice
como aproximación inicial x = n/4. Adicionalmente genere el diagrama de
flujo.
85
e. La potencia adiabática teórica necesaria para comprimir un volumen de
gas de Q pies cúbicos por segundo de la presión P 1 a P2 es:
(K-1)/K ]
HP- 144K p P2
(
- 500(k -1) 1 Q J [( J P1
_
1
86
h. Si la energía cinética de un electrón (m 0 = 9.11 x 1o-31 Kg) es 5 Me V,
determine su velocidad v a partir de la siguiente ecuación relativista:
j. Para neutrones que colisionan con un núcleo y cuya energía sea menor a
unos pocos MeV la dispersión es isótropa y la relación entre los ángulos
de dispersión en los sistemas de centro de masa y laboratorio es:
Acos8+1
cos <p = --;=======
.)A 2 + 2A cos e+ 1
87
6.3 Capítulo 111
Ax. + By + Cz = O
Ex+ Fy + Gz = H (3.1)
lx + Jy + Kz =L
88
(3.2)
AX=B (3.4)
Para lograr esto utilizamos la matriz ampliada [A: b], que es fa unión de
términos de A y B; así, para el caso de un sistema de 3 ecuaciones lineales con 3
incógnitas, en orden cero la representación es:
(3.5)
89
Por eliminaciones sucesivas, convertimos esta matriz ampliada a otra nueva,
de modo que al final se obtenga [A: B]N- 1 , es decir una matriz ampliada en orden N-1,
entonces:
El método consiste en sustituir los vectores fila [E¡]m secuencialmente en dos pasos:
[A:Bt-
1 l
=
a¡¡
~
N'
a1z
azz
o
N-1
N-1
al3 N-'
az3
a33
N-1
N-1
b1N-•
b N-1
z
b N-1
3
J
(3.8)
an N-1
o
al3
a23N-l
N-IJ( ly
X= X¡
= Xz
J =
[b N-1 J
1
b2N-l (3.9)
[ o o a33
N-1
z = X3
b
3
N-1
a) Dado que la última ecuación solo involucra a z (x3) y siendo que aNNN- 1 F O,
debemos tener:
bN-1
X - N (3.1 O)
N- N-1
aNN
90
b) El segundo paso nos permitirá conocer el valor de las incógnitas restantes:
xí ~ N-1 xt ]
= [bíN-1 - .L..,.aít 1 . ("1-
N-1 '
- N- 1 , ...... , 1) (3.11)
t=>+1 a¡;
Ejemplo:
-1 x + 1y - 4z = O
2x + 2y = 1
3x+ 3y+ 2z = 1/2
91
[E,]' ~[E,J'-(:::)E¡J' ~(2 2 o 1)-(:1 )-1 1 -4 oHo 4 -8 1)
1
4
-4 o
-8 1
J
6 -101/2
Llevamos [A: 8] 1 -+[A: 8f; el elemento pivote es el segundo valor de la diagonal, para
este caso m = 2.
Fijo el primer y segundo vector fila, es decir: [E1f = [E1] 1 y [E2f = [E2] 1
El cálculo se inicia para [E ] 2
3
1
4
-4
-8 1
o]
o 2 -1
Esta matriz es triangular superior. Nótese que se emplearon N-1 matrices ampliadas.
En este punto procedemos a efectuar la sustitución regresiva:
92
El proceso de sustitución regresiva tiene dos partes:
b2 -1
X
3
=-3-
2
-+ Z =-
2
a33
i =2
x2 =y= -0.75
i =1
x1 = x = 1.25
93
Los resultados computacionales para este problema empleando Fortran son los
siguientes:
0.0
l. O
0.5
MATRIZ INGRESADA
SOLUCIONES
X 1= l. 25000
X 2= -.75000
X 3= -.50000
94
Codificación:
PROGRAM SOLUCION_SIST_EC_LINEALES
REAL(4) A(188,188),A1(188,188),XSOL(188)
18 WRITE (*,*)''
WRITE (*,*)' SOLUCION DE ECUACIONES LINEALES SIMULTANEAS ELIMINACION DE'
WRITE (*,*)' GAUSS Y SUSTITUCION REGRESIVA'
WRITE (*,*)' =========================================================='
1.-JRITE (*, *)' '
WRITE (*,*)' INGRESO DE DATOS (SOLUCION SISTEMA DE N CON N INCOGNITAS)'
WRITE (*, *)' ========·=================================================='
95
WRITE(*J*)' =====================================
DO J'.U=lJf·U
WRITE(*Jlee)(Al(MIJMJ)JMJ=lJMl+l)
END DO
t'IIRITE(*.; *)''
LP=LP+l
LN=LP-1
IF (LP.GT.Ml)THEN
NK=Ml
GOTO 27
ELSE
GOTO 21
END IF
SUSTITUCION REGRESIVA
27 SUMA=e
DO J=lJMl
SUMA=SUMA+Al(NKJJ)*XSOL(J)
END DO
XSOL(NK)=(Al(NKJMl+l)-SUMA)/Al(NKJNK)
NK=NK-1
IF (NK.LE.e) THEN
GOTO 28
ELSE
GOTO 27
END IF
FIN DE SUSTITUCION REGRESIVA
PRESENTACION DE RESULTADOS
28 WRITE (*J*)''
WRITE(*J*)' MATRIZ INGRESADA'
WRITE(*J*)' ================
DO I=lJMl
WRITE(*Jlee)(A(IJJ)JJ=lJMl)
END DO
WRITE(* J *)''
WRITE(*J*)' MATRIZ TRIANGULAR SUPERIOR'
WRITE(*J*)' ==========================
DO I=lJMl
WRITE(*Jlee)(Al(IJJ)JJ=lJMl)
END DO
WRITE ( *; *) ' '
WRITE(*J*)' SOLUCIONES'
WRITE(*J*)' ==========
DO I=l,Ml
WRITE(*J29)IJXSOL(I)
END DO
FIN DE PRESENTACION
WRITE ( * J *) ' '
WRITE(* *)''
J
WRITE(* J *)''
29 FORMAT (lXJ' X'JI3J '='JF11.5)
1ee FORMAT (15(3XJF11.5))
WRITE ( * J *) ' '
t>JRITE ( * J *) ' '
END
96
3.2 Método de descomposición LU (Lower-Upper)
Pero en este caso definimos A como: A=L.U, ó sea el producto de dos matrices
Ly U, donde:
L=
rt.
121 122 0 ............ o
y U=
o U22 u23 ......... u2n
(3.12)
L(U.X) = B
L .Y = B (3.13)
U. X= Y
r¿·
u¡2
Uzz
ul3"""'"
u23 .........
U In
u2n
rx,
Xz
=
y¡
y2
(3.14)
o
¡~· ["~·
0 ............ U¡z uB .........
u,. l [a., a¡z aJ3·········
121
In!
122
ln2
0............
o
u23 .........
0 ...........
U2n
.
unn
a21
anl
.
a2z
an2
a23 ........
an3········
aml
a2n
ann
(3.15)
97
Por lo cual es posible definir:
N
,l)ikuki = aii donde: (i = 1,2,3,4, ..... , N) y G= 1,2,3,4, ..... , N) (3.16)
k=l
Por conveniencia hacemos: l¡¡ = 1, donde: (i = 1, 2, 3, 4, ...... , N), es decir todos los
elementos de la diagonal principal de L son iguales a i. También u 1¡= a 1¡, de modo que
podemos simplificar los cálculos, quedando por determinar elementos en un triángulo
más pequeño.
Para nuestra matriz A, podemos diferenciar los elementos para los cuales (i > j) y los
elementos donde (i::; j), así:
I
k=l
lik u¡q = aii (3.17)
"likuk.
L.J ' •J = alJ.. (3.18)
k=l
Esto nos permite hacer la evaluación de los uli y los lu, restantes:
i-1
Calculados los valores de L y U, debemos resolver primero L.Y = B, para obtener los
valores de la matriz accesoria y, lo cual nos permitirá calcular los valores de x,
resolviendo U.X = Y.
Nota: en el primer caso será necesario realizar una sustitución progresiva (Upper) y
en el segundo una sustitución regresiva (Lower).
98
Ejemplo:
~J [~ u:}[~ ~3J
5 5
[1:, 1 Uzz 8
131 132 o u33 3 -9
Triangular: inferior superior
1
121 .~1 1 (?) (Z) (5 ) 1
~ a21 = ~ 2k uk1 ~ 21 Un = a2I ~ 21 = 2.5
k~!
2
"1 1 (5/2) (5) 1 (!) (?) (8)
u2z ~ a22 = L...J 2k uk2 ~ 21 u12 + 22 u22 = a22 ~ u22 = -4.5
k=o1
1
131 ~ a31 =
" 13k uk1
L...J ~
131 (?) Un (2 ) = a3I
(3 )
~
131 = 1.5
k~I
2
"1 1
u23 ~ a23 =.L.. 2k uk3 ~ 21
(5/2)
ul3
(7)
+ 122 (!) u23 (?) = a23
(-3)
~ u23 = -20.5
k~!
2
132 "1 1 (3/2) (5) 1 (?) (-4.5) (-9) 1
~a32 = L...J 3kuk2 ~ 31 ui2 + 32 U22 =a32 ~ 32 =3.7
k~!
3
"1. 1. (3/2) (7) 1. (3.7) (-20.5) 1. (1) (?) (6) 7
U33 ~ a33 = L...J 3k uk3 ~ 31 ul3 + 32 u23 + 33 U33 = a33 ~ u33 = 70.
k~!
99
Usamos la relación LY = B, para calcular el vector accesorio por sustitución
progresiva, así:
o
[2\ 1.5
1
3.7
a) Dado que la primera ecuación solo involucra a y 1 y siendo que 111 * O, debemos
iener:
b¡
y¡=-
1¡¡
b) El segundo paso nos permitirá conocer el valor de las incógnitas restantes:
(i = 2, 3, ...... , N)
10
y¡=¡ = 10,
Y2- = 2
~ l y l _1_
[b- - L... l 2t tj
t=l 22
Y3 = [ b-
3 L l3tYt ] -¡1
t=l 33
o 70.7 z 14
100
El proceso de sustitución regresiva tiene dos partes:
a) Dado que la última ecuación solo involucra a X3 y siendo que UNN "* O, debemos
tener:
X
N- - -
YN
UNN
.x =
1
[
Y; - í:u;
N
1
X1
] 1
-; (1. = N-1 , ...... , 1)
t=i+l U¡¡
14
Z =X3 = - - = 0.198
70.7
101
Los resultados computacionales con el programa en Fortran son:
INGRESO DE DATOS
10.0
15.0
-8.0
MATRIZ A
MATRIZ L
MATRIZ U
SOLUCIONES
X: 1 .9701
X: 2 l. 3412
X: 3 .1934
102
Codificación:
PROGRAM DESCOMP LU
REAL(4) A(100~100)~WL(100~100)~U(100~100)~8(100)~X(100)~C(100)
10 WRITE (*~*)''
WRITE (*~*)' DESCOMPOSICION LU (LOWER UPPER)'
WRITE (*j*)' ================================
WRITE ( *, *) ' '
WRITE (*~*)' INGRESO DE DATOS'
WRITE (*,*)' =============================================
WRITE ( * ~ *) ' '
WRITE (*,*)' INGRESE DIMENSION DE LA MATRIZ DE COEFICIENTES '
READ (*,*)M1
WRITE (*, *)''
WRITE (*~*)' INGRESE ELEMENTOS DE MATRIZ A'
DO I=1~M1
READ(*,*)(A(I~J)~J=1~M1)
END DO
WRITE (*~*)' INGRESE VECTOR DE TERMINOS INDEPENDIENTES'
DO I=1~M1
READ(*~*)B(I)
END DO
WRITE ( *; *) ' '
20 DO J=1~Ml
U(l~J)=A(l,J)
END DO
DO J=l,Ml
WL(J~J)=l
END DO
SUMA3=0
SUMA4=0
DO J=l~M1
SUMA3=0
DO I=2~J
SUMA3=0
DO K=l,I-1
SUMA3=SUMA3+WL(I,K)*U(K,J)
END DO
U(I,J)=A(I,J)-SUMA3
END DO
SUMA4=9
DO I=1,Ml
SUMA4=9
DO K=l,J-1
103
SUMA4=SUMA4+WL(I,K)*U(K,J)
END DO
WL(I,J)=(A(I,J)-SUMA4)/U(J,J)
END DO
END DO
WRITE(*,*)' MATRIZ A'
WRITE( * J *)' ---------'
-------
DO J=1,M1
WRITE(*,30)(A(J,I),I=1,M1)
END DO
WRITE(*,*)' MATRIZ L'
WRITE( * J *)' ---------'
-------
DO I=1,M1
WRITE(*,30)(WL(I,J),J=1,M1)
tND DO
WRITE(*,*)' MATRIZ U'
WRITE( * J *)' --------'
--------
DO I=1,Ml
WRITE(*,30)(U(I,J),J=1,M1)
END DO
NK=1
26 SUMA=0
DO J=M1,1,-1
SUMA=SUMA+WL(NK,J)*C(J)
END DO
C{NK)=(B(NK)-SUMA)/WL(NK,NK)
NK=NK+1
IF (NK.GT.M1) THEN
NK=M1
GOTO 27
ELSE
GOTO 26
END IF
27 SUMA=0
DO J=1,M1
SUMA=SUMA+U(NK,J)*X(J)
END DO
X(NK)=(C(NK)-SUMA)/U(NK,NK)
NK=NK-1
IF (NK.LE.0) THEN
GOTO 28
ELSE
GOTO 27
END IF
28 WRITE(*,*)' SOLUCIONES'
WRITE(*,*)' ==========
DO I=1,M1
WRITE(*,35)I,X(I)
END DO
30 FOR~AT (7(F8.4))
35 FORMAT (' X:',I3,F8.4)
END
104
Problemas de aplicación
AToT 1 ""fO . c J
= LlJ
j=l
105
b. Se necesita preparar una formula alimenticia para engordar ganado, se
dispone de maíz, desperdicios, alfalfa y cebada, cada uno con ciertas
unidades de ingredientes nutritivos, de acuerdo con la tabla (3.2).
Tabla (3.2), Unidades de ingredientes nutritivos por Kg. en cada alimento disponible.
malla A
106
Nota: Aplique las reglas de Kirchhoff a cada una de las mallas, construya su
sistema de ecuaciones lineales y condiciónelo de manera que tenga diagonal
dominante.
e. Una masa M de 1.5 Kg. Está sujeta a un techo por tres cables, tal como
se muestra en la figura (3.4). Calcule la tensión para cada cable, si el
sistema se encuentra en equilibrio.
107
6.4 Capítulo IV
4. Ajuste de curvas
108
Quiere determinarse de manera idónea las constantes a y b en la ecuación que
relaciona la resistencia R con la temperatura T.
R = aT+h
1050
1000
950 ~
•
~
o
900
"'e
·e:;
Q)
u;
·¡;;
/ T,"C
20.J
37..7
R,Ohms
76~
27.6
Q)
51.0 873
0::
T},2 942
95.7 1032
850
Temperatura( oc)
30 35 40 45 50 55 60 65 70 75 80 85 90 95 100
Las desviaciones de los puntos se miden por las distancias de los puntos a la
recta, y como se miden estas distancias depende del hecho que ambas variables
estén sujetas a error, en el caso del ejemplo resistencia temperatura se supondrá que
el error al leer las temperaturas en la figura (4.1) es despreciable, de modo que todos
los errores estén en la medición de la resistencia, y se usaran distancias verticales,
entonces las desviaciones pueden minimizarse haciendo su suma un mínimo,
considerando el caso de solo dos puntos ver figura (4.2).
109
Resulta evidente que la mejor recta para por cada punto, pero cualquier recta
que pase por el punto medio del segmento que une los puntos tiene una suma de
errores igual a cero.
y¡ =ax¡ +b (4.1)
1"10
N N
S = e; +e; + ....... + e~ = Le; = L (Y¡ - ax¡ -bY
i=l i=l
(4.2)
as N
-=O= ¿2(Yi -axi- b)(-xJ
aa i=l
(4.3)
as N
-=O= ¿2(Y¡ -ax¡- b)(-1)
oh i=l
i=l
a= ---------
111
Para los datos mostrados en la figura (4.1), se encuentra que:
2
N=5;LT¡ =273.l;LT¡ =18607.27;LR¡ =4438,
I T¡R¡ = 254932.5
Ejemplo:
·x f(x)
9.orn---·-················-----·---·-------·--··--··························----------·-·························································
·•-·. o;1o 5.3o
0:20 5.30 .· 8.0
·. 0.30. 5.60 7.0
.0.40 .· .5.76 6.0
: 0,50 6.00 5.0
.· 0~60 ·. 6.32 4.0
·:.:. ·.·...· .
112
La solución computacional arroja los siguientes resultados:
RESULTADOS
PENDIENTE = 2.0054
INTERSECCION CON EL EJE Y = 4.9924
N X Y(AJUSTADO)
1 .1000 5.1929
2 .2000 5.3935
3 .3000 5.5940
4 .4000 5.7945
5 .5000 5.9951
6 .6000 6.1956
7 .7000 6.3961
113
8 .8000 6.5967
9 .9000 .6. 7972 9
10 1.0000 6.9977
11 1.1000 7.1983 7
12 1.2000 7.3988 6
13 1.3000 7.5993
14 1.4000 7.7999 4 .
15 1. 500@ 8.0@@4 3 ..
2
.... ···--
o
o 0.2 0.4 0.6 0.8 1.2 1.4 1.6
Por lo tanto la relación entre las dos variables según el ajuste es:
y= Sx +b
Codificación:
REAL(4) X(100),Y(108)JN,Y2(100)
114
WRITE(*J15)A
WRITE(*J16)8
WRITE(*J*) N X Y(AJUSTADO)'
! REEVALUACION DE LA FUNCION
OPEN (1JFILE~'REGLIN.TXT')
DO I=1JN
Y2(I)=A*X(I)+B
WRITE(*,10)I,X(I),V2(I)
WRITE(1,10)IJX(I),Y2(I)
END DO
10 FORMAT(1XJI3J2(F8.4,1X))
15 FORMAT(1XJ' PENDIENTE ='JF8.4)
16 FORMAT(1X,' INTERSECCION CON EL EJE V ='JF8.4)
END
(4.5)
(4.6)
(4.7)
115
En el mínimo, todas las derivadas parciales 8S/8a 0 , 8S/8a 1, BS/Ba 2 , ... ....... , BS/Ban son
iguales a cero; al escribir, las ecuaciones para lo anterior se obtienen n+1 ecuaciones:
(4.8)
(4.. 9)
~aL..,
!'1 '"'
X;n +a¡.L.,X;
'"' n+l +az.L.,X;
'"' n+2 + ......... +an.L.."~;
'"' v 2n ~L..."~;
_ "\' V nyi
116
La matriz de la ecuación (4.1 O) se denomina matriz normal para el problema de
mínimos cuadrados; para resolver el sistema puede aplicarse eliminación Gaussiana.
Ejemplo:
-·.· )( 20.00
18.00
0.10 3.73
·. . .:.
_·-.·~-_ ·~-<-
16.00
·-.-0~20 4:4a···_-_-
......·.
14.00 -¡
0.30··.-. 6.40 i
12.00 l
'o.-48 6 60 10.00 ¡
()_~(} 7:00 . 8.00 1
O.~()i
....-
9.60 : 6.00 1
1
i
4.00 - -- (
().70 11.40 1i
200 .
o.so. t4.fo 0.00 +-------,-----,-------¡------r--------r---11
i
117
o.6 9. 6
INGRESE PAR NRO. 7 X E Y
0.7 11.4
INGRESE PAR NRO. 8 X E Y
0.8 14.1
INGRESE PAR NRO. 9 X E Y
0.9 15.6
INGRESE PAR NRO. 10 X E Y
1.0 18.3
RESULTADOS
SUMATORIAS
MATRIZ NORMAL
A 11. 8484
B ~
3.0292
e 3.4853
N X Y (AJUSTADO)
1 .1000 3.9067
2 .2000 4. 5651
3 .3000 5.4604
4 .4000 6. 5927 20
5 .5000 7. 9620 18
6 .6000 9.5683 16
14
7 .7000 11. 4115
12
8 .8000 13.4916
10
9 .9000 15.8088
8
10 1.0000 18. 3\5.2_9 6
4
2
o
o 0,2 0.4 0,6 o.~
118
Codificación:
PROGRAM REGRESION_CUADRATICA
REAL(4) X(100),Y(100),N,Y2(100),A(100,100),A1(100,100),XSOL{100)
119
INGRESANDO EN MATRIZ
ML:;3
A(1,1)=N
A(1, 2).=SUMA1
A(1;3)=SUMA2
A(1,4)=SUMAS
A(2,1)=SUMA1
A(2,2)=SUMA2
A(2,3)=SUMA3
A(2,4)=SUMA6
A(3,1)=SUMA2
A(3,2)=SUMA3
A(3,3)=SUMA4
A(3,4)=SUMA7
WRITE(*,*)''
WRITE(*,*) MATRIZ NORMAL'
WRITE(*, *)''
DO 1=1,3
WRITE(*,38)(A(I,J),J=1,4)
END DO
COPIANDO EN LA MATRIZ DE PASO
28 LP=2
LN=LP-1
DO I=1JM1
DO J=1,M1+1
Al(I,J)=A{I,J)
END DO
END DO
FIN DEL COPIADO
HACIENDO LA ELIMINACION
21 DO I=LP,Ml
WPAS01=A1(I,LN)
WPAS02=A1(LN,LN)
DO J=1,M1+1
A1(I,J)=A1(I,J)-(WPAS01/WPAS02)*A1(LN,J)
END DO
END DO
FIN DE LA ELIMINACION
REPITIENDO EL PROCESO
LP=LP+1
LN=LP-1
IF (LP.GT.Ml)THEN
NK=M1
GOTO 27
ELSE
GOTO 21
END IF
FIN DE REPETICION
SUSTITUCION REGRESIVA
27 SU~1A=8
DO J=l,Ml
SUMA=SUMA+Al{NK,J)*XSOL(J)
END DO
120
XSOL(NK)=(A1(NK,M1+1)-SUMA)/A1(NK,NK)
NK~NK-1
IF (NK.LE.0) THEN
GOTO 28
ELSE
GOTO 27
END IF
FIN DE SUSTITUCION REGRESIVA
28 C=XSOL ( 1)
B=XSOL(2)
AA=XSOL(3)
!PRESENTANDO
WRITE(*,15)AA
WRITE(*,16)B
WRITE(*,17)C
WRITE(*,*) N X Y(AJUSTADO)'
REEVALUACION DE LA FUNCION Y SALIDA POR ARCHIVO
OPEN {1,FILE::::'REGCUA.TXT')
DO I=1,N
Y2(I)=AA*X(I)**2+B*X(I)+C
WRITE(*,10)I,X(I),Y2(I)
WRITE(1,10)I,X(I),Y2(I)
END DO
30 FORMAl (1XJ4(F8.4J1X))
10 FORMAT(1XJI3J2(F8.4,1X))
15 FORMAT(1X,' A =',F8.4)
16 FORMAT(1X,' B =',F8.4)
17 FORMAT(1X,' C =',F8.4)
END
121
Funciones potenciales y exponenciales
(4.11)
a. Si n = 1, se obtiene: y = kx, que viene a ser la ecuación de una recta que pasa
por el .origen.
b. Si n = 2, se obtiene: y = lo2, llamada función cuadrática, correspondiendo su
grafica a una parábola.
c. Si n = 3, se obtiene y= kx3 , llamada función cúbica.
d. Si n = -1, se obtiene y = klx, llamada función hiperbólica, correspondiendo su
gráfica a una hipérbola.
e. Si n = -2, se obtiene y = klx2, que también es una función hiperbólica,
denominándose su gráfica hiperbólica cuadrática.
Técnica de linearización
122
2. La estrategia apropiada es derivar una función aproximada que ajuste la
tendencia general de los datos sin ajustar necesariamente con los puntos
individuales.
250.0 .
200.0 .
150.0 :
>-
100.0 .•
50.0 •
4>-
. 4.--4···
0.0 0 ··•·• .-'$> ··'·' ............. .
0.0 2,0 4.0 6.0 RO 10.0
X
Evaluar esta ecuación y realizar un ajuste sobre los datos linearizados permitirá
conocer los valores desconocidos de n y k en la ecuación potencial. La grafica de la
ecuación (4.13), es una línea recta, tal como se ve en la figura (4.4).
123
Linearizacion logy=21ogx+log2
2.50
2.00
~ 1.50
...
>-
Oí
1.00
.Q
-
0.50
0.00 +-------,-----,----,-------,-----.--------,---------,
02 0.4 0.6 o.a 1.~
log(x)
400.0
350.0
300.0
250.0
> 200.0
150.0
100.0
~
50.0
... A---~---4>···-<$-···
~-.- _. ..
0.0
0.0 2.0 4.0 6.0 B.O 10.0 12.0
X
124
El proceso para este tipo de ecuaciones, requiere aplicar el logaritmo en base a = e,
es decir el logaritmo natural a ambos lados de la ecuación (4.12), así:
Evaluar esta ecuación y realizar un ajuste sobre los datos linearizados nos permitirá
conocer los valores desconocidos de n y k en la ecuación exponencial. La grafica de la
ecuación (4.15), es una línea recta, tal como se ve en la figura (4.6).
Linearizacion lny=nx+lnk
7.0
6.0 • -~
5.0 • -~· .• -~·.
~-.
0.0+-------~------~--------~------~~----~-------.
125
Ejemplo a:
·:x-···.·.·. •· v <
>o.1dÓ··.·. ·. 12.214 500.000 ····-············..·······•············· ··················-····-·--·--·········--·--·-···············"'·······--·-··-····-·····-·-········--·····-··¡
450.000 ...... l
>ó.3oo·• 1s.221 ¡
400.000 .i
. a.5ba/\
.............. .
.:
··27.183 350.000 .... 1
1
l
•8.1ao ....•-·.-•· .· 40;552
. _., ·.·.·. ·
· 300.000
250.000 .... "·-· .. ..
... 1
.... -· .¡
¡
•. _-.•- _· ·_.· _.•._.• • . _·.•_
..•_.•_ ._•. . •. o.• ·s
_·_•.-•.-.·.o
···-·····_o•.· .·_·. ·.·. 60.496 WMOO 1
. 1 .10 0 90~250> 150.000 ....... ¡
·~·······
1.36()
.......... ·..
134.637
·. 1 :soó 200,855 '::::
0.000 +-----..,-------,------,-------ii
1
J.7óó 299.641 0.000 0.500 1.000 1.500 2.000
1~~6() 447:012
126
RESULTADOS
EXPONENTE N 2.0000
COEFICIENTE K 10.0000
N X y (LINEARIZADO Y AJUSTADO)
1 .1000 2.5026
2 .3000 2.9026
3 .5000 3.3026 7.00
0.00
0.00 0.50 1.00 1.50 2.00
Codificación:
REAL(4) X(188),Y(188),N,Y2(188),NN,K
127
WRITE(*J15)NN
WRITE(*J16)K
WRITE(*J*) N X Y( LINEARIZADO Y AJUSTADO)'
!REEVALUACION DE LA FUNCION
OPEN (1JFILE='LINEXP.TXT')
DO I=1JN
Y2(I)=NN*X(I)+ LOG(K)
WRITE(*J10}IJX(I)JY2(I)
WRITE(1,10)IJX(I),Y2(I)
END DO
10 FORMAT(1X,I3J2(F8.4,1X))
15 FORMAT(1X,' EXPONENTE N =',F8.4)
16 FORMAT{1X,' COEFICIENTE K ='JF8.4)
END
Ejemplo b:
Linea rizar y ajustar para obtener la relación entre las variables registradas en la
siguiente tabla, si se observa tendencia potencial:
X y
0.800
().9ob · ._- ._ $,64$ <
2.560
¡i 2..000
128
Los resultados obtenidos con el programa en Fortran son los siguientes:
RESULTADOS
EXPONENTE N 3.0000
COEFICIENTE K 5.0000
N X Y (LINEARIZADO Y AJUSTADO)
1 -1.000 -2.301
2 -0.699 -1.398
3 -0.523 -0.870
· · ····- -o.so?
4
5
-0.398
-0.301
-0.495
-0.204
/'
6 -0.222 0.033 -1.200 -1.ooo -o.soo .. -o_~()() .. ·- :o_;O() ,/o~~r; o.oor~_ 000
................
7 -0.155 0.234 .,. -··---·-~-
8 -0.097 0.408
. ,.-------·-·- ·- -1;000 ·-'
9 -0.046 0.562
"10 0.000 o. 699 - ~1:500·""
-2.000 _:
,,
.,·"'
129
Codificación:
REAL(4) X{100),Y(100),N,Y2(100),NN,K
130
Problemas de aplicación
4,5Q 22,90
', 5,oo···.······· 28,60'··
131
:'?'~(55'''''''''''''~''81":55'"~----····
. 5.6o··.· .· · 1qa,9s .
5,50 • . 134,15
·.. -... :.
< 6;QO · · 146,35
·.:.·.· . 6 so.· 1-39,15
'
· .... f.ód . f48;5:f·
;,50:····:. 177,55
8,0()' .··.· i94;1i9 .
á.so i· 226,35
·• ~.óa>· >240.1!) . · ....::
·. 9,50 257,55
.· 10,00 . 275;55
.·......5.500/',.
6.ooo··· ·
· ·.·.. ,;1o2~.ato···
-1068,713
·. · •·. . 8;ooo .·..·.·.·. ~15$6,oop .·
·•· · ·. ·····a.sqo·· -2350,343
132
·~·::~;·9-.ooo·::··c·"··~·-·~:2a5T741·a·········~····w·.
9,50Ó . -3052,873
47tK
a.=--
A
·intei15'iéiaa··¡·················¡·r9oa···4-.2s3···:··a:2s4·····a.os1·······~·.:•a.oo4·--s:9á9x1·cf4 ·--·s:330xfo:s·
133
. . ·. . · ..
' ·-~. . .- ":-+~-,~,···:-:
~,.·. ¿•,'--:· .( \¡·:t:.;:
·.;·~-~ /'- ........ ,·~· .'.:/:
' " ·t~ _._.¡
- .~ ...
...
l
~· --- -~" - ...........
pd Jl
lo
lsotopo 192 1r
......................... '"5""'""'" ............. .- .•,
134
lsotopo22 Na
,.,.,.•,,...._._._.._,.,tr······---·-·--..--, .,. ._,._,._,.,., _. :,··-·-:···. · .,. "_,.,.,._., .. , ... ,-.."···"··· .,....,. . ,...._,,.,._........_,.._,_..,.,,. ,. ._,., .......,.,,,......,,,,.,,.,,,..-.,.,. "..
A (x10 ~q) :~1}.E)35 182.698 107:107 77.745 62.792
_--·--w·-- . -• LY _ >__________ "_________________________ _
16
14V
40hm
60hm
1-------1 ~/
lOV ~
Il
20h1U
135
h. Los parámetros registrados por dos sensores uno de presión y otro de
temperatura para cierto gas se muestran en la tabla (3.1 ), calcule
mediante una linearización cuál es la relación entre las variables
involucradas.
136
Tabla (4.2), numero de bacterias vs. Tiempo .
.. ·. .,·.:·:<·::.:: . .·:p·.·:·:a·e>·. ·..·. : .., ?';··:p··a::.:.·b·:··,··a:~·:·C·:::I:O;~··n·:· '-' . ,..,. ., ·•.· ·.·.·.·T:... ;,·.·e:.:.·.m·.·.·p····.·a·····.·~.;·. ::::·· ---~··· . . p.,
.:. <e ~·:·T:"~;,·:e·:·:··m::
.....•.. ·. ·' ........ ·.·.··
. ...a."'b"''l'a: :·C:· .:I:O·;··n--::·~ ·······~:··:.
.· ..· .• •. . (s) .... . · (~HI~ne~r'·•·. ·.·.· .. · <.(~)···:·.·.. ..<><· (~illbn~s)\ .
·• · o.bóó . ·. 2.5oo .··.·. · ·...· : '>< 1:600··.·. ·. . · ·. 3348.577
·.•·•:· •.·:.· .·.· •· · · · &too >••·•···.·.·..•·•·.•··. a~921·•: · ·.·.· . . . . . 1."7o6 >i . 5251$.14·
.· .· ·. ·,•· •·. h.ioó····· 6.149 ·.· . :. f.soo··· 8236.í70
.·.· :· · · >· \•. ·.··();~~h··i . . . . . . . · . .·.•. ~;644
.•· .· •· • · .· •· ·. .i .• • •. •. • t.~dd•·. . . ·.·: })·• ·. ··.·········••12~16\886 .
(l.-40(}····· .. :·.·. 15.124 2.()00 .•. 20257.710
>••/·.•·•. .· o.~ao'<····•·· · . . 23a)g•..··.·• ·.·.·...·. ·.·.i . . 1.1ó()~ x. . . ·. . . . . . . ·. •·•s1r7oA13
b.s~$i 37.199 ·· · ;.260</ . . . ·.· 49825.926
·. · .· .·. · O:ió() . ·•.•·.·.· ·.·.· .. ·. 58:~40< · >..... >i.~Ób <' . · •· · .·. ··•····•1á142.sor>
· · · · · · · · · • • •.·•••••·· · · · .•a.Sqo•••·•>·:r···•. .·•.·. .· . · .·.·. 91.496 ···•••··.•>)ik.4óo•. ·••·· · · ·.· .· 122552.003
··. ·. · .·.·. ·... 6.900 > .:.·.·. ·.·.· ·' 143~494 •', .·.·.·. ·.· . · .·. . • 2:500 > t$2199)99···.·:. ·.
\ /i \.¿od i . .. . . . . .··. 225.043 ...•....·. ·.• . / /2.~cJ6 3o 1429.287
137
6.5 Capítulo V
5. Interpolación Polinomial
Supongamos que x0 , x1, ..... , Xn son n+ 1 puntos distintos del eje real y que f(x)
es una función de valor real definido sobre algún intervalo [a, b] que contiene estos
puntos. Queremos construir un polinomio p(x) de grado ::::: n que interpole f(x) para los
puntos dados, esto significa que satisface:
(i =0,1, 2, ...... , n)
Se busca un polinomio de grado ::::: n que se anule en todos los X¡, este polinomio de
orden n que pasa a traves de los n+1 puntos se puede escribir en una serie de
potencias como:
(5.1)
138
Donde los a¡ son coeficientes indeterminados; si evaluamos (5.1) en los n+1 puntos
distintos del eje real dados anteriormente se obtiene:
Cuando g(x) se divide entre g(Xo), la función resultante, conocida como función de
Lagrange lo (x) seria:
139
Donde el numerador no incluye (x- xk) y el denominador no incluye (xk- x), la función
lk(x) es un polinomio de orden n y toma el valor de 1 cuando x =Xk y de cero en x =Xj, j
* k, dado esto se puede hacer:
(5.3)
Si multiplicamos los 10 (x), 11 (x), b(x), ...... , ln(x) por la función evaluado en los puntos
dados f 0 , f 1 , f 2 , ....... , fn y las sumamos, el resultado será un polinomio de orden a lo
más n e igual a fk para cada k= O hasta k= n.
Ejemplo:
140
Usando la ecuación (5.4) tendríamos que obtener una forma de Lagrange de
orden n = 2, para x = 251 por lo cual, ser debe calcular:
2
p(x) = Lf(xk)lk (x) = f(x 0 )1 0 (x) + f(x 1 )1 1 (x) +f(x 2 )1 2 (x)
k=O
INGRESO DE DATOS
141
INGRESE EL PUNTO A INTERPOLAR X
251
================================
RESULTADO INTERPOLACION
========================
890. 55 620
========================
PUNTOS EVALUADOS: 3.0000
Codificación:
WRITE(*, *)''
WRITE(*,*)' PROGRAMA INTERPOLACION DE LAGRANGE'
WRITE(*¡*)' ==================================
WRITE(*,*)''
WRITE(*,*)' INGRESO DE DATOS '
WRITE(*)*)' =================
WRITE(*,*)' INGRESE NUMERO DE PARES DE DATOS'
READ(*J*)N
WRITE(*,*)' PARES DE DATOS'
DO I=0,N-1
READ (*J*)X(I)~F(I)
END DO
WRITE(*J*)' INGRESE EL PUNTO A INTERPOLAR X'
READ{*J*)XX
WRITE(*,*)' =====================================
FX=0
DO I=0,N-1
Z=F(I)
DO J=0,N-1
IF {!.NE. J) Z=Z*(XX-X(J) )/(X(I) -X(J)) .
END DO
FX=FX+Z
END DO
WRITE ( * , * ) ' '
WRITE(*,*)' RESULTADO INTERPOLACION'
WRITE(*,*)' ========================
WRITE(*,10)FX
WRITE(*,*)' ========================
WRITE(*,15)N
10 FORMAT{3X,F9.5)
15 FORMAl(' PUNTOS EVALUADOS: ',F8.4)
END
142
Observaciones:
Donde Xm es el punto medio entre los extremos del intervalo de dominio [a, b],
por lo cual e(x) es aproximadamente proporcional a L(x), dada por la ecuación:
143
El desarrollo de las fórmulas de interpolación polinomial, requiere la aplicación
de las diferencias finitas, por lo cual es necesario definirla forma matemática de estas
en cada una de sus variantes.
Diferencias Finitas
Sea f(x) una función que depende de una variable, y siendo que los valores de
dicha función son discretos y _equidistantes:
La cantidad:
(5.8)
Los coeficientes de los términos son los coeficientes binomiales, los cuales permiten
generar la siguiente formula recursiva:
(5.9)
(5.10)
Las diferencias hacia tras de orden superior, se obtienen por aplicaciones sucesivas,
por ejemplo:
144
En general:
Las diferencias centrales, las cuales son simétricas con respecto a xk, las definimos
como:
(5.12)
2
o fk = fk+l - 2fk + fk-1
o3fk = fk+3/2- 3fk+ll2 + 3fk-112 - fk-3/2
4
o fk = fk+Z - 4fk+l + 6fk - 4fk-l + fk-2
órfk =i:C-1Y(rJf r
t k+--t
t=O 2
(5.13)
Para poder trabajar con diferencias centrales de orden impar, es necesario definir el
promedio central, tal que:
1
~k =2[fk+l/2 + fk-112]
2 1
¡.t fk = 2[,ufk+ll2 + ~k-112]
1
=¡[fk+l +2fk +fk_¡]
145
Aplicando el promedio central a las diferencias centrales de orden impar tenemos que
se requieren datos con índice entero.
1
~of k = [of k+ 1,.7 + of k- 1'.7 1
2
(5.14)
1
= 2 [ fk+1 - fk-1]
Suponiendo que las abscisas de los datos tienen una separación similar h, usando la
información de las diferencias es posible elaborar una tabla, donde cada renglón
proporciona un conjunto de diferencias hacia delante para los puntos interpolados,
dicho ordenamiento para el caso de cinco pares de datos, sería el mostrado en la tabla
(5.2).
( ~) = 1; G) = s; s)
(3
= ~s(s -1)(s- 2)
3!
146
Tabla (5.2), Diferencias divididas hacia adelante
""'' o,. . ,,,,,,,,.,,.i~''''' '"" '"' '"'"~(~'''""'' ,,, ···-~2j~''""'' ··············,;ji~''"" ,,,,,,,,,,;&4(~' ,,,,. . . ,,,, ''"~5(~''·'''''"""'""'"'···········-
3
L~?f1 i1 f1 .!14f1
2
3
4
5
Ejemplo;
(Cd)
Penetración 1 0.36
(cm)
147
INGRESO DE DATOS POR TECLADO
=====================================
INGRESE EL NUMERO DE PUNTOS A EVALUAR
7
INGRESE: X 1 SU IMAGEN: FX 1
0.0 5
INGRESE: X 2 SU IMAGEN: FX 2
0.06 4.985
INGRESE: X 3 SU IMAGEN: FX 3
0.12 4.970
INGRESE: X 4 SU IMAGEN: FX 4
0.18 4.955
INGRESE: X 5 SU IMAGEN: FX 5
0.24 4.940
INGRESE: X 6 SU IMAGEN: FX 6
0.3 4.926
INGRESE: X 7 SU IMAGEN: FX 7
0.36 4.911
MENU PRINCIPAL
N X DD O DD 1 DD 2 DD 3 DD 4 DD 5 DD 6
148.
Codificación:
COMMON H,J,X(100),FX(100),DD(100,100)
CALL PRINCIPAL
END
SUBROUTINE PRINCIPAL
COMMON H,J,X(100),FX(100),DD(100,100)
CHARACTER(50) RESP1,ARCHI
1 WRITE(*,*)''
WRITE(*,*)'PROGRA~~ TABLA DE DIFERENCIA PROGRESIVA'
WRITE(*,*)'================================================'
WRITE ( *, *) ' '
WRITE(*¡*)' MENU PRINCIPAL'
WRITE(*,*)' =====================================
WRITE ( *, *)' INGRESO DE DATOS POR ARCHIVO [ 1]'
WRITE(*J*)' INGRESO DE DATOS POR TECLADO [2]'
WRITE(*,*)' SALIDA POR PANTALLA [3]'
WRITE(*, *)' SALIDA POR IMPRESORA [ 4]'
WRITE(*,*)' SALIR DEL PROGRAMA [5]'
· WRITE(*,*)' =====================================
WRITE(*,*)' INGRESE SU OPCION [1-5]'
READ(*,*)RESP1
SELECT CASE (RESP1)
CASE (' 1')
J=0
IDtNT=1
WRITE(*,*)' INGRESO DE DATOS POR ARCHIVO'
WRITE(*,*)' =====================================
WRITE(*,*)' INGRESE NOMBRE Y RUTA DEL ARCHIVO DE'
WRITE(*,*)' ENTRADA'
READ(*,*)ARCHI
OPEN (1¡FILE=ARCHI)
DO I=1,100
READ (1,*,END=2)X(I),FX(I)
J=J+1
END DO
2 WRITE(*,S)J
S FORMAT(' NUM DATOS INGRESADOS CORRECTAMENTE:',I3)
WRITE(*,*)' PULSE CUALQUIER TECLA PARA CONTINUAR'
READ(*,*)RESP1
S~OSE(1)
GOTO 1
149
CASE (' 2')
IDENT~1
WRITE(*J*)' INGRESO DE DATOS POR TECLADO'
WRITE(*J*)' =====================================
WRITE(*;*)' INGRESE EL NUMERO DE PUNTOS A EVALUAR'
READ(*J*)J
DO I=1JJ
WRITE(*J3)IJI
READ(*J*)X(I),FX(I)
END DO
WRITE(*J*)' =====================================
3 FORMAT(' INGRESE: X',I3J' SU IMAGEN: FX' JI3)
WRITE(*,*)' DESEA MODIFICAR LOS DATOS [S o N]'
READ(*,*)RESP1
SÉlÉét éASE (RESPi)
CASE ('S')
GOTO 1
C~SE (' s')
GOTO 1
CASE DEFAULT
GOTO 1
END SELECT
CASE (' 3')
IF (IDENT.NE.1)GOTO 1
CALL CALCULO
CALL PRESENTACION
GOTO 1
CASE ('4')
IF (IDENT.NE.1)GOTO 1
CALL CALCULO
tALL íMPRi:síON
GOTO 1
CASE (' 5')
WRITE(*, *)''
WRITE ( * J*) ' GRACIAS POR USAR EL PROGRAMA'
STOP
CASE DEFAULT
GOTO 1
END SELECT
RETURN
END
150
SUBROUTINE CALCULO
COMMON H,J,X(100),FX(100),DD(100,100)
DO I=l,J
DD(l,I)=FX(I)
END DO
DO M=l,J-1
DO I=l,J-M
DD(M+l,I)=DD(M,I+l)-DD(M,I)
END DO
END DO
48 RETURN
END
SUBROUTINE PRESENTACION
COMMON H,J,X(100),FX(100),DD(100,100)
CHARACTER RESPl
IN=8
WR;HJ~(* ;*),'
WRITE(*,*)' RESULTADOS TABLA DE DIFERENCIAS PROGRESIVA'
WRITE(*,*)'===================================================='
WRITE(*,SS)IN 1 IN+1 1 IN+2 1 IN+3 1 IN+4,IN+5 1 IN+6
WRITE(*,*)'===================================================='
L=0
IF (J.LT.7)THEN
NM=8
ELSE
NM=J-7
END IF
DO I=l,J
L=L+l
WRITE(*,50)I,X(I),(DD(K,I);K=1;(~-NM)-(~-l))
IF(NM.GT.0)THEN
NM=NM-1
END IF
END DO
WRITE(*,*)'===================================================='
WRITE(*,*)'(SJ PARA SALIR/ CUALQUIER TECLA PARA CONTINUAR'
READ(*,*)RESP1
SELECT CASE (RESPl)
CASE ('S')
Gótó iéé
CASE (' s')
GOTO 188
END SELECT
IN=l
45 IF(J.GT.7+(IN-1))THEN
IN=IN+7
NM=J-(IN-1)
IF(NM.GT.7)THEN
NN=NM-7
KK=(IN-1)+NM
151
ELSE
NN=0
KK=J
END IF
L=e
WRITE(*,60)IN-1,IN,IN+l,IN+2,IN+3,IN+4,IN+S
WRITE(*,*)'===================================================='
DO I=1,NM
L=L+1
WRITE(*,65)I,(DD(K,I),K=IN,(KK-NN)-(L-1))
IF(NN.GT.0)THEN
NN=NN-1
END IF
END DO
WRITE(*,*)'===================================================='
WRITE(*,*)'[S] PARA SALIR/ CUALQUIER TECLA PARA CONTINUAR'
READ(*,*)RESP1
SEL~CT CASE (RESPl)
CASE ('S')
GOTO 100
CASE ('s')
GOTO 100
END SELECT
GOTO 45
END IF
WRITE(*,52)J
50 FORMAT(I3,F6.3,10F10.6)
52 FORMAT(' PUNTOS EVALUADOS:',I3)
55 FORMAT(' N X DD',I3,' DD',I3,' DD', 13, '
DD',I3,' DD',I3,' DD',I3,' DD',I3)
60 FORI\1AT(' N DD' ,B,' DD' ,B,' DD' ,B,' DD',I3,'
DD' J I3 J ' DD' J I3 J ' DD' J I3) .
65 FORMAT(I3,10F10.6)
100 WRITE(*;*)''
RETURN
END
SUBROUTINE IMPRESION
COMMON H,J,X(100),FX(100),DD(100,100)
IN=0
OPEN (1,FILE='LPT1')
WRITE(1, *)''
WRITE(1,*)' RESULTADOS TABLA DE DIFERENCIAS PROGRESIVA'
WRITE(1,*)'===================================================='
WRITE(1,550)IN,IN+1,IN+2,IN+3,IN+4,IN+S,IN+6
WRITE(1,*)'================p==================================='
L=0
IF (J. LT. 7)THEN
NM=0
ELSE
NM=J-7
END IF
152
DO I=1;J
L=L+1
WRITE(1,500)I,X(I),(DD(K,I),K=1,(J-NM)-(L-1))
IF(NM.GT.0)THEN
NM=NM-1
END IF
END DO
WRITE(1,*)'===================================================='
IN=1
45 IF(J.GT.7+(IN:1))THEN
IN=IN+7
NM=J-(IN-1)
IF(NM.GT.7)THEN
NN=NM-7
KK=(IN-1)+NM
ELSE
NN=0
KK=J
END I.F
L=0
WRITE(1,600)IN-1,IN,IN+1JIN+2,IN+3,IN+4,IN+5
WRITE(1,*)'===================================================='
DO I=l,NM
L=L+1
WRITE(1,650)I,(DD(K,I),K=IN,(KK-NN)-(L-1))
IF(NN.GT.0)THEN
NN=NN-1
END IF
END DO
WRITE(1,*)'====~==============================================='
GOTO 45
END IF
WRITE(1,520)J
500 FORMAT(I3,F6.3,10F10.6)
520 FORMAT(' PUNTOS EVALUADOS:' ,I3)
550 FORMAT(' N X DD',I3,' DD',I3,' DD',I3,'
DD',I3,' DD',I3,' DD',I3,' DD',I3)
600 FORMAT(' N DD' ,I3,' DD' ,I3,' DD' ,I3,' DD',I3,'
DD',I3,' DD',I3,' DD',I3)
650 FORMAT(I3,10F10.6)
WRITE(*, *)''
1000 WRITE(*,*)' IMPRESION DE DATOS TERMINADA'
CLOSE(1)
RETURN
END
153
TABLA DE DIFERENCIA REGRESIVA
MENU PRINCIPAL
154
RESULTADOS TABLA DE DIFERENCIAS REGRESIVA
N X DD O DD 1 DD 2 DD 3 DD 4 DD 5 DD 6
1 .000 5.000000
2 .060 4.9S5000 -.015000
3 .120 4.970000 -.015000 .000000
4 .180 4.955000 -.015000 .000000 .000001
5 .240 4.940000 -.015000 .000000 .000000 -.000001
6 .300 4. 926000 -.014000 . 001000 .001000 .001000 .001002
7 .360 4. 911000 -. 015000 -.001000 -.002000 -.003000 -.004001 -. 005002
Codificación:
La codificación que genera los resultados mostrados se presenta a
continuación:
AUTOR: LIC. JORGE LUIS GODIER AMBURGO
COMMON H,J,X(100),FX(100),DD(10@,1@@)
CALL PRINCIPAL
END
SUBROUTINE PRINCIPAL
COMMON M,J,X(100),FX(100),DD(10@,1@@)
CHARACTER(50) RESP1,ARCHI
1 WRITE(*,*)''
WRITE(*,*)' PROGRAMA TABLA DE DIFERENCIA REGRESIVA'
WRITE(*,*)' ============================================
WRITE(*,*)''
WRITE(*,*)' MENU PRINCIPAL'
WRITE(*,*)' =====================================
WRITE(*,*)' INGRESO DE DATOS POR ARCHIVO [1]'
WRITE(*,*)' INGRESO DE DATOS POR TECLADO [2]'
WRITE(*,*)' IMPRIMIR EN PANTALLA [3]'
WRITE(*,*)' SALIDA POR IMPRESORA [4]'
WRITE(*, *)' SALIR DEL PROGRAMA [5]'
WRITE(*,*)' =====================================
WRITE(*,*)' INGRESE SU OPCION [1-5]'
READ(*,*)RESP1
SELECT CASE (RESP1)
CASE (' 1')
J=@
I=@
IDENT=1
WRITE ( *, *) ' INGRESO DE DATOS POR ARCHIVO'
WRIH(* ,*)' =====================================
WRITE ( *, *) ,· INGRESE NOMBRE V RUTA DEL ARCHIVO DE'
WRITE ( * , * ) ' ENTRADA'
155
READ(*,*)ARCHI
OPEN (1,FILE=ARCHI)
DO I=1,100
READ (1,*,END=2)X(I),FX(I)
]::::;]+1
END DO
2 WRITE(*,5)J
5 FORMAT(' NUM DATOS INGRESADOS CORRECTAMENTE:' 1 I3)
WRITE(*,*)' PULSE CUALQUIER TECLA PARA CONTINUAR'
READ(*,*)RESP1
CLOSE(1)
GOTO 1
CASE (' 2')
IDENT=1
WRITE(*,*)' INGRESO DE DATOS POR TECLADO'
WRITE(*,*)' =====================================
WRITE(*,*)' INGRESE EL NUMERO DE PUNTOS A EVALUAR'
READ(*,*)J
DO I=1,J
WRITE(*,3)I,I
R~AD(*,*)X(I),FX(I)
END DO
WRITE(*,*)' =====================================
3 FORMAT(' INGRESE: X',I3,' SU IMAGEN: FX' ,I3)
WRITE(*,*)' DESEA MODIFICAR LOS DATOS [S o N]'
READ(*,*)RESP1
SELECT CASE (RESP1)
CASE ('S')
GOTO 1
CASE (' s')
GOTO 1
CASE DEFAUL T
GOTO 1
~ND SELECT
CASE (' 4')
IF (IDENT.NE.1) GOTO 1
OPEN (1,FILE='LPT1')
CALL CALCULO
CALL IMPRESION
GOTO 1
CASE (' 3')
IF (IDENT.NE.1) GOTO 1
CALL CALCULO
CALL PRESENTACION
GOTO 1
CASE ('5')
WRITE(*, *)''
WRITE(*,*)' GRACIAS POR USAR EL PROGRAMA'
STOP
CASE DEFAUL T
GOTO 1
END SELECT
RETURN
END
156
SUBROUTINE CALCULO
COMMON H,J,X(188),FX(188),DD(l88,188)
DO I=1,J
DD(1,I)=FX(I)
ENO DO
DO M=1,J-1
DO I=1,J-M
DD(M+1,I)=DD(M,I+l)-DD(M,I)
END DO
END DO
48 RETURN
END
SUBROUTINE PRESENTACION
COMMON H,J,X(188),FX(188),DD(188,188)
CHARACTER RESPl
IN=8
WRHE ( *, *) ' '
WRITE(*,*)' RESULTADOS TABLA DE DIFERENCIAS REGRESIVA'
WRITE(*,*)'===================================================='
WRITE(*,55)IN,IN+1,IN+2,IN+3,IN+4,IN+5,IN+6
WRITE(*,*)'===================================================='
NM=J
DO I=l,J
WRITE(*,58)I,X(I),(DD(K+1,I-K),K=8,J-NM)
IF (I.GT. 6)THEN
NM=J-6
ELSE
NM=NM-1
END IF
END DO
WRITE(*,*)'===================================================='
WRITE(*,*)'[S] PARA SALIR/ CUALQUIER TECLA PARA CONTINUAR'
READ(*,*)RESP1
SELECT CASE (RESP1)
CASE ('S')
GOTO 188
CASE (' s')
GOTO 188
END SELECT
IN=1
45 IF(J.GT.6+IN)THEN
IN=IN+6
NM=IN+1
WRITE(*,68)IN,IN+1,IN+2,IN+3,IN+4,IN+S,IN+6
WRITE(*,*)'===================================================='
DO I=NM,J
WRITE(*,65)I,(DD(K+1,I-K),K=IN,(2*IN+1)-NM)
IF (I.GT.IN+6)THEN
ELSE
NM=NM-1
END IF
END DO
157
WRITE(*,*)'===================================================='
WRITE(*,*)'[S] PARA SALIR/ CUALQUIER TECLA PARA CONTINUAR'
READ(*,*)RESP1
SELECT CASE (RESP1)
CASE ('S')
GOTO 100
CASE (' s')
GOTO 100
END SELECT
IN=IN+1
GOTO 45
END IF
WRITE(*,52)J
50 FORMAT(I3,F6.3,100F10.6)
52 FORMAT{' PUNTOS EVALUADOS:' ,I3)
55 FORMAT(' N X DD',I3,' DD',I3,' DD',I3,'
DD',I3,' DD',I3,' DD',I3,' DD',I3)
60 FORMAT(' N DD' ,!3,' DD' ,!3,' DD' ,!3,' DD',I3,'
DD' J I3 J ' DD' J I3 J ' DD' J I3)
65 FORMAT(I3,100F10.6)
100 WRITE ( *, *) ' '
RETURN
END
SUBROUTINE IMPRESION
COMMON H,J,X{100),FX{100),DD(100,100)
IN=0
WRITE(1,*)''
WRITE(l,*)' RESULTADOS TABLA DE DIFERENCIAS REGRESIVA'
WRITE(1,*)'===================================================='
WRITE(1,550)IN,IN+1,IN+2,IN+3,IN+4,IN+5,IN+6
WRITE(1,*)'===================================================='
NM=J
DO I=1,J
WRITE(1,500)I,X(I),(DD(K+1,I-K),K=0,J-NM)
IF (I.GT. 6)THEN
NM=J-6
ELSE
NM=NM-1
END IF
END DO
WRITE(1,*)'===================================================='
IN=1
450 IF(J.GT.6+IN)THEN
IN=IN+6
NM=IN+1
WRITE(1,600)IN,IN+1,IN+2,IN+3,IN+4,IN+S,IN+6
WRITE(l,*)'===================================================='
DO I=NM,J
WRITE(1,650)I,(DD(K+1,I-K),K=IN,(2*IN+1)-NM)
IF (I.GT.IN+6)THEN
158
ELSE
NM=NM-1
END IF
END DO
WRITE(l,*)'===================================================='
IN=IN+1
GOTO 458
END IF
WRITE(1,528)J
588 FORMAT(I3,F6.3,18F18.6)
528 FORMAT(' PUNTOS EVALUADOS: ',!3)
558 FORMAT(' N X DD',I3,' DD',I3,'
DD',I3,' DD',I3,' DD',I3,' DD',I3)
688 FORMAT( ' N DD' , I3, ' DD' , I3, ' DD' , I3, ' DD' ,I3,'
DD',I3,' DD',I3,' DD',I3)
659 FORMAT(I3,19F19.6)
1eee WRITE(1,*)''
CLOSE(1)
RETURN
END
(5.16)
159
Que al desarrollarse queda:
(5.17)
En este caso solo son necesarios 3 pares de datos para interpolación y el valor de x
(punto a interpolar) debe estar dentro del dominio dado.
(5.19)
En este caso son necesarios 4 pares de datos para interpolación.
160
Ejemplo a:
El valor de fix es en este caso igual a 0.2, por lo cual el valor de u es: 2.5 si
consideramos k= O, es decir Xo = 7.3.
2525 1
F3 (2.5) = (0.02) + (2.5)(0.045- 0.02) + · ( · - ) (0.06- 2(0.045) + 0.02) +
2
252 1 25 2
· ( .5 - )( · - ) (0.073- 3(0.06) + 3(0.045)- 0.02) = 0.06625
6 .
161
Los resultados computacionales para este ejemplo son los siguientes:
4
INGRESE EL PUNTO A INTERPOLAR X
7.8
INGRESE PARES DE DATOS
PUNTO 1
7.3 0.02
PUNTO 2
7.5 0.045
PUNTO 3
7.7 0.06
PUNTO 4
7.9 0.073
RESULTADOS
X FX
7.80000 .0662500
Codificación:
WRITE(*, *)''
WRITE(*,*)' INTERPOLACION FORMA DE NEWTON ADELANTE'
WRITE(*,*)' --------------------------------------
~~~~~~-~---~~---~------------------~~~
WRITE(*,*)' ESPACIAMIENTO UNIFORME ORDEN 3'
WRITE(*, *)''
WRITE(*,*)' INGRESE NUMERO DE PARES DE DATOS (MAX (4))'
WRITE(*,*)' ==========================================
5 READ(*,*)N
IF (N.GT.4) GOTO 5
113 WRITE(*,*)' INGRESE EL PUNTO A INTERPOLAR X'
READ(*,*)XP
162
WRITE(*,*)' INGRESE PARES DE DATOS'
DO I=l,N
WRITE(*,*)'PUNTO 'JI
READ (*,*)X(I),FX(I)
END PO
H=X(2)-X(1)
S=(XP-X(l))/H
IF((XP.GE.X(4)).0R.(XP.LE.X(1)))THEN
WRITE(*,*)' PUNTO A INTERPOLAR FUERA DE DOMINIO'
WRITE(*,*)' INGRESE NUEVAMENTE EL PUNTO A INTERPOLAR'
GOTO 10
END IF
FXP=FX(1)+S*(FX(2)-FX(1))+0.5*S*(S-1)*(FX(3)-
2*FX(2)+FX(1))+S*(0.166666)*(S-1)*(S-2)*(FX(4)-
3*FX(3)+3*FX(2)-FX(1))
WRITE(*,*)' RESULTADOS'
WRITE(*,*)' ========================
WRITE(*,*)' X FX'
WRITE(*,*)' ========================
WRITE(*,15)XP,FXP
15 FORMAT(6X,F10.5,3XJF12.7)
WRITE(*,*)' ========================
WRITE(*,20)N
20 FORMAT(' PUNTOS EVALUADOS: ',F8.4)
END
Ejemplo b:
Usando la fórmula del polinomio para los puntos mostrados en la tabla (5.4),
con m= 2, es:
163
Ahora, como x 0 = 1.0, t1x. = 0.5 y x = 1.7, entonces u = 1.4; luego, considerando el
desarrollo de los coeficientes binomiales, tendremos que él polinomio queda como:
En este punto evaluamos las diferencias divididas hacia adelante, donde r, va desde 1
hasta 2.
Introduciendo estas expresiones, el polinomio se transforma en:
4 4 1
F2 (1.7) = 0.0 + 1.4[0.17609] + 1. (1. - ) [0.3010- 2(0.17609)+ 0.0]
2!
Finalmente resolviendo, se obtiene:
F2 (l. 7) = 0.23219
Este valor es aproximadamente igual allog (1.7), con un error absoluto de ±1.74x10-3 y
un error porcentual de 0.7%.
164
Problemas de aplicación
1.0 0.0
1.5 0.17609
2.0 0.30103
3.0 0.47712
3.5 0.54407
4.0 0.60206
165
0.6
0.579
·-.-,..,••, •._........ .,•. -..,._ __ ._.,•., ••...~-'""·'"'"·'"""'"'•''""·'""'''·'"·'•·"'"'""''"''•••"·"······"· -.••.•.,.. •.••.•.• " ' ' ' ' ' ' ' .... "'''''''"'"'''""''"·'''''"'''".,.............................. _.., ..... , ......, ............. , •. ,,_.,.,.,......... , ••..h'••"""·'"''•''•'''''•'· ...····-............ , ...... ~ .... .,.. , ......... ..
(pulg.)
··oasíficacióñ; 1o5.'Ra'clsih···---7 \······· dL............. ".....•. :. :,.:<.:....................
1úr < 2.39 •·· ·.·.·. 2;11<
L~.Li_ ) .......,3.25
2.98 ·..·.··.··•······.·3,2·
...........
Cargas adicionales en Kg
Lectura de la escala en mm
166
6.6 Capítulo VI
(6.17)
La ecuación {6.17), se puede representar mejor si truncamos los valores después del
primer término, es decir:
(6.18)
167
Las aproximaciones por diferencias para las derivadas de orden superior se
pueden obtener mediante combinaciones lineales de los desarrollos de Taylor,
aumentando en complejidad conforme se incrementa el número de puntos o el orden
de ia derivada. El algoritmo genérico para obtener una aproximación por diferenclas
de una derivada de un orden dado, utilizando un conjunto específico de puntos en una
ietícula, establece lo siguiente:
Si el número total de puntos en la retícula es L, debe cumplir que: 2p+1 ;::: L;:::
p+1, donde p es el orden de la derivada por aproximar, esto para mantener la
estabilidad y minimizar el error acumulado por redondeo y truncamiento.
Los puntos están numerados con los sub. Índices i = a, f3, y, ......... , 'A las
abSCiSas dé lóS pUntOS dé lá retíCUla son: X¡ = ah, f3h, yh, ......... , 'Ah, es decir
usaremos puntos con separación uniforme.
Para calcular la primera derivada hacemos que: p=1, L=3, cx.=O, f3=1 y y=2, y usando
la ecuación (6.19), escribimos.
168
Como primer paso sustituimos los desarrollos de Taylor de f1 y f 2 alrededor de Xo = O
en la ecuación (6.21) para obtener:
(6.22)
Reagrupando términos tenemos:
a 0 +a 1 +a 2 =O
0+a 1 +2a 2 =1
0+a1 +4a 2 =O
'= _!_ [- ~
f oh 20f + 2f1 - _!_
22 f ] +E (6.24)
Dónde:
169
Para calcular la segunda derivada utilizamos: p=2, L=3 (cumple que: L ~ p+1),
entonces nuevamente a= O, f3 = 1 y y= 2, y según la ecuación (6.20), tenemos que:
f o "= aofo
h"
~~f llfo 1+ hz f"
- + - 1 o+
h" L ~
o +
~fo 111+.. + ~[f
2 6
2
lJ
o+
2llfo 1+ 4hz f"
11 ~
o +
2 · 6
lJ
8h3 f o 111+..... + E
170
La tercera derivada requiere que: p = 3, L = 4 (cumple que: L ~ p+1), entonces ahora:
cx.=O, ~=1, y=2 y 8=3, y según la ecuación (6.20), tenemos que:
f_ "'= ~+- 1
h3 f_
a f a [
+ hf_ '+-f- "+-L
h
"'+ + -
2
2 h
3
l a 1
1 f_ +?.hf_ ' + - L "+-L "'+
4h
2
8h
3
l
-u h3 -u · - u
2
-u •
6 -u · ""j · h3 L-u ·· ---u · 2 -u 6 -u •»nj
2 3
a ff o+ 3hfo
+-¡
3 ,+9h- f o , +27h
- - f o ,,+. ....] + E
3
h L 2 6
a1 9
0+-+2a 2 +-a 3 =0
2 2
1 4 9
0+-a 1 +-a 2 +-a 3 =1
6 3 2
(6.26)
171
La fórmula (6.26), es la solución al desarrollo de Taylor para la aproximación por
diferencias de la Tercera derivada.
Ejemplo:
·¡ t =o
· k= 25 N/m .J-._, :------- 1
-~ 1 kg j----------~ :
' - - EIQ- 1 ~e
x =-3 cm x =O
x(t)=3cos(~~ t+~)
Esta ecuación fue sometida a las fórmulas para la primera, segunda y tercera
derivada vistas anteriormente, obteniéndose el siguiente resultado:
172
Codificación:
REAL(4) X{18),Y(18),H
173
Problemas de aplicación
X f(x)
0.398 0.408591
0.399 0.409671
0.400 0.410752
0.401 0.411834
0.402 0.412915
x f(x)
1.2 1.5095
1.3 1.6984
1.4 1.9043
1.5 2.1293
1.6 2.3756
174
k
175
6.7 Capítulo VIl
7. Integración Numérica
I = rf(x)dx (7.1)
.. Una función simple y continua tal como un polinomio, una función exponencial
o una función trigonométriea.
e Una función complicada y continua que es difícil o imposible de integrar
directamente.
• Una función tabulada en donde los valores de x y f(x) se dan en un conjunto de
puntos gi~Gretos, como es el caso a menudo, de o:atos experimentales.
176
Se puede escribir de la siguiente manera:
b-a
I= r"• f(x)dx = -_-[f(a)+f(b)]+
h
;¿
E (7.2)
f(b)
f(a)~
·~ . y=t(x)
f 1
,.1.
b X
Figura (7.2). Integración con regla del trapecio, extendida a varios intervalos.
177
En este caso a = Xo y b = X4, el área total será la suma de las áreas de cada sub-
intervalo, es decir:
h
A 1 ="2[f(a)+f(x1 )]
A2 =~[f(x 1 )+f(x 2 )]
2
A 3 = h [f(x 2 )+f(x 3 )]
2
,_
A 4 = ~[f(x 3 ) + f(b)]
2
b h N-1
Atot = { f(x)dx = -[f(a) + 2Lf(a + jh) + f(b)] +E (7.3)
-" 2 j=l
178·
Ejemplo:
3
Calcular desde 7 hasta 9 la integral de la función: y= xsen (x), emplee un
INGRESO DE DATOS
RESULTADOS
Codificación
REAL(4) A,B,H,AINTEG
S WRITE (*,*)''
WRITE (*,*)' PROGRArA METODO DEL TRAPECIO EXTENDIDO•
WRITE (*,*)' ===========================================
WRITE (*,*)''
t•JRITE f*
\ ) *''
1 INGRESO DE DATOS'
WRITE (*,*)'
WRITE (*,*) 1 INGRESE EL LIMITE INF.j LIMITE SUP. [A,B]'
READ {*,*)A,B
WRITE (*,*) 1 NUMERO DE INTERVALOS N '
READ (*,*)N
WRITE (*,*)'
WRITE (*,*)''
H=(B-A)/N
179
FA=F(A)
FB=F(B)
A1=0
DO J=1,(N-1)
Al=Al+'F(A+H*J)
END DO
AINTEG=(0.5*H)*(FA+FB+(2*A1))
WRITE(*, *)' RESULTADOS'
WRITE(*,*)' -----------------------
WRITE(*,15)A,B,H
WRITE(*,*)' EL VALOR DE LA INTEGRAL'
WRITE(*,12)AINTEG
12 FORMAT(9X,F9.6)
15 FORMAT(9X, 'LIM INF: ',F9.6,' LIM SUP: ',F9.6,' ANCHO DE PASO
H: ',1"9.4)
WRITE(*,*)' -----------------------
END
FUNCTION F(X)
F=x*(SIN(X))**3
RETURN
END
Y ajustada a un intervalo [a, b], subdividido en dos sub-intervalos de ancho h, tal como
se muestra en la figura (7.3).
t2
---=~-y = f(x)
~ii:J~IIII
--~..:.==;;;.;.;.;.;..._........,....._..__
x 0 =a
X
Figura (7.3). Integración con Regla 1/3 de Simpson para dos sub=intervalos.
180
Para la deducción de la Regla 1/3, asumiremos un ancho de sub-intervalo igual
a la unidad (h = 1) con a= O y b = 2, es decir que: xk = a= O, xk+1 = 1 y, xk+2 = 2, para k
= O; luego, considerando que s = (x- xk)/h se puede hacer lo siguiente:
1
ds = -d(x-xk) ~ hds = dx
h
Por lo cual:
Resolviendo:
2 2 2 2 (s 2 -s) .
h 1
o o1 1
F2 (s)ds = hfk ds + (fk+l - fk )h sds + (fk+Z - 2fk+l + fk )h
o 1
o 2
ds
h h
=3[fk +4fk+l +fk.r2]=3[f(0)+4f(l)+f(2)]
b h
I=
l f(x)dx = -[f(a)
a 3
+ 4f(< x >) + f(b)] +E (7.4)
<x>, es el punto medio del intervalo e igual a (a+b)/2; según esto, es posible extender
ia regla 1/3 de Simpson, para N sub-intervalos (donde N es par').
181
1 XQ =a X2 X3 X4.X5 X6=b X
xl
Figura (7.4). Integración con Regla 1/3 de Simpson para N= 6 sub-intervalos.
Aquí: a = x 0 y b = x 6 , el área total será la suma de las áreas de cada par de sub-
intervalos, es decir:
Pero dado que: x 1 =a+ h, x2 =a+ 2h, x 3 =a+ 3h, ..... y siendo que está usándose un
ancho de paso constante h, la fórmula recursiva queda como:
h N-1 N-2
A 101 =-[f(a)+4
3
L
i=l
f(a+ih)+2 Lf(a+ jh)+f(b)]+E
j=2
(7.5)
(impares) (pares)
182
El error en la regla 1/3 de Simpson decrece en forma proporcional a h5 , donde
nuevamente el error es la suma de los errores en todos los intervalos y puede ser
aproximado por:
Ejemplo:
-2 X 01 X 2 X
u_
A-
r a
AreadeR
xC(x)dx .
'
y =
ryC(y)dy
=Cc____ _
AreadeR
Además, el área de una región limitada por dos curvas está dada por la fórmula:
183
En este caso tenemos que la integral del área es:
2
Area= f
~2
(4-x 2 )dx=10.66666
- r~ x(4-x 2 )dx
X= =--...=ck_ _ __
o
---=0 y
- fy(2-JY )dy
y=- =
25.6 ,., .
=L4
r2 (4-x2)dx 10.66666 f/4-xz)dx 10.66666 ·
Los resultados computacionales con la Regla 1/3 de Simpson extendido para N = 400
son:
METODO DE SIMPSON UN TERCIO EXTENDIDO
INGRESO DE DATOS
EL VALOR DE LA INTEGRAL
10.666560 NOTA, FUNCION: F=4-x**2
EL VALOR DE LA INTEGRAL
.000000 NOTA, FUNCION: F=4*x-x**3
EL VALOR DE LA INTEGRAL
25.5997 NOTA, FUNCION: F=y*2*SQRT(y)
184
Codificación:
La codificación que genera los resultados mostrados es la siguiente:
!AUTOR: LIC. JORGE LUIS GODIER AMBURGO
REAL(4) H,A,B,AREAT
FUNCTION F(X)
!F,..4-X**2
!F=4*X-X**3
F=X*2*SQRT(X)
RETURN
END
185
7.3 Regla 3/8 de Simpson
Y ajustada a un intervalo [a, b], subdividido en tres sub-intervalos de ancho h, tal como
se muestra en la figura (7.6).
. ~ 1) it:<2)
~~
1 llfb;~f~f\., ;.~··',::>~ _:-:,~;:,:]
Figura (7.6). Integración con Regla 3/8 de Simpson para tres sub-intervalos.
1
ds =-:- . x,_) ~ hds = dx
h d(x- h"
186
Resolviendo:
A= i f(x)dx = -h[f(a)
a
b 3
8
'
+ f(b) + 3f(a + h) + 3f(b- h)]
187
Aquí: a = Xo y b = x 9 , el área total será la suma de las áreas de cada tres sub-
intervalos, es decir:
3
A 1 = h[f(a) + 3f(x 1 ) + 3f(x 2 ) + f(x 3 )]
8
3
A 2 = -h[f(x 3 ) + 3f(x 4 ) + 3f(x 5 ) + f(x 6 )]
8
A3 =~h[f(x 6 )+3f(x 7 )+3f(x 8 )+f(b)]
8
Resolviendo para el área total se tiene:
Sabemos que: x 1 = a+ h, x2 = a+ 2h, X:3 = a + 3h, ..... y siendo que está usándose un
ancho de paso constante h, la fórmula recursiva queda como:
(7.6)
188
Ejemplo:
Los resultados computacionales con la regla 3/8 de Simpson sori los siguientes:
INGRESO DE DATOS
H= 0.261799
RESULTADOS
EL VALOR DE LA INTEGRAL
2.414357
189
Codificación:
REAL(4) H,N,A,B,AREAT
WRITE (*,*)''
~~~JRITE (*, *) ' METODO DE SIMPS.ON TRES OCTAVOS'
WRITE (*,*)' ========================================'
WRITE (*, *) ' '
WRITE (*,*)' INGRESO DE DATOS'
WRITE (*,*)' -----------------------------------------'
WRITE (*,*)' INGRESE LOS LIMITES DE OPERACION [A,B]'
READ (*,*)A,B
WRITE (*,*)' INGRESE EL NUMERO DE INTERVALOS MULTIPLO DE 3'
READ(*,*)N
WRITE (*,*)' ---------------------------------------------'
WRITE (*,*)''
WRITE (*,*)''
H=(B-A)/N
FA=F(A)
FB=F(B)
AREA1=0
AREA2=0
AREA3=0
DO J=2,N-1,3
AREA1=AREA1+F(A+J*H)
END DO
DO I=1,N-2,3
AREA2=AREA2+F(A+I*H)
END DO
DO M=3,N-3,3
AREA3=AREA3+F(A+M*H)
END DO
AREAT=(H*0.375)*(FA+FB+3*AREA1+3*AREA2+2*AREA3)
WRITE (*,13)H
WRITE (*,*)' RESULTADOS'
~·JRITE 1*
\ , *'
1 1 -----------------------'
190
FUNCTION F(X)
F;::SIN(X)-COS(X)
RETURN
END
La cuadratura de Gauss que se extiende sobre el intervalo [-1, 1], está dada por:
1 N
f. f(x)dx = ). w J(xk)
.J-1 . . - . ~-
(7.8)
k=l
W¡
. . ·:·· .
.....-..
-~:,..,,.,.._, ._,,,.,_...... ,._,, ..-...... ~,..·· .
'"'~- ..-.-.·---····""·'''''"'~"""·"''''''' .......
1.0.·····
0.8889
0.5556
.
··. cr6s21·······.·····
..
·.···.
.. · .
·. 6.3479·.·. ·. ·.
0.5689
0.4786
0.2369
191
···~····•···~• ~-,--~-····.·.·.··o?i~é~§p··;~;:·5·:·?T7"9~4$7~'--············ . · . ·.
. • >'•· 6.éi.s48s·,•··.
;;; o. . . .~.E3~.Ó6. i> ·.·
0.2191
...... :'·.,:_:.-.:.
_
3.•··.··•.
0.1495
. ().~739()7 . 0.0667
,. -~-. . _ _ _ . . _ _ - ~ -:- :~.-:.~-: . __ ::.L:·uL~·:,~-:·<~~~-;~~-,~- . ~_. ,;_·:~~--~-
2z -a~ b
X=---- (7.9)
b-a
(b -a)x+a+ b
z=----- (7 .1 O)
2
b fl 1b-a~
f~ f(z)dz = ~ f(z)(dz/dx)dx = -2- ~
7. w 1 f(z.k)
.
(7.11)
192
dz (b-a)
Dónde:
dx 2
Ejemplo:
yl f(x.) = "2
f(xJ -- --
o V -~
193
CUADRATURA DE GAUSS-LEGENDRE N=10
PERHITE INTEGRAR HASTA GRADO 19
Codificación:
PROGRAM CUADRATURA_GAUSS_LEGENDRE
REAL(4) X(11),W(6),Z(11)
194
X(8)= -0.865063
~·J( 4) = e .1495
X(9)= 0.973907
X(10)= -0.973907
wcs)= e.e667
DO I=1J10
Z(I)=((B-A)*X(I)+A+B)*0.5
END DO
UNO=F(Z(l))*W(l)+F(Z(2))*W(l)
DOS=F(Z(3))*W(2)+F(Z(4))*W(2)
TRES=F(Z(S))*W(3)+F(Z(6))*W(3)
CUATRO=F(Z(7))*W(4)+F(Z(8))*W(4)
CINCO=F(Z(9))*W(S)+F(Z(10))*W(S)
AREA=(B-A)*0.5*(UNO+DOS+TRES+CUATRO+CINCO)
WRITE(*J*) 'PUNTOS DE GAUSS TRANSFORMADOS z(Xk)'
DO I=1J10
WRITE(*J10)Z(I)
END DO
WRITE(*J*) 'PESOS Wk'
DO I=lJS
l•JRITE(*) 10)l•J(I)
END DO
WRITE(*J*) 'AREA CALCULADA'
WRITE(*J10)AREA
WRITE(*J*)' LIMITES DE INTEGRACION AJB'
WRITE(*J10)AJB
10 FORMAT (2XJF9.5J1XJF9.5)
END
FUNCTION F(X)
F=3.1415926*X**4
RETURN
END
195
Problemas de aplicación
y¡
r.:: 2(1 + COS8"__....,.._...._
b. Hallar el volumen del sólido generado por la región plana encerrada por
la curva y = 6x - x2 - 8 y el eje x al girar alrededor del eje y, ver figura
(7.11).
196
c. Hallar el volumen V del sólido de revolución generado al rotar la región
comprendida entre las cuNas y =x 2
yy = x+2, alrededor del eje x, los
puntos de intersección son: (-1, 1) y (2, 4) ver figura (7.12).
197
6.8 Capítulo VIII
Una ecuación diferencial ordinaria (EDO), de primer orden puede escribirse como:
dy = f(x y) (8.1)
dx '·
Su solución general debe contener una constante arbitraria e, de modo que la función
solución es:
f(x,y,c) =O (8.2)
Donde para cada valor de e, existe una solución particular, analíticamente dicha
constante se obtiene exigiendo que la solución de esa ecuación pase por algún punto
(xo, Yo), es ciecir:
(8.3)
Esto significa que la variable y vale Yo, cuando la variable x vale Xo.
198
Dado que en la práctica gran cantidad de ecuaciones no pueden resolverse
analíticamente, se deberá recurrir a métodos numéricos. En lo que sigue veremos las
dos variantes del método de Euler para solucionar ecuaciones diferenciales ordinarias,
cuando se conocen las condiciones iniciales.
Una gran parte de los métodos numéricos para solucionar las ecuaciones
diferenciales parciales parabóiicas e hiperbóiicas que son mucho más complicadas
que las ecuaciones diferenciales ordinarias se basan en los métodos de Euler y no en
los métodos Runge~Kutta o Predictor Corrector debido a su sencillez.
Este método se obtiene rescribiendo la aproximación por diferencias hacia
adelante, lo cual matemáticamente se logra dividiendo el intervalo de análisis que va
de Xo a Xt en n sub-intervalos de ancho h, es decir:
(8.4)
La condición inicial Y(Xo) =Yo, representa el punto Po = (Xo, Yo) por donde pasa la curva
solución de la ecuación diferenciaL Con el punto Po se puede evaluar la primera
derivada de f(x) en ese punto, es decir:
(8.6)
Con esa información se traza una recta, aquella que pasa por p0 y de pendiente
figura (8.1).
199
y t
f(x)/
, /f(Xo,Yo)
y, l---------- -i
Yo f---!'.?_ : h
¡:
+ :---:,
1 1
(8.7)
Entonces:
(8.8)
ó bien:
(8.9)
Como el valor de y 1 sirve para aproximar f(x) en el punto p 1 = (x1, y1), es posible repetir
el proceso anterior generando la sucesión de aproximaciones siguientes:
Y1 =yo +hf(xo,Yo)
y2 =y¡ +hf(x~>yi)
(8.10)
200
Ejemplo:
dv
100-. + 0.05v + 85-490 =O
dt
INGRESO DE DATOS
RESULTADOS
X Y(X)
.000000 .000000
l. 000000 4.050000
2.000000 8.097975
3.000000 12. L43930
4.000000 16.187850
5.000000 20.229760
6.000000 24.269650
7.000000 28.307510
8.000000 32.343360
9.000000 36.377190
10.000000 40.409000
201
Codificación:
1e WRITE(*,*)''
WRITE(*,*)' SOLUCION DE E.D.O. METODO EULER HACIA ADELANTE'
WRITE(*;*)' =====~~=======~~==============================
WRITE(*, *)''
WRITE(*,*)' INGRESO DE DATOS'
WRITE(*,*)' ----------------------------------------------
WRITE(*,*)' INGRESE EL NUMERO DE PUNTOS (N)'
READ(*,*)N
WRITE(*,*)' INGRESE LOS LIMITES DE OPERACION [A,B]'
READ(*,*)A,B
WRITE(*,*)' INGRESE LAS CONDICIONES INICIALES (Xe,Ve)'
READ(*,*)Xe,ve
XK(l)=Xe
VK(l)=Ye
H=(B-A)/N
00 I=2,N+í
YK(I)=YK(I-l)+H*F(XK(I-l),YK(I-1))
XK(I)=XK(I-l)+H
ÉND DO
WRITE(*,*)' RESULTADOS'
WRITE(*,*)' ----------------------
WRITE(*,*)' ======================
WRITE(*,*)' X V(X)'
WRITE(*,*)' ======================
DO J=1_,N+1
WRITE(*,2e)XK(J),VK(J)
END DO
2e FORMAT(2X,F1e.6,4X,F1e.6)
WRITE(*,*)' ======================
END
FUNCTION F(X,V)
F~4.es-e.eees*v+e.e*x
RETURN
END
202
8.3 Método de Euler modificado
xn+l
Yn+l=Yn+ JXn
f(x,y)dx
(8.11)
(8.12)
(8.13)
k+! k
y n+l k+l
-y n *1.1.-v-v--
(\(\ - t>
'"'a
0/~ <' es 0/.0
rv ~ /-'(
Yn+l
203
Donde ea% es el error porcentual relativo alcanzado y e5 % es el error porcentual
relativo solicitado. Luego de esto puede cambiar el subíndice n y repetir el esquema
hasta alcanzar el total de puntos requeridos.
Ejemplo:
204
RESULTADOS POR ITERACION
PUNTO NRO. 2
ITERACION NRO. 1
1.000000 29.000000 72.413800
ITERACION NRO. 2
1.000000 36.350000 20.220080
ITERACION NRO. 3
1.000000 33.777500 7.616012
ITERACION NRO. 4
1.000000 34.677880 2.596397
ITERACION NRO. 5
1.000000 34.362740 .917075
ITERACION NRO. 6
1.000000 34.473040 .319955
ITERACION NRO. 7
1.000000 34.434440 .112111
ITERACION NRO. 8
1.000000 34.447950 . .039223
PUNTO NRO. 3
ITERACION NRO. 1
2.000000 24.339120 41.477770
ITERACION NRO. 2
2.000000 27.872480 12.676880
ITERACION NRO. 3
2.000000 26.635800 4.642914
ITERACION NRO. 4
2.000000 27.068640 l. 599040
ITERACION NRO. 5
2.000000 26.917140 . 5 62820
ITERACION NRO. 6
2.000000 26.970170 .196603
ITERACION NRO. 7
2.000000 26.951610 .068859
PUNTO NRO. 4
ITERACION NRO. 1
3.000000 22.078990 22.153100
ITERACION NRO. 2
3 . .00.00.0.0 23.79.0900 7.195667
ITERACION NRO. 3
3.000000 23.191730 2.583553
ITERACION NRO. 4
3.000000 23.401440 .896138
ITERACION NRO. 5
3.000000 23.328040 .314629
ITERACION NRO. 6
3.000000 23.353730 .109996
ITERACION NRO. 7
3.0.0.0000 23.344740 .038515
PUNTO NRO. 5
ITERACION NRO. 1
4.000000 21.000270 11.206790
ITERACION NRO. 2
4.000000 21.823980 3.774331
205
ITERACION NRO. 3
4.000000 21.535690 1.338697
ITERACION NRO. 4
4.000000 21.636590 .466360
ITERACION NRO. 5
4.000000 21.601270 .163493
ITERACION NRO. 6
4.000000 21.613640 . 057193
PUNTO NRO. 6
ITERACION NRO. 1
5.000000 20.488420 5.431644
ITERACION NRO. 2
5.000000 20.877920 l. 865615
ITERACION NRO. 3
5.000000 20.741590 . 657258
ITERACION NRO. 4
5.000000 20.789310 .229513
ITERACION NRO. 5
5.000000 20.772610 .080398
PUNTO NRO. 7
ITERACION NRO. 1
6.000000 20.225940 2.785383
ITERACION NRO. 2
6.000000 20.423120 .965474
ITERACION NRO. 3
6.000000 20.354100 . 3390 65
ITERACION NRO. 4
6.000000 20.378260 .118532
ITERACION NRO. 5
6.000000 20.369800 .041500
PUNTO NRO. 8
ITERA.CION NRO. 1
7.000000 20.107980 l. 344118
ITERACION NRO. 2
7.000000 20.202580 .468242
ITERACION NRO. 3
7.000000 20.169470 .164157
ITERACION NRO. 4
7.000000 20.181060 .057425
PUNTO NRO. 9
ITERACION NRO. 1
8.000000 20.058370 .553861
ITERACION NRO. 2
8.000000 20.097260 .193475
ITERACION NRO. 3
8.000000 20.083650 . o677 61
PUNTO NRO. 10
ITERACION NRO. 1
9.000000 20.020330 .384236
ITERACION NRO. 2
9.000000 20.047260 .134303
ITERACION NRO. 3
9.000000 20.037830 .047032
PUNTO NRO. 11
206
ITERACION NRO. 1
10.000000 20.008050 .195949
ITERACION NRO. 2
10.000000 20.021770 . 068542
RESULTADOS
X Y(X)
.000000 50.000000
1.000000 34.447950
2.000000 26.951610
3.000000 23.344740
4.000000 21.613640
5.000000 20.772 610
6.000000 20.369800
7.000000 20.181060
8.000000 20.083650
9.000000 20.037830
10.000000 20.021770
.;;::;:::::::.=_=;::::;;::::;:::;:::::;:::::;:::;:::::;::::::;:::;::=;:::;;::::::;:::::;:::::;:;;;;;;;~;;:
Gráfica:
La grafica generada con los resultados mostrados es la siguiente:
. 207
Codificación:
REAL(4) X8JV8JAJBJHJNJYK(1888)JXK(1888)
18 WRITE(*J*)''
WRITE(*'J*')' SOLUCION DE E.D.O. METODO EüLER MODifi(ADO'
WRITE(*J*)' =========================================='
WRITE ( * J *) ' '
WRITE(*J*)' INGRESO DE DATOS'
WRITE(*J*)' -------------------------------------------
WRITE(* J *)' INGRESE EL TOTAL DE PUNTOS (N)'
R~A!J{*,*)N
WRITE(*J*)' INGRESE LOS LIMITES DE OPERACION [AJB]'
READ(*J*)AJB
WRITE(*J*)' INGRESE LAS CONDICIONES INICIALES {X8JV8)'
READ(*J*)X8JV8
WRITE(*J*)' INGRESE ERROR PORCENTUAL SOLICTADO (ES)'
READ(*J*)ES
WRITE(*J*)' ------------------------------------------
H=(B-A)/N
XK(1)=X8
Yk(i}=Y~
YY=Y8
OPEN(1JFILE='EULERMOD.TXT')
WRITE(*J*)' RESULTADOS POR ITERACION'
WRITE(*J*)' ------------------------
DO I=2JN+1
1\JN~l
WRITE(*J*)' PUNTO NRO. 'JI
XK(I)=XK(I-1)+H
15 YK(I)=YK{I-1)+(H*8.5)*(F{XK(I-1),YK(I-1))+F(XK(I),VV))
EA=ABS((YK(I)-VV)/VK(I))*188
WRITE(*J*)' ITERACION NRO. 'JNN
WRITE(*J128)XK(I)JVK(I)JEA
IF(EA.GT.ES)THEN
YY=YK(I)
NN=NN+1
GOTO 15
END IF
END DO
J..JRITE ( *,; *) ' RESUL TJmOS'
WRITE ( * J*) ' ======================
WRITE ( * J * ) ' X Y(X)'
WRITE{*J*)' ======================
208
DO J=1,N+1
WRITE(*,20)XK(J),YK(J)
WRITE(1,20)XK(J),YK(J)
END DO
2@ FQRM~T(2X,fl@,6,4X,Fl0.6)
120 FORMAT(2X,3(1X,F10.6))
WRITE(*,*)' ======================
END
FUNCTION F(X,Y)
F=-0.7*Y+14+0.0*X
RETURN
END
IXn
xn+l
Yn+I=Yn+ f(x,y)dx
(8.14)
209
En la ecuación (8.14) Yn+ 1 es una incógnita, y aparece en el segunto termino al lado
derecho de la ecuacion por lo que lo aproximamos mediante f(xn+ 1,<Yn+ 1>), donde
<yn+1> es la primera estimación de Yn+1 obtenida mediante el método de Euler hacia
adeiante. E.ste esquema se conoce como eí metodo de R.unge-K.utta de segundo orden
y se resume como:
Xn+l=Xn+h
Ejemplo:
L=1H
V L..____.
R=5 Ohm
F"igu¡a (8.2). CiíCuito r:tL.
210
Los resultados computacionales son los siguientes:
INGRESO DE DATOS
RESULTADOS
X F (X)
.0000 .000000
.0667 . 53720.8
.1333 .859936
.2000 .975807
. 2667 .903230
.3333 . 672700
.4000 .325851
. 4667 -.087393
.5333 -.513061
. 60 00 -.898170
. 6667 -1.195901
. 7.333 -l. 3702.85
.8000 -l. 399818
. 8667 -l. 279581
.9333 -1.021609
1.0000 -.653432
211
Gráfica:
La grafica generada con los resultados mostrados es la siguiente:
1.5
Codificación:
PROGRAM RUNGEKUTTA_20RDEN
10 WRITE(*J*)''
WRITE(*J*)' SOLUCION DE E.D.O. METODO RUNGÉ KUTTA 2 ORDEN'
WRITE(*J*)' ============================================='
WRITE(* J *)''
WR!TE(*;*)' INGRESO DE DATOS'
WRITE(*J*)' ---------------------------------------------
WRITE(*J*)' INGRESE EL NUMERO DE PUNTOS (N)'
READ(*J*)N
WRITE(*J*)' INGRESE LOS LIMITES DE OPERACION [AJB]'
READ(*J*)AJB
WRITE(*J*)' INGRESE LAS CONDICIONES INICIALES (X0JV0)' .·
READ(*J*)X0JV0
WRITE(*J*)' ---------------------------------------------'
WRITE(* J *)''
XK(l)=X0
YK(l)=Y0
212
H=(B-A)/N
DO L=l,N+l
XK(I+l)=XK(I)+H
YY=YK(I)+H*F(XK(I),YK(I))
YK(I+l)=YK(I)+(e,5)*H*(F(XK(I),YK(I))+F(XK(I+l),YY))
END DO
OPEN(l,FILE='RK2.TXT')
WRITE(*,*)' RESULTADOS'
WRITE(*,*)' --------------------
WRITE(*,*)' ====================
WRITE(*,*)' X F(X)'
WRITE(*,*)' ====================
DO I=l,N+l
WRITE(*,28)XK(I),YK(I)
WRITE(i,20)XK(!),VK(t)
END DO
28 FORMAT(2X,F9.4,3X,F18.6)
END
FUNCTION F(X,V)
c-1~*rocr~*v)~s*v
1--~.v """ -" \ _, ' ' - •
RETURN
END
rb h
I= J, f(x)dx=-[f(a)+4f(<x>)+f(b)]
a 3
dy=+J,rx•+l fi'\x,y
t )dx
Iy n+l
JJJ X_g
rxn+l
y n+l =y n + J, f(x, y)dx
x.
213
Por lo cual se tiene que:
h
Yn+J =y_n +~[f(x_u,Y_u)+4f(x 1 ,<y _¡ >)+f(xD+l'<Yn+J >)] (8.16)
J n+- n+-
2 2
Donde <Yn+ 1> y <Yn+ 112 >, son estimaciones, que pueden obtenerse mediante el método
de Euler hacia adelante; entonces, para el caso de <Yn+1f2>, se aplica la siguiente
fórmula recursiva:
(8.17)
Ejemplo:
r= b(Ro)
T
dN =rN
dt
214
Si se sabe que N = 2200 individuos para t = 1 año, con Ro = 500 individuos/año y T =
60 años. Los resultados computacionales son:
INGRESO DE DATOS
RESULTADOS
t (años) Población en
Individuos
l. 000000 2200.000000
l. 450000 2409.737000
1.900000 2639.470000
2.350000 281é.ll.104000
2.800000 3166.728000
3.250000 3468.628000
3.700000 3799.311000
4.150000 4161.518000
4.600000 4558.257000
5.050000 4992.819000
5.500000 5468.810000
5.949999 5990.180000
6.399999 6561.254000
~.841é.lléJSJ§) 718~. 772000
7.299999 7871.924000
7.749999 8622.396000
8.199999 9444.413000
8.649999 10344.800000
9.099998 11331.020000
9.549998 12411.260000
9.999998 13594.490000
215
Codificación:
PROGRAM RUNGEKUTTA_30RDEN
19 WRITE(*,*)''
WRITE(*,*)' SOLUCION DE E.D.O. METODO RUNGE KUTTA 3 ORDEN'
WRITE(*;*)' =============================================
WRITE(*, *)''
WRITE(*,*)' INGRESO DE DATOS'
WRITE(* 1 *)' ---------------------------------------------
WRITE(*,*)' INGRESE EL NUMERO DE PUNTOS (N)'
READ(*,*)N
WRITE(*,*)' INGRESE LOS VALOR INICIAL Y FINAL DEL DOMINIO'
READ(*,*)A,B
WRITE(*,*)' INGRESE LAS CONDICIONES INICIALES (X9,V9)'
READ(*,*)xe,ve
WRITE(*,*)' ---------------------------------------------
WRITE(*, *)''
X(1)=X9
V(1\-VQ
1 ..LJ-tV
H=(B-A)/N
DO I=1,N+1
X(I+l)=X(!)+H
A=Y(I)+H*9.5*F(X(I),V(I))
B=Y(I)+H*F(X(I)+H*9.5,A)
Y(I+1)=Y(I)+H*9.33333*(F(X(I)!Y(I))+4*F(X(I)+9.5*H!A)+F(X(I+1)!B))
END DO
WRITE(*,*)' RESULTADOS'
WRITE(*,*)' --------------------
WRITE(*,*)' ====================
WRITE(*,*)' X F(X)'
WRITE(*,*)' ====================
DÓ J=i,N+i
WRITE(*,29)X(J),V(J)
ENDDO
20 FORMAT(2X,F9.4,3X,F19.3)
WRITE(*,*)' ====================
END
FUNCTION F(X,V)
F=9.1935*V+9.9*X
RETURN
END
216
8.6 Método de Runge-Kutta de cuarto orden
(8.19)
Dónde:
Ejemplo:
Los circuitos RC son arreglos que están compuestos por una resistencia y un
condensador. Se caracteriza por que la corriente puede variar con el tiempo. Cuando
ei tiempo es iguai a cero, ei condensador está descargado, en el momento que
empieza a correr el tiempo, el condensador comienza a cargarse ya que hay una
corriente en el circuito, ver figura (8.3).
217
La ecuación diferencial que determina la variación de carga respecto al tiempo para
este tipo de circuitos (durante el proceso de carga), es:
dq =V _ _j_
dt R. RC
Determine la variación de carga para t desde O hasta 1 seg. Si se sabe que cuando t =
O, q = O; además: V = 1O Voltios, C =2200 J..tF y R = 1OOQ. (Obtenga 15 puntos de
gráfica).
INGRESO DE DATOS
RESULTADOS
X F (X)
===================
.00000 .00000
.06667 .00038
.13333 .00075
.20000 .00112
.26667 .00148
.33333 .00184
.40000 .00219
. 4 6667 .00253
.53333 .00286
. 60000 .00320
.66667 .00352
.73333 .00384
.80000 .00415
.86667 . 0044.6
.93333 .00477
1.00000 .00506
218
Codificación:
PROGRAM RUNGEKUTTA_40RDEN
REAL(4) N,Xe,ve,A,B,H,Y(1000),X(1000)
10 WRITE(*,*)''
WRITE(*,*)' SOLUCION DE E.D.O. METODO RUNGE KUTTA 4 ORDEN'
WRITE(*;*)' =============================================
WRITE(*, *)''
WRITE(*,*)' INGRESO DE DATOS'
WRITE(*~*)' ---------------------------------------------
WRITE(*,*)' INGRESE EL NUMERO DE PUNTOS (N)'
READ(*,*)N
WRITE(*,*)' INGRESE LOS VALOR INICIAL Y FINAL DEL DOMINIO'
READ(*,*)A,B
WRITE(*,*)' INGRESE LAS CONDICIONES INICIALES (Xe,ve)'
READ(*,*)Xe,ve
WRITE(*,*)' ---------------------------------------------
WRITE(*, *)''
X(1)=X0
Y(l)=Y8
H=(B-A)/N
DO I=1,N+1
V(T~.--"1 \_V/T\--.-U
A.\.J.."T.J..)-A.\..l.JTti
A=H*F(X(I),Y(I))
B=H*F(X(I)+H*0.333333,V(I)+A*0.333333)
C=H*F(X(I)+H*8,666666;V(I)+A*8.333333+B*8.333333)
D=H*F(X(I)+H,Y(I)+A-B+C)
Y(I+1)=Y(I)+H*0.125*(A+3*B+3*C+D)
END DO
WRITE(*,*)' RESULTADOS'
WRITE(*,*)' --------------------
WRITE(*,*)' ====================
WRITE(*,*)' X F(X)'
WRITE(*,*)' ====================
DO J=1,N+1
WRITE(*,20)X(J),Y(J)
ENDDO
29 FORMAT(2X,F9.5,3X,F9.5)
~\IRITE ( *, *) ' ====================
END
FUNCTION F(X,V)
F=8.8*X+8.1-Y/0.22
RETURN
END
219
8.7 Solución de ecuaciones diferenciales ordinarias de orden superior
(8.20)
Para resolver (8.20) la mayor parte de las subrutinas de propósito general para
ecuaciones diferenciales suponen que una ecuación diferencial n-ésima se ha de
expresar como un sistema de n ecuaciones de primer orden, luego para una ecuación
de orden n dada en la forma:
(.8.21)
Yr =y
Y2 =y'
Y3 =y"
y 4 =y"' (8.22)
220
A continuación se deriva miembro a miembro la primera y se sustituye en la segunda,
y así sucesivamente, con lo que se tiene un sistema den ecuaciones de primer orden.
1
y 3 =y 4
(8.23)
Y'n-1 =yn
•n
= \x,y,y1 ,y11 , ...... ,y n-1) = 1C'{\x,y1,yz,Y3, ........ ,yn )
a-y 1C'{
Y1 n =--
dxn
1
Y 1 =f1(x,y1,yz, ........... ,yn)
u' - .f {""' Y1' Yz, ........... , Ynl\
Y 2 ·-.L2\A'
1
Y3 = f 3 (X, Y1' Y2 '· · · · · · · ·" ·' Yn ) (8.24)
1
Y n =fn(x,y1,y2, ........... ,yn)
(8.25)
Ejemplo:
221
Una EDO de 2do. Orden de forma general se escribe de la siguiente forma:
d2
Y''=----!=f{x. v. v') (8.26)
dx 2 '"'"'
La solución de las ecuaciones (8.27) con el método de Euler, generan las fórmulas
siguientes:
.(8-28)
,~-~=;
A=zn +hf(xn,Yn,zn)
B=yn +h(zn)
h
zn+l = zn +- [f(xn, y n, zn) + f(xn+l ,B, A)] (8.30)
2- -
h
Yn+l =yn +-[zn +A]
2
222
Usando los Métodos de Euler hacia Adelante y Runge - Kutta de 2do. Orden obtenga
la gráfica de la solución de la ecuación diferencial de movimiento del sistema masa-
resorte mostrado.
Donde p2 = Klm. El peso de la masa es 1O lb, la constante del resorte, K= 1.5 lb/pulg;
las condiciones iniciales son: to = O, x'o = O y Xo = 5 pulg. Calcule un total de 20 puntos
para un tiempo desde O hasta 5 segundos de oscilación. En este caso el avance o
ancho de paso será de 0.25.
(SEGUNDO ORDEN)
INGRESO DE DATOS
223
RESULTADOS
====================================
X Y(X) Z (X)
====================================
.000000 5.000000 .000000
.250000 5.000000 -.187500
.500000 4.953125 -.375000
.750000 4.859375 -.560742
1.000000 4. 719190 -.742969
1.250000 4.533447 -.919938
1.500000 4.303463 -1.089943
1.750000 4.030977 -1.251323
2.000000 3.718146 -1.402484
2.250000 3.367525 -1.541915
2.500000 2.982046 -1.668197
2.750000 2.564997 -1.780024
3.000000 2.119991 -1.876211
3.250000 1.650939 -1. 955711
3.500000 1.162011 -2.017621
3.750000 . 657606 -2. 06119"6
4.000000 .142306 -2.085856
4.250000 -.379158 -2. 091193
4.500000 -.901956 -2.076975
4.750000 -1.421200 -2.043151
5.000000 -1.931987 -1.989856
====================================
(SEGUNDO ORDEN)
INGRESO DE DATOS
224
RESULTADOS
====================================
X Y(X) Z (X)
====================================
.000000 5.000000 .000000
.250000 4.976563 -.187500
.500000 4.906360 -.373242
.750000 4.790051 -.555481
1.000000 L 628727 -.732504
1.250000 4.423904 -.902648
l. 500000 4.177505 -1.064313
1.750000 3.891845 -1.215981
2.000000 3.569607 -1.35 6225
2.250000 3.213818 -1.483728
2.500000 2.827821 -1.597291
2.750000 2.415243 -1.695847
3.000000 1.979960 -1.778469
3.250000 1.526061 -1.844381
3.5.0.000.0 l. .057813 -1.892963
3.750000 .579613 -1.923758
4.000000 .095957 -1.936476
4.250000 -.388612 -1.930997
4.500000 -.869539 -1. 907372
4.750000 -l. 34230 6 -1.865824
5.000000 -1.802470 -1.806741
=====================================
-=
~
'-"'
3
2.5
2
--M.Euler
•o 1.5
:g.., .... - - ·M.R-K2
o 0.5 ........j
~ ¡
o
::-¡- . 0.5 1- . 1.5 2 25 3 3.5 ' -S<- 515
¡
225
Codificación:
PROGRAM EULER_ADELANTE_2DO_ORDEN
18 WRITE(*,*)''
WRITE(*,*)' 50LUCION DE E.D.O. METODO EULER ~ACIA ADELANTE'
WRITE(*,*)' ==============================================
WRITE ( *, *) ' (SEGUNDO ORDEN) '
!.-JRITE(*; *)''
WRITE(*,*)' INGRESO DE DATOS'
WRITE(*,*)' ----------------------------------------------
WRITE(*l*)' INGRESE EL NUMERO DE PUNTOS (N)'
READ(*,*)N
WRITE(*,*)' INGRESE LOS LIMITES DE OPERACION [A,B]'
READ(*,*)A,B
WRITE(*,*)' INGRESE LAS CONDICIONES INICIALES (X8,V8, Z8)'
READ(*,*)X(1),Y(1),Z(1)
H=(B-A)/N
DO I=1,N+1
X(I+l)=X(I)+H
Z(I+l)=Z(I)+H*F(X(I),Y(I),Z(I))
Y(I+i)=Y(I)+H*Z(I)
END DO
WRITE(*,*)' RESULTADOS'
WFlTTEI*
n..Lit:\ J *)'
WRITE(*,*)' ====================================
WRITE ( *, *) ' X Y(X) Z(X)'
WRITE(*j*)' ====================================
DO J=1,N+1
WRITE(*,28)X(J),Y(J),Z(J)
END DO
28 FORMAT(2X,F18.6,4X,F18.6,4X,F18.6)
WRITE(*,*)' ====================================
END
FUNCTION F(X,V,Z)
F=8.8*X+8.8*Z-8.15*Y
RETURN
END
226
Método de Runge - Kutta 2do Orden para EDO de 2do Orden
REAL(4) N~A,B~H~Y(1000)~X(1000)~Z(1000)
10 WRITE(*,*)''
WRITE(*~*)' SOLUCION DE E.D.O. METODO RUNGE KUTTA 2 ORDEN'
WRITE(*~*)' ~~~~~~~;;;;=~=;=~======;==========~==~=======
WRITE(*~*)' (SEGUNDO ORDEN)'
WRITE(*~*)' INGRESO DE DATOS'
WRITE{*J*)' ---------------------------------------------
WRITE(*,*)' INGRESE EL NUMERO DE PUNTOS (N)'
READ(*~*)N
WRITE(*~*)' INGRESE LOS LIMITES DE OPERACION [A~BJ'
READ(*~*)A~B
WRITE(*~*)' INGRESE LAS CONDICIONES INICIALES (X0~V0~Z0)'
READ(*~*)X(l)~Y(l),Z(l)
WRITE(*,*)' ---------------------------------------------
WRITE ( *, *) ' '
H=(B-A)/N
00 I=i,N+i
X(I+l)=X(I)+H
AA=Z(I)+H*F(X(I)~Y(I),Z(I))
gg=V(I)+I'l*Z(I)
Z(I+l)=Z(I)+0.5*H*(F(X(I)~V(I)~Z(I))+F(X(I+l)~BB,AA))
V(I+l)=Y(I)+0.S*H*(Z(I)+AA)
HJD DO
WRITE(*~*)' RESULTADOS'
WRITE(*~*)'
WRITE(*)*)' ====================================
WRITE(*,*)' X Y(X) Z(X)'
WRITE(*~*)' ====================================
DO J=l~N+l
WRITE(*~20)X(J)~Y(J)~Z(J)
END DO
20 FORMAT(2X~F10.6~4X~F10.6~4X~F10.6)
WRITE(*~*)' ====================================
END
FUNCTION F(X~Y~Z)
F=e.e*X+3.3*Z-3.15*Y
RETURN
END
227
Problemas de aplicación
228
Dónde: T es la temperatura en grados Kelvin y las constantes son:
Obtener la gráfica temperatura vs. tiempo para 50 puntos con t desde O hasta 30
segundos.
~
~1
1
t
Figura (8.9). Sistema masa-resorte amortiguado.
229
d. Un circuito en serie contiene un resistor y un inductor, tal como se
muestra en la figura (8.10), si se conoce la ecuación diferencial de la
corriente i(t) y si R = 1O.Q, L = 0.15 henrios, S1 está cerrado, S2 abierto y
E = 15sen 2.5t (fuente de corriente alterna). Grafique la variación de
corriente y carga en intervalos de 0.01 s para un intervalo desde O hasta
- - .
5.0 ség. siéncó qué i =o y q =o érí t = o.
L
.---------~'~-------.
E S2 1(s 1
lt\1'--------'l
Figura (8.1 O). Esquema de circuito R-L
230
1 - - - - - - - )( _ _ _ __,
A w
1
1 1 1 1
4 Pulg. 2 Pulg.
dy =x+y+xy
dx
~y =x+y
ax
231
7. DISCUSIÓN
232
En el Capítulo de interpolación se tratan los métodos de mayor eficiencia y
simplicidad para la construcción de nuevos puntos funcionales partiendo del
conocimiento de un conjunto discreto de puntos; método de Newton hacia
adelante Newton-Gregory-Forward y Método de Lagrange; su importancia
radica en el hecho de que con frecuencia en física, ingeniería y otras ciencias
es frecuente disponer de un cierto número de puntos obtenidos por muestreo o
a partir de un experimento y pretender construir una función que los ajuste.
En el Capítulo VI, se analizan las formulas numéricas para aproximación
de la derivada, que se utilizan para evaluar las derivadas por medio de valores
dados en los puntos de una retícula, en este caso se utiliza el método de
aproximación por el desarrollo en serie de Taylor, que necesita una retícula
uniforme tal como puede verse en Curtis, F. y Wheatley, P. (2000).
En el Capítulo VIl se tratan formulas numéricas de integración y se
muestran las que son construidas tomando como base los polinomios de
interpolación de Newton hacia delante de diferentes órdenes, haciendo una
extensión de las Reglas del trapecio, 1/3 y 3/8 de Simpson, superando lo que
se presenta en Chapra, S. C. y Canale R. P. (2003) y Cante, S. y Boor, C.
(1985).
. En el Capítulo VIII, se tratan las formulas numéricas que permiten
aproximar la solución de una ecuación diferencial ordinaria. En este capítulo se
desarrolla el tratamiento computacional de las EDO, con los métodos de Euler,
los cuales en particular son adecuados para una programación rápida debido a
su sencillez; sin embargo, a pesar de su gran estabilidad, requiere un tamaño
de paso muy pequeño para alcanzar una precisión razonable, también se
desarrollan los métodos Runge-Kutta de segundo, tercer y cuarto orden,
haciendo una ampliación para la solución de EDO de orden superior con el
método de cambio de variable superando lo tratado en lriarte, R. y Balderrama,
V. (1990) y Maron, J. y Lopez, J. (1995).
233
8. REFERENCIALES
Brian, H.; "Fortran 90 for Scientists and Engineers", Fortran PowerStation 4.0.
March 1994 in paperback 368 pages ISBN O 340 60034 9.
Cante, S. y Boor, C.; "Análisis Numérico", 2da. Edición, Ed. McGraw - Hill,
México, 1985.
Nakamura, S.; "Métodos Numéricos Aplicados con Software", 2da. Edición, Ed.
Hispanoamericana, México, 1992.
234
9. APÉNDICE
Real(4) Y(9000),X(9000),Z(9000)
10 WRITE(*,*)''
vJRITE (*, *)' SOLUCION EDO 2do. ORDEN RUNGE -KUTTA 2do ORDEN'
WRIT~(*,*)' =============================================
WRITE ( *, *) ' '
WRITG(*,*)' INGRESO DG DATOS'
WRITE(*,*)' ---------------------------------------------
WRITE(*~*)' INGRESE LAS CONDICIONES INICIALES (X0,Y0,Z0)'
READ(*,*)X0,Y0,Z0
WRITE(*,*)' INGRESE EL PUNTO FINAL DEL DOMINIO (XF)'
READ(*,*)XF
WRITE(*,*)' INGRESE EL NUMERO DE DATOS (N)'
READ(*,*)N
WRIIE(*,*)' --------------------------------------------
H=(XF-X0)/N
X(l)=Xfl
Y(1)=Y0
Z(1)=Z0
DO K=l,N
X(l<+l)=X(K)+H
ZZ=Z(K)+H*F(X(K),Y(K),Z(K))
15 Y(K+l)=Y(K)+(H*0.5)*(ZZ+Z(K))
Z(K+1)=Z(K)+(H*0.5)*(F(X(K+1),Y(K+1) 1 ZZ)+F(X(K) 1 Y(K),Z(K)))
END DO
WRITE(*,*)' RESULTADOS'
WRITE(*,*)' -------------------------------------
WRITE(*,*)' =====================================
WRITE(*,*)' X Y(X) V'(X) '
WRITE(*,*)' =====================================
18 DO J=l,N+1
WRITE(*,20)X(J),Y(J),Z(J)
END DO
20 FORMAT(2X,4(2X,F12.6))
END
FUNCTION F(X,Y,Z)
F::::-10*X-2*Y*Z
RETURN
END
235
B. Codificación Runge-Kutta 3er. Orden para EDO 2do. Orden
REAL(4) x(1888),Y(1888),z(1888)
18 WRITE(*,*)''
J,IDTTIO('f<
VVf'\..Lit:; J
*)
$0LUCION ÉDO(gÉGUNDO ORDEN) RUNGE KUTTA 3ER ORDEN'
1
FUNCTION F(X,Y,Z)
~~1e*cog(x*Y)-Z**3
RETURN
END
236
10.ANEXOS
· una cuerda de guitarra mide so cm. dé largo y pésa ·1.0 gr. Sé éstira con una
tensión de 40000 gr. En un punto a 20 cm. de un extremo, se tira de la cuerda
a 0.6 cm. con respecto a la posición de equilibrio y luego se suelta. Encuentre
los desplazamientos a lo largo de la cuerda como una función del tiempo. Use
Ax"" 1 O cm. y llene la tabla (1) con dos decimales de precisión, la ecuación que
rige este fenómeno es:
o2u · Tg
---
o2 u
- (1)
ae w & 2
Utilizando diferencias finitas para solucionar la ecuación (1) y luego para los
valores en el primer paso de tiempo tenemos la ecuación siguiente:
(2)
.
Usamos· la aproximación con diferencias centrales para m = 2 en dos
dimensiones a ambos lados, de donde obtenemos:
.·' Luego:
uf+I = Tg(Atf (ui +ui )+2ui(l- Tg(At)2 )-ui-I
1 (A)2 Hl 1-l 1 (A.)2 1
wux w~
1
uj+I
1
=u!1+1 - u!-
1
+u!I-1 (3)
237
Como Ax = 10 cm., T = 40000, g = 980 g/cm 2 y w = 1.0/80, entonces:
~t = /w ~x = 1.79xl0- 4
\ Tg
Pasos Valores de u en x =
de o 10 20 30 40 50 60 70 80
tiempo
o 0.00 0.30 0.60 0.50 0.40 0.30 0.20 0.10 0.00
1 0.00 0.30 0.40 '0.50 0.40 0.30 0.20 0.10 0.00
2 0.00 0.10 0.20 0.30 0.40 0.30 0.20 0.10 0.00
3 0.00 -0.10 0.00 0.10 0.20 0.30 0.20 0.10 0.00
4 0.00 -0.10 -0.20 -0.10 0.00 0.10 0.20 0.10 0.00
5 0.00 -0.10 -0.20 -0.30 -0.20 -0.10 0.00 0.10 0.00
6 0.00 -0.10 -0.20 -0.30 -0.40 -0.30 -0.20 -0.10 0.00
. --
7 0.00 -0.10 -0.20 -0.30 -0.40 -0.50 --- -0.40 -0.30 0.00
.. -
8 0.00 -ú.1tf ~o.2·a· ~0.30 -0.40 -0.50 -0.60 - ~(f3() ·a.oo
9 0.00 -0.10 -0.20 -0.30 -0.40 -0.50 -0.40 -0.30 0.00
10 0.00 -0.10 -0.20 -0.30 -0.40 -0.30 -0.20 -0,10 0.00
238