Metodos Numericos
Metodos Numericos
Metodos Numericos
1 Método de Bisección
Sea f(x) continua en un intervalo [a, c] y supongamos que f(a) < f(c). Entonces
para cada z, tal que: f(a) < z < f(c), existe un x0 [a, c] tal que: f(x0) = z. La misma
conclusión se obtiene para 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.
Funcionamiento
Suponga que el intervalo entre x = a y x = c, denotado por [a, c], 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, c] 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) 0.
Primero se divide en dos el intervalo [a, c], estas mitades son: [a, b] y [b, c], 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 (10-3≤ es% ≤10-1,
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 b previa
x100% e a % (2.1)
b actual
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.
Algoritmo:
(i) Ingresar: a, c y es
(ii) Evaluar: f(a)*f(c) 0
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)*0.5
(iv) Evaluar: f(a)*f(b) 0
Si se cumple, hacer: c = 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:
Ejemplo:
Calcular la raíz de la función sen(x), en el intervalo [2.5, 4.0] con una
aproximación del 0.1%.
Figura (2.1a). Grafica de la función Seno(x) desde 0.0 hasta 5.0 con espaciamiento de
0.1 unidades.
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
Funcionamiento:
Dado un intervalo [a, c], que contenga a la raíz de la función lineal que pasa por
(a, f(a)) y (c, f(c)), la ordenada en un punto se escribe como:
f(c) f(a)
y f(a) (x a) (2.2)
ca
Despejando x, se tiene:
ca
xa (y f(a)) (2.3)
f(c) f(a)
La coordenada b, en donde la línea intercepta al eje x, se determina al hacer
y = 0, en la ecuación (2.3), así:
Después de encontrar b, el intervalo [a, c] se divide en [a, b] y [b, c], si: f(a)f(b) 0, la
raíz se encuentra en [a, b], en caso contrario, está en [b, c]. 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.
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, c y es
(ii) Evaluar: f(a)*f(c) 0
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) 0
Si se cumple, hacer: c = 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:
Ejemplo:
Calcular la raíz del polinomio -10x3+5x2+3x+10, en el intervalo [0, 2], con un error
aproximado de 0.1%.
Figura (2.2a). Grafica de la función y = -10x3+5x2+3x+10, en el intervalo [0, 2], con un
avance de 0.1.
INGRESE A,C Y ES
Codificación:
PROGRAM FALSA_POSICION
REAL(4) A,C,ES,EA,B,BP
FUNCTION F(X)
F=-10*X**3+5*X**2+5*X+10
RETURN
END
Método de Newton-Raphson
Funcionamiento:
f(x 0 )
x1 x 0 (2.8)
f' (x 0 )
f(x i 1 )
x i x i 1 (2.9)
f' (x i 1 )
f(x i 1 h) f(x i 1 h)
f' (x i 1 ) (2.11)
2h
Limitaciones:
Ejemplo:
INGRESO DE DATOS
==================================
INGRESE X0 Y TOL
0.1 0.01
RESULTADOS NEWTON-RAPHSON
N X0 X1 DFX ABS(F(X0)-F(X1))
1 0.10000 0.99814 -1.00202 1.35465
2 0.99814 0.82820 -2.67578 0.40034
3 0.82820 0.80167 -2.04922 0.05319
4 0.80167 0.80107 -1.96104 0.00118
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:
PROGRAM NEWTON_RAPHSON
REAL(4) X0,X1,TOL,DFX,E
5 WRITE(*,*)''
WRITE(*,*)' RAIZ DE UNA FUNCION (METODO DE NEWTON_RAPHSON)'
WRITE(*,*)' =============================================='
WRITE(*,*)''
WRITE(*,*)' INGRESO DE DATOS'
WRITE(*,*)' =================================='
WRITE(*,*)' INGRESE X0 Y TOL'
READ(*,*)X0,TOL
WRITE(*,*)'RESULTADOS NEWTON-RAPHSON'
WRITE(*,*)' N X0 X1 DFX ABS(F(X0)-F(X1))'
H=0.01
N=0
10 N=N+1
DFX=(F(X0+H)-F(X0-H))/(2*H)
X1=X0-F(X0)/DFX
E=ABS(F(X0)-F(X1))
IF(E.GT.TOL)THEN
WRITE(*,22)N,X0,X1,DFX,E
X0=X1
GOTO 10
ELSE
WRITE(*,22)N,X0,X1,DFX,E
WRITE(*,20)X1,E
END IF
20 FORMAT(' LA RAIZ HALLADA ES: ',F9.5,1x,'APROXIMACION = ',F9.5)
22 FORMAT(1X,I2,4(F9.5,1X))
END
FUNCTION F(X)
F=-x+cos(x**2)
RETURN
END
Funcionamiento:
f (x 1 ) f (x 0 )
f ' (x 0 )
x1 x 0
x1 x 0
x2 x0 f (x 0 ) (2.12)
f (x 1 ) f (x 0 )
Limitaciones:
Ejemplo:
RESULTADOS
N X0 X1 X2 ABS(X2-X1)
1 0.50000 0.60000 1.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
Codificación:
PROGRAM SECANTE
REAL(4) X0,X1,TOL,E
WRITE(*,*)'METODO DE LA SECANTE'
WRITE(*,*)''
WRITE(*,*)'INGRESAR LOS PUNTOS DE APROXIMACION X0, X1 y TOL'
READ(*,*)X0,X1,TOL
WRITE(*,*)'RESULTADOS '
WRITE(*,*)' N X0 X1 X2 ABS(X2-X1)'
N=0
10 N=N+1
X2=X0-F(X0)*((X1-X0)/(F(X1)-F(X0)))
E=ABS(X2-X1)
WRITE(*,22)N,X0,X1,X2,E
IF(E.LE.TOL)THEN
WRITE(*,20)X2,E
ELSE
X0=X1
X1=X2
GOTO 10
END IF
20 FORMAT(' LA RAIZ HALLADA ES: ',F9.5,1x,'APROXIMACION = ',F9.5)
22 FORMAT(1X,I2,4(F9.5,1X))
END
FUNCTION F(X)
F=-10*x**5+5*cos(x**2)
RETURN
END
3. Método de eliminación de Gauss y sustitución regresiva
AX = B (3.4)
Para lograr esto utilizamos la matriz ampliada [A: b], que es la 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:
[E1 ]0 a 11 a 12 a 13 b1
[A : B] 0 [E 2 ]0 a 21 a 22 a 23 b 2 (3.5)
[E 3 ]0 a 31 a 32 a 33 b 3
El método consiste en sustituir los vectores fila [Ei]m secuencialmente en dos pasos:
i) [E j ]m [E j ]m 1 ; (j = 1, 2,….., m)
m1
aim
ii) [ Ei ]m [ Ei ]m1 m1
[ Em ]m1 ; (i = m+1,……,N) (3.7)
amm
a11 N 1 a12
N 1
a13
N 1
b1
N 1
N 1 N 1
N 1
[ A : B] N 1 0 a22 a 23 b2 (3.8)
N 1
a33 b3
N 1
0 0
En este punto podemos resolver el sistema, acomodando la ecuación (3.8) en la
siguiente forma:
a11N 1 a12
N 1
a13 x x1 b1N 1
N 1
N 1
N 1 N 1
0 a 22 a 23 y x 2 b 2 (3.9)
N 1 N 1
0 0 a 33 z x 3 b3
a) Dado que la última ecuación solo involucra a z (x3) y siendo que aNNN-1 0,
debemos tener:
b NN 1 b'3
xN ó z (3.10)
a NNN1 a'33
N
1
x i biN 1 a itN 1x t N 1 ; (i = N-1,……, 1) (3.11)
t i 1 a ii
Ejemplo:
-1x + 1y - 4z = 0
2x + 2y = 1
3x + 3y + 2z = 1/2
- 1 1 - 4 x 0
2 2 0 y 1 A.X B
3 3 2 z 1/2
-1 1 - 4 0
[A : B] 2 2 0 1
0
3 3 2 1/2
Llevamos [A: b]0 [A: b]1; el elemento pivote es el primer valor de la diagonal, entonces,
como es la primera eliminación m = 1.
[E1 ]1 - 1 1 - 4 0
[A : B]1 [E 2 ]1 0 4 - 8 1
[E 3 ]1 0 6 - 101/2
Como [A: B]1 no es una matriz triangular superior, es necesario repetir el proceso a partir
del vector fila por reducir.
Llevamos [A: B]1 [A: B]2; el elemento pivote es el segundo valor de la diagonal, para
este caso m = 2.
- Fijo el primer y segundo vector fila, es decir: [E1]2 = [E1]1 y [E2]2 = [E2]1
- El cálculo se inicia para [E3] 2
-
a 1 32 6
[E 3 ] 2 [E 3 ]1 1 [E 2 ]1 0 6 - 10 1/2 0 4 - 8 1 0 0 2 - 1
a 22 4
Esta matriz es triangular superior. Nótese que se emplearon N-1 matrices ampliadas.
En este punto procedemos a efectuar la sustitución regresiva:
- 1 1 - 4 x 0
0 4 - 8 y 1 A .X B
2 2
0 0 2 z - 1
i =2
3
1
x2 b22 a 22t xt 2
t 2 1 a 22
x2 = y = -0.75
i =1
3
1
x1 b12 a12t xt 2
t 11 a11
x1 = x = 1.25
Los resultados computacionales para este problema empleando Fortran son los
siguientes:
0.0
1.0
0.5
MATRIZ INGRESADA
================
-1.00000 1.00000 -4.00000
2.00000 2.00000 .00000
3.00000 3.00000 2.00000
MATRIZ TRIANGULAR SUPERIOR FINAL
================================
-1.00000 1.00000 -4.00000
.00000 4.00000 -8.00000
.00000 .00000 2.00000
SOLUCIONES
==========
X 1= 1.25000
X 2= -.75000
X 3= -.50000
Codificación:
PROGRAM SOLUCION_SIST_EC_LINEALES
REAL(4) A(100,100),A1(100,100),XSOL(100)
10 WRITE (*,*)''
WRITE (*,*)' SOLUCION DE ECUACIONES LINEALES SIMULTANEAS ELIMINACION DE'
WRITE (*,*)' GAUSS Y SUSTITUCION REGRESIVA'
WRITE (*,*)' =========================================================='
WRITE (*,*)''
WRITE (*,*)' INGRESO DE DATOS (SOLUCION SISTEMA DE N CON N INCOGNITAS)'
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
DO I=1,M1
WRITE (*,*)' INGRESE VECTOR DE TERMINOS INDEPENDIENTES'
READ(*,*)A(I,M1+1)
END DO
! COPIANDO EN LA MATRIZ DE PASO
20 LP=2
LN=LP-1
DO I=1,M1
DO J=1,M1+1
A1(I,J)=A(I,J)
END DO
END DO
! FIN DEL COPIADO
! HACIENDO LA ELIMINACION
21 DO I=LP,M1
WPASO1=A1(I,LN)
WPASO2=A1(LN,LN)
DO J=1,M1+1
A1(I,J)=A1(I,J)-(WPASO1/WPASO2)*A1(LN,J)
END DO
END DO
! FIN DE LA ELIMINACION
! REPITIENDO EL PROCESO
WRITE(*,*)''
WRITE(*,*)' MATRIZ TRIANGULAR SUPERIOR PRELIMINAR'
WRITE(*,*)' ====================================='
DO MI=1,M1
WRITE(*,100)(A1(MI,MJ),MJ=1,M1+1)
END DO
WRITE(*,*)''
LP=LP+1
LN=LP-1
IF (LP.GT.M1)THEN
NK=M1
GOTO 27
ELSE
GOTO 21
END IF
! SUSTITUCION REGRESIVA
27 SUMA=0
DO J=1,M1
SUMA=SUMA+A1(NK,J)*XSOL(J)
END DO
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
! PRESENTACION DE RESULTADOS
28 WRITE (*,*)''
WRITE(*,*)' MATRIZ INGRESADA'
WRITE(*,*)' ================'
DO I=1,M1
WRITE(*,100)(A(I,J),J=1,M1)
END DO
WRITE(*,*)''
WRITE(*,*)' MATRIZ TRIANGULAR SUPERIOR'
WRITE(*,*)' =========================='
DO I=1,M1
WRITE(*,100)(A1(I,J),J=1,M1)
END DO
WRITE(*,*)''
WRITE(*,*)' SOLUCIONES'
WRITE(*,*)' =========='
DO I=1,M1
WRITE(*,29)I,XSOL(I)
END DO
! FIN DE PRESENTACION
WRITE(*,*)''
WRITE(*,*)''
WRITE(*,*)''
29 FORMAT (1X,' X',I3,'=',F11.5)
100 FORMAT (15(3X,F11.5))
WRITE(*,*)''
WRITE(*,*)''
END
Método de descomposición LU (Lower-Upper)
Pero en este caso definimos A como: A=L.U, ó sea el producto de dos matrices
L y U, donde:
L.(U.X) = B
L .Y = B (3.13)
U. X = Y
l11 0 0............ 0 u11 u12 u13......... u1n a11 a12 a13......... a1n
l21 l22 0............ 0 0 u 22 u 23......... u 2n a 21 a 22 a 23........ a 2n
.
. . . . . ............ .
l ln3.......... lnn 0 a n3........ a nn
n1 ln2 0 0........... u nn a n1 a n2
(3.15)
l
k 1
ik u kj a ij donde : (i 1,2,3,4,....., N) y (j 1,2,3,4,....., N) (3.16)
Por conveniencia hacemos: lii = 1, donde: (i = 1, 2, 3, 4,......, N), es decir todos los
elementos de la diagonal principal de L son iguales a 1. También u1i = a1i, 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í:
l
k 1
ik u kj a ij (3.17)
l
k 1
ik u kj a ij (3.18)
Esto nos permite hacer la evaluación de los uij y los lij, restantes:
i 1
u ij a ij lik u kj (i 2,3,....., j)
k 1
i 1
(3.19)
1
lij (a ij lik u kj ) (i j 1,....., N)
a jj k 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).
Ejemplo:
1 0 0 2 5 7 2 5 7
l 21 1 0 0 u 22 u 23 5 8 3
l 0 0 u 3 9 6
31 l32 1 33
Triangular: inferior superior
Calculamos los valores de l y u intercalando las formulas (3.17) y (3.18)
1
l 21 a 21 l 2k u k1 l 21 u 11 a 21 l 21 2.5
(?) (2) (5)
k 1
2
u 22 a 22 l 2k u k2 l 21 l 22 u 22 a 22 u 22 4.5
(5/2) (5) (1) (?) (8)
u 12
k 1
1
l 31 a 31 l 3k u k1 l 31 u 11 a 31 l 31 1.5
(?) (2) (3)
k 1
2
u 23 a 23 l 2k u k3 l 21 l 22 u 23 a 23 u 23 20.5
(5/2) (7) (1) (?) (-3)
u 13
k 1
2
l 32 a 32 l 3k u k2 l 31 l 32 u 22 a 32 l 32 3.7
(3/2) (5) (?) (-4.5) (-9)
u 12
k 1
3
u 33 a 33 l 3k u k3 l 31 l 32 l 33 u 33 a 33 u 33 70.7
(3/2) (7) (3.7) (-20.5) (1) (?) (6)
u 13 u 23
k 1
1 0 0 y1 10
2.5 1 0 y 2 15 L.Y B
1.5 3.7 1 y - 8
3
a) Dado que la primera ecuación solo involucra a y1 y siendo que l11 0, debemos
tener:
b1
y1
l11
b) El segundo paso nos permitirá conocer el valor de las incógnitas restantes:
i 1
1
yi bi lit yt ; (i = 2, 3,……, N)
t 1 lii
10
y1 = 10,
1
1
1
y2 b2 l2t yt
t 1 l22
y2 b2 l21 y1
1
l22
15 (2.5)(10) 10
1
1
2
1
y3 b3 l3t yt
t 1 l33
y3 b3 l31 y1 l32 y2 l1 8 (1.5)(10) (3.7)(10)11 14
33
Luego calculamos el vector X, de la relación: U.X = Y, por sustitución regresiva, así:
2 5 7 x 10
0 - 4.5 - 20.5 y - 10
0 70.7 z 14
0
a) Dado que la última ecuación solo involucra a x3 y siendo que uNN 0, debemos
tener:
yN
xN
u NN
N
1
xi yi u it xt ; (i = N-1,……, 1)
t i 1 u ii
y3
z x3
u33
14
z x3 0.198
70.7
3
1
x2 y2 u2t xt
t 2 1 u22
y x2 y2 u23 x3
1
u22
10 (20.5)(0.198)
1
4.5
1.342
3
1
x1 y1 u1t xt
t 11 u11
x x1 y1 u12 x2 u13 x3 u1 10 (5)(1.342) (7)(0.198) 12 0.9701
11
Los resultados computacionales con el programa en Fortran son:
10.0
15.0
-8.0
MATRIZ A
========
2.0000 5.0000 7.0000
5.0000 8.0000 -3.0000
3.0000 -9.0000 6.0000
MATRIZ L
========
1.0000 .0000 .0000
2.5000 1.0000 .0000
1.5000 3.6667 1.0000
MATRIZ U
========
2.0000 5.0000 7.0000
.0000 -4.5000 -20.5000
.0000 .0000 70.6667
SOLUCIONES
==========
X: 1 .9701
X: 2 1.3412
X: 3 .1934
Codificación:
PROGRAM DESCOMP_LU
REAL(4) A(100,100),WL(100,100),U(100,100),B(100),X(100),C(100)
10 WRITE (*,*)''
WRITE (*,*)' DESCOMPOSICION LU (LOWER UPPER)'
WRITE (*,*)' ================================'
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,M1
U(1,J)=A(1,J)
END DO
DO J=1,M1
WL(J,J)=1
END DO
SUMA3=0
SUMA4=0
DO J=1,M1
SUMA3=0
DO I=2,J
SUMA3=0
DO K=1,I-1
SUMA3=SUMA3+WL(I,K)*U(K,J)
END DO
U(I,J)=A(I,J)-SUMA3
END DO
SUMA4=0
DO I=1,M1
SUMA4=0
DO K=1,J-1
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(*,*)' ========'
DO J=1,M1
WRITE(*,30)(A(J,I),I=1,M1)
END DO
WRITE(*,*)' MATRIZ L'
WRITE(*,*)' ========'
DO I=1,M1
WRITE(*,30)(WL(I,J),J=1,M1)
END DO
WRITE(*,*)' MATRIZ U'
WRITE(*,*)' ========'
DO I=1,M1
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 FORMAT (7(F8.4))
35 FORMAT (' X:',I3,F8.4)
END
Regresión lineal
N N
S e12 e 22 ....... e 2N e i2 Yi ax i b
2
(4.2)
i 1 i 1
S N
0 2Yi ax i b x i
a i 1
(4.3)
S N
0 2Yi ax i b 1
b i 1
N N N
a x i2 b x i x i Yi
i 1 i 1 i 1
N N (4.4a)
a x i bN Yi
i 1 i 1
N x Y i i
x i Yi
i 1
i 1
N
i 1
a 2
N
xi
i 1
N
i 1
x i2
N
(4.4b)
N N
Yi a x i
i 1 i 1
b
N
Para los datos mostrados en la figura (4.1), se encuentra que:
Ejemplo:
x f(x)
0.10 5.30 9.00
0.20 5.30
8.00
0.30 5.60
0.40 5.76 7.00
0.50 6.00
6.00
0.60 6.32
0.70 6.61 5.00
0.80 6.60
0.90 6.80 4.00
1.00 7.00 3.00
1.10 6.20
1.20 7.76 2.00
1.30 7.60 1.00
1.40 7.80
1.50 8.30 0.00
0.00 0.20 0.40 0.60 0.80 1.00 1.20 1.40 1.60
RESULTADOS
PENDIENTE = 2.0054
INTERSECCION CON EL EJE Y = 4.9924
N X Y(AJUSTADO) 9
1 .1000 5.1929 8
2 .2000 5.3935 7
3 .3000 5.5940
6
4 .4000 5.7945
5
5 .5000 5.9951
4
6 .6000 6.1956
3
7 .7000 6.3961
2
8 .8000 6.5967
1
9 .9000 6.7972
0
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6
10 1.0000 6.9977
11 1.1000 7.1983
12 1.2000 7.3988
13 1.3000 7.5993
14 1.4000 7.7999
15 1.5000 8.0004
Por lo tanto la relación entre las dos variables según el ajuste es:
y = 2x + 5
Codificación:
PROGRAM REGRESION_LINEAL
REAL(4) X(100),Y(100),N,Y2(100)
10 FORMAT(1X,I3,2(F8.4,1X))
15 FORMAT(1X,' PENDIENTE =',F8.4)
16 FORMAT(1X,' INTERSECCION CON EL EJE Y =',F8.4)
END
ei Yi yi Yi a0 a1 xi a2 xi .......... an xi
2 n
(4.6)
N N
S e12 e22 ....... e N2 ei2 Yi a0 a1 xi a2 xi ....... an xi
2 n 2
(4.7)
i 1 i 1
En el mínimo, todas las derivadas parciales S/a0, S/a1, S/a2,………., S/an son
iguales a cero; al escribir, las ecuaciones para lo anterior se obtienen n+1 ecuaciones:
S
N
0 2 Yi a0 a1 xi ......... a n xi 1
n
a0 i 1
S
N
0 2 Yi a0 a1 xi ......... a n xi xi
n
a1 i 1
. (4.8)
.
S
N
0 2 Yi a0 a1 xi ......... a n xi xin
n
a n i 1
Al dividir entre -2 y reordenando se obtienen n + 1 ecuaciones normales a resolver
simultáneamente:
a 0 N a 1 x i a 2 x i2 ......... a n x in Yi
a 0 x i a 1 x i2 a 2 x 3i ......... a n x in 1 x i Yi
a 0 x i2 a 1 x 3i a 2 x i4 ......... a n x in 2 x i2 Yi
(4.9)
.
.
a 0 x in a 1 x in 1 a 2 x in 2 ......... a n x i2 n x in Yi
N x i x 2
i x 3
i ....... x n
i
a 0 Yi
xi x x x x a1 x i Yi
2 3 4 n 1
i i i ....... i
x i2 x 3
x 4
x 5
....... x n2 a 2 x i2 Yi (4.10)
i i i i
xn a x n Y
i x x x x n i i
n 1 n2 n 3 2n
i i i ....... i
Ejemplo:
x y
20.00
0.10 3.73 18.00
0.20 4.40
0.30 6.40 16.00
0.40 6.60 14.00
0.50 7.00 12.00
0.60 9.60
0.70 11.40 10.00
0.80 14.10 8.00
0.90 15.60 6.00
1.00 18.30
4.00
2.00
0.00
0.00 0.20 0.40 0.60 0.80 1.00 1.20
Los resultados obtenidos con el programa en Fortran son los siguientes:
AJUSTE CUADRATICO MINIMOS CUADRADOS
RESULTADOS
SUMATORIAS
MATRIZ NORMAL
A = 11.8484 20
B = 3.0292 18
C = 3.4853 16
14
12
N X Y(AJUSTADO) 10
1 .1000 3.9067 8
2 .2000 4.5651 6
3 .3000 5.4604 4
2
4 .4000 6.5927 0
0 0.2 0.4 0.6 0.8 1 1.2
5 .5000 7.9620
6 .6000 9.5683
7 .7000 11.4115
8 .8000 13.4916
9 .9000 15.8088
10 1.0000 18.3629
Codificación:
PROGRAM REGRESION_CUADRATICA
REAL(4) X(100),Y(100),N,Y2(100),A(100,100),A1(100,100),XSOL(100)
! INGRESANDO EN MATRIZ
M1=3
A(1,1)=N
A(1,2)=SUMA1
A(1,3)=SUMA2
A(1,4)=SUMA5
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 I=1,3
WRITE(*,30)(A(I,J),J=1,4)
END DO
! COPIANDO EN LA MATRIZ DE PASO
20 LP=2
LN=LP-1
DO I=1,M1
DO J=1,M1+1
A1(I,J)=A(I,J)
END DO
END DO
! FIN DEL COPIADO
! HACIENDO LA ELIMINACION
21 DO I=LP,M1
WPASO1=A1(I,LN)
WPASO2=A1(LN,LN)
DO J=1,M1+1
A1(I,J)=A1(I,J)-(WPASO1/WPASO2)*A1(LN,J)
END DO
END DO
! FIN DE LA ELIMINACION
! REPITIENDO EL PROCESO
LP=LP+1
LN=LP-1
IF (LP.GT.M1)THEN
NK=M1
GOTO 27
ELSE
GOTO 21
END IF
! FIN DE REPETICION
! SUSTITUCION REGRESIVA
27 SUMA=0
DO J=1,M1
SUMA=SUMA+A1(NK,J)*XSOL(J)
END DO
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 FORMAT (1X,4(F8.4,1X))
10 FORMAT(1X,I3,2(F8.4,1X))
15 FORMAT(1X,' A =',F8.4)
16 FORMAT(1X,' B =',F8.4)
17 FORMAT(1X,' C =',F8.4)
END
Linearización de funciones
y kx n (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 = kx2, llamada función cuadrática, correspondiendo su
grafica a una parábola.
y Ka nx (4.12)
Técnica de linearización
250.0
200.0
150.0
Y
100.0
50.0
0.0
0.0 2.0 4.0 6.0 8.0 10.0 12.0
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).
Linearizacion logy=2logx+log2
2.50
2.00
1.50
log(y)
1.00
0.50
0.00
0 0.2 0.4 0.6 0.8 1 1.2
log(x)
400.0
350.0
300.0
250.0
200.0
Y
150.0
100.0
50.0
0.0
0.0 2.0 4.0 6.0 8.0 10.0 12.0
ln y nx ln k (4.15)
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
4.0
lnY
3.0
2.0
1.0
0.0
0.0 2.0 4.0 6.0 8.0 10.0 12.0
Ejemplo a:
x y
0.100 12.214
500.000
0.300 18.221
0.500 27.183 450.000
0.700 40.552 400.000
0.900 60.496 350.000
1.100 90.250
300.000
1.300 134.637
250.000
1.500 200.855
200.000
1.700 299.641
1.900 447.012 150.000
100.000
50.000
0.000
Los resultados obtenidos 0.000
con 0.500en Fortran1.000
el programa 1.500
son los siguientes: 2.000
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
Integración Numérica
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 tabulada en donde los valores de x y f(x) se dan en un conjunto de
puntos discretos, como es el caso a menudo, de datos experimentales.
b ba
I f(x)dx [f(a) f(b)] E (7.2)
a 2
Figura (7.2). Integración con regla del trapecio, extendida a varios intervalos.
En este caso a = x0 y b = x4, el área total será la suma de las áreas de cada sub-intervalo,
es decir:
A tot A1 A 2 A3 A 4
A1
h
f (a ) f (x 1 )
2
A 2 f ( x 1 ) f ( x 2 )
h
2
A 3 f ( x 2 ) f ( x 3 )
h
2
A 4 f ( x 3 ) f (b)
h
2
A tot A 1 A 2 A 3 A 4
h
f (a ) f (b) 2f ( x 1 ) 2f ( x 2 ) 2f ( x 3 )
2
Pero dado que: x1 = a + h, x2 = a + 2h y x3 = a + 3h, y siendo que está usándose
un ancho de paso constante h, la Regla extendida del Trapecio puede escribirse como:
N 1
h
[f(a) 2 f(a jh) f(b)] E
b
A tot
a
f(x)dx
2 j 1
(7.3)
El error en la regla del trapecio decrece en forma proporcional a h3, siendo el resultado
de la suma de los errores en todos los intervalos.
Ejemplo:
INGRESO DE DATOS
---------------------------------------------------
INGRESE EL LIMITE INF.; LIMITE SUP. [A,B]
7.0 9.0
NUMERO DE INTERVALOS N
200
----------------------------------------------------
RESULTADOS
-----------------------
LIM INF: 7.0 LIM SUP: 9.0 ANCHO DE PASO H: 0.01
EL VALOR DE LA INTEGRAL
10.021450
-----------------------
Codificación
PROGRAM TRAPECIO_EXTENDIDO
REAL(4) A,B,H,AINTEG
5 WRITE (*,*)''
WRITE (*,*)' PROGRAMA METODO DEL TRAPECIO EXTENDIDO'
WRITE (*,*)' ==========================================='
WRITE (*,*)''
WRITE (*,*)' INGRESO DE DATOS'
WRITE (*,*)' --------------------------------------------'
WRITE (*,*)' INGRESE EL LIMITE INF.; LIMITE SUP. [A,B]'
READ (*,*)A,B
WRITE (*,*)' NUMERO DE INTERVALOS N '
READ (*,*)N
WRITE (*,*)' ---------------------------------------------'
WRITE (*,*)''
H=(B-A)/N
FA=F(A)
FB=F(B)
A1=0
DO J=1,(N-1)
A1=A1+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:',F9.4)
WRITE(*,*)' -----------------------'
END
FUNCTION F(X)
F=x*(SIN(X))**3
RETURN
END
2.1 Regla 1/3 de Simpson
(s 2 s)
F2 (s) f k s(f k 1 f k ) (f k 2 2f k 1 f k )
2
Y ajustada a un intervalo [a, b], subdividido en dos sub-intervalos de ancho h, tal como
se muestra en la figura (7.3).
Figura (7.3). Integración con Regla 1/3 de Simpson para dos sub-intervalos.
1
ds d( x x k ) hds dx
h
Por lo cual:
b 2 2 (s 2 s)
a
f ( x )dx h F2 (s)ds h (f k s(f k 1
0 0
fk )
2
(f k 2 2f k 1 f k ))ds
Resolviendo:
2 2 2 2 (s 2 s)
h F2 (s)ds hf k ds (f k 1 f k )h sds (f k 2 2f k 1 f k )h ds
0 0 0 0 2
1
h 2f k 2(f k 1 f k ) (f k 2 2f k 1 f k )
3
6f k 6f k 1 6f k f k 2 2f k 1 f k
h
3
f k 4f k 1 f k 2 f (0) 4f (1) f (2)
h h
3 3
<x>, es el punto medio del intervalo e igual a (a+b)/2; según esto, es posible extender
la regla 1/3 de Simpson, para N sub-intervalos (donde N es par).
Aquí: a = x0 y b = x6, el área total será la suma de las áreas de cada par de sub-intervalos,
es decir:
A tot A1 A2 A3
A1
h
f (a ) 4f ( x 1 ) f ( x 2 )
3
A 2 f ( x 2 ) 4f ( x 3 ) f ( x 4 )
h
3
A 3 f ( x 4 ) 4f ( x 5 ) f (b)
h
3
A tot A1 A 2 A 3
h
f (a ) f (b) 4f ( x1 ) 4f (x 3 ) 4f ( x 5 ) 2f ( x 2 ) 2f ( x 4 )
3
N 1 N2
h
A tot [f(a) 4
3
i 1
f(a ih) 2 f(a jh) f(b)] E
j 2
(7.5)
( impares ) ( pares )
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:
1 5 (iv)
E h f ( x )
90
Dónde: <x> = (b-a)/N
Ejemplo:
b d
x
a
xC ( x )dx
; y
c
yC ( y)dy
Area de R Area de R
Además, el área de una región limitada por dos curvas está dada por la fórmula:
b
Area (f (x) g(x))dx
a
2
Area (4 x 2 )dx 10.66666
2
4
y(2 y )dy 25.6 2.4
2
x
2
x (4 x 2 )dx
0
0 y y 0
2
2
(4 x 2 )dx 10.66666 (4 x )dx 10.66666
2
2 2
Finalmente las coordenadas del centroide son: (0, 2.4)
Los resultados computacionales con la Regla 1/3 de Simpson extendido para N = 400
son:
METODO DE SIMPSON UN TERCIO EXTENDIDO
=====================================
INGRESO DE DATOS
--------------------------------------
INGRESE LOS LIMITES DE OPERACION [A,B]
-2 2
NUMERO DE SUB INTERVALOS
400
RESULTADOS
-----------------------
EL VALOR DE LA INTEGRAL
10.666560 NOTA, FUNCION: F=4-x**2
--------------------------------------
INGRESE LOS LIMITES DE OPERACION [A,B]
-2 2
NUMERO DE SUB INTERVALOS
400
RESULTADOS
-----------------------
EL VALOR DE LA INTEGRAL
.000000 NOTA, FUNCION: F=4*x-x**3
--------------------------------------
Codificación:
PROGRAM SIMPSON_UN_TERCIO_EXTENDIDO
REAL(4) H,A,B,AREAT
WRITE (*,*)''
WRITE (*,*)' METODO DE SIMPSON UN TERCIO EXTENDIDO'
WRITE(*,*)' ====================================='
WRITE (*,*)''
WRITE (*,*)' INGRESO DE DATOS'
WRITE (*,*)' -------------------------------------------'
WRITE (*,*)' INGRESE LOS LIMITES DE OPERACION [A,B]'
READ (*,*)A,B
WRITE (*,*)' NUMERO DE SUB INTERVALOS'
READ(*,*)N
WRITE (*,*)' -----------------------------------------'
WRITE (*,*)''
WRITE (*,*)''
H=(B-A)/N
FA=F(A)
FB=F(B)
AREA1=0
AREA2=0
DO J=1,N-1,2
AREA1=AREA1+F(A+J*H)
END DO
DO I=2,N-2,2
AREA2=AREA2+F(A+I*H)
END DO
AREAT=(H*0.33333)*(FA+FB+(4*AREA1)+(2*AREA2))
WRITE (*,*)N
WRITE (*,*)' RESULTADOS'
WRITE (*,*)' -----------------------'
WRITE (*,*)' EL VALOR DE LA INTEGRAL'
WRITE (*,12)AREAT
12 FORMAT (9X,F9.6)
WRITE (*,*)' -----------------------'
WRITE (*,*)''
WRITE (*,*)''
WRITE (*,*)''
END
FUNCTION F(X)
!F=4-X**2
!F=4*X-X**3
F=X*2*SQRT(X)
RETURN
END
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).
Figura (7.6). Integración con Regla 3/8 de Simpson para tres sub-intervalos.
1
ds d( x x k ) hds dx
h
Por lo cual ahora:
b 3 3 (s 2 s)
a
f ( x )dx h F3 (s)ds h (f k s(f k 1 f k )
0 0 2
(f k 2 2f k 1 f k )
s(s 1)(s 2)
(f k 3 3f k 2 3f k 1 f k ))ds
6
Resolviendo:
3 3 3 3 (s 2 s)
h F3 (s)ds hf k ds (f k 1 f k )h sds (f k 2 2f k 1 f k )h ds
0 0 0 0 2
3 s(s 1)(s 2)
h (f k 3 3f k 2 3f k 1 f k ) ds
0
6
9 9 3
h 3f k (f k 1 f k ) (f k 2 2f k 1 f k ) (f k 3 3f k 2 3f k 1 f k )
2 4 8
h 8f k 12f k 1 12f k 6f k 2 12f k 1 6f k f k 3 3f k 2 3f k 1 f k
3
8
h f k 3f k 1 3f k 2 f k 3 h f (0) 3f (1) 3f (2) f (3)
3 3
8 8
Aquí: a = x0 y b = x9, el área total será la suma de las áreas de cada tres sub-intervalos,
es decir:
A tot A1 A2 A3
A 1 hf (a ) 3f ( x 1 ) 3f ( x 2 ) f ( x 3 )
3
8
A 2 hf ( x 3 ) 3f ( x 4 ) 3f ( x 5 ) f ( x 6 )
3
8
A 3 hf ( x 6 ) 3f ( x 7 ) 3f ( x 8 ) f (b)
3
8
Resolviendo para el área total se tiene:
El error en la regla 3/8 de Simpson decrece en forma proporcional a h5, donde el error
es la suma de los errores en todos los intervalos y puede ser aproximado por:
3 5 (iv)
E h f ( x )
80
Ejemplo:
INGRESO DE DATOS
-------------------------------------------------
INGRESE LOS LIMITES DE OPERACION [A,B]
0.785398 3.141592
INGRESE EL NUMERO DE INTERVALOS MULTIPLO DE 3
9
-------------------------------------------------
H= 0.261799
RESULTADOS
-----------------------
EL VALOR DE LA INTEGRAL
2.414357
-----------------------
Codificación:
PROGRAM SIMPSON_TRES_OCTAVOS
REAL(4) H,N,A,B,AREAT
WRITE (*,*)''
WRITE (*,*)' METODO DE SIMPSON 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'
WRITE (*,*)' -----------------------'
WRITE (*,*)' EL VALOR DE LA INTEGRAL'
WRITE (*,12)AREAT
12 FORMAT (9X,F9.6)
13 FORMAT (9X, ' H= ',F9.6)
WRITE (*,*)' -----------------------'
WRITE (*,*)''
WRITE (*,*)''
WRITE (*,*)''
END
FUNCTION F(X)
F=SIN(X)-COS(X)
RETURN
END
Solución de Ecuaciones diferenciales
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 c, de modo que la función
solución es:
f(x, y, c) 0 (8.2)
Donde para cada valor de c, 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
(x0, y0), es decir:
y(x 0 ) y 0 (8.3)
Esto significa que la variable y vale y0, cuando la variable x vale x0.
Una gran parte de los métodos numéricos para solucionar las ecuaciones
diferenciales parciales parabólicas e hiperbólicas 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
x0 a xf en n sub-intervalos de ancho h, es decir:
xf x0
h (8.4)
n
xi = x0 + ih con: 0 ≤ i ≤ n (8.5)
La condición inicial y(x0) = y0, representa el punto p0 = (x0, y0) por donde pasa la curva
solución de la ecuación diferencial. Con el punto p0 se puede evaluar la primera derivada
de f(x) en ese punto, es decir:
f' x f x 0 , y 0
dy
(8.6)
dx p0
Con esa información se traza una recta, aquella que pasa por p0 y de pendiente f(x0,y0),
esta recta aproxima f(x) en una vecindad de x0, tal como se muestra en la figura (8.1).
f(x)
f(x0,y0)
y1
y0 P0
h
x0 x1 x
y1 y 0 hf x 0 , y 0
y 2 y1 hf x 1 , y1
(8.10)
y i 1 y i hf x i , y i
y n y n 1 hf x n 1 , y n 1
Ejemplo:
dv
100 0.05v 85 - 490 0
dt
Resuelva para velocidad desde 0 hasta 10 segundos con un total de 10 ptos., considere
que v = 0 en t = 0.
RESULTADOS
-----------------------------
=======================
X Y(X)
=======================
.000000 .000000
1.000000 4.050000
2.000000 8.097975
3.000000 12.143930
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
=======================
Codificación:
PROGRAM EULER_ADELANTE
10 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 (X0,Y0)'
READ(*,*)X0,Y0
XK(1)=X0
YK(1)=Y0
H=(B-A)/N
DO I=2,N+1
YK(I)=YK(I-1)+H*F(XK(I-1),YK(I-1))
XK(I)=XK(I-1)+H
END DO
WRITE(*,*)' RESULTADOS'
WRITE(*,*)' ----------------------'
WRITE(*,*)' ======================'
WRITE(*,*)' X Y(X)'
WRITE(*,*)' ======================'
DO J=1,N+1
WRITE(*,20)XK(J),YK(J)
END DO
20 FORMAT(2X,F10.6,4X,F10.6)
WRITE(*,*)' ======================'
END
FUNCTION F(X,Y)
F=4.05-0.0005*Y+0.0*X
RETURN
END
Método de Euler modificado
y n +1 x n +1
yn
dy = +
xn
f(x, y)dx
x n +1
y n +1 = y n + f(x, y)dx
xn
Lo que nos lleva a la ecuación:
h
y n +1 = y n + [f(y n +1 , x n +1 ) + f(y n , x n )] (8.11)
2
h
y12 y 0 + [f(x 1 , y11 ) + f(x 0 , y 0 )] (8.13)
2
y kn ++11 − y kn
*100 = e a % e s %
y kn ++11
Donde ea% es el error porcentual relativo alcanzado y es% 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:
INGRESO DE DATOS
-------------------------------------------
INGRESE EL TOTAL DE PUNTOS (N)
10
INGRESE LOS LIMITES DE OPERACION [A,B]
0 10
INGRESE LAS CONDICIONES INICIALES (X0,Y0)
0 50
INGRESE ERROR PORCENTUAL SOLICTADO (ES)
0.1
------------------------------------------
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.772610
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:
60
50
40
30
20
10
0
0 2 4 6 8 10 12
Codificación:
PROGRAM EULER_MODIFICADO
REAL(4) X0,Y0,A,B,H,N,YK(1000),XK(1000)
10 WRITE(*,*)''
WRITE(*,*)' SOLUCION DE E.D.O. METODO EULER MODIFICADO'
WRITE(*,*)' =========================================='
WRITE(*,*)''
WRITE(*,*)' INGRESO DE DATOS'
WRITE(*,*)' -------------------------------------------'
WRITE(*,*)' INGRESE EL TOTAL DE PUNTOS (N)'
READ(*,*)N
WRITE(*,*)' INGRESE LOS LIMITES DE OPERACION [A,B]'
READ(*,*)A,B
WRITE(*,*)' INGRESE LAS CONDICIONES INICIALES (X0,Y0)'
READ(*,*)X0,Y0
WRITE(*,*)' INGRESE ERROR PORCENTUAL SOLICTADO (ES)'
READ(*,*)ES
WRITE(*,*)' ------------------------------------------'
H=(B-A)/N
XK(1)=X0
YK(1)=Y0
YY=Y0
OPEN(1,FILE='EULERMOD.TXT')
WRITE(*,*)' RESULTADOS POR ITERACION'
WRITE(*,*)' ------------------------'
DO I=2,N+1
NN=1
WRITE(*,*)' PUNTO NRO. ',I
XK(I)=XK(I-1)+H
15 YK(I)=YK(I-1)+(H*0.5)*(F(XK(I-1),YK(I-1))+F(XK(I),YY))
EA=ABS((YK(I)-YY)/YK(I))*100
WRITE(*,*)' ITERACION NRO. ',NN
WRITE(*,120)XK(I),YK(I),EA
IF(EA.GT.ES)THEN
YY=YK(I)
NN=NN+1
GOTO 15
END IF
END DO
WRITE(*,*)' RESULTADOS'
WRITE(*,*)' ======================'
WRITE(*,*)' X Y(X)'
WRITE(*,*)' ======================'
DO J=1,N+1
WRITE(*,20)XK(J),YK(J)
WRITE(1,20)XK(J),YK(J)
END DO
20 FORMAT(2X,F10.6,4X,F10.6)
120 FORMAT(2X,3(1X,F10.6))
WRITE(*,*)' ======================'
END
FUNCTION F(X,Y)
F=-0.7*Y+14+0.0*X
RETURN
END
Método de Runge-Kutta de Segundo Orden
y n +1 x n +1
yn
dy = +
xn
f(x, y)dx
x n +1
y n +1 = y n + f(x, y)dx
xn
h
y n +1 = y n + [f(y n +1 , x n +1 ) + f(y n , x n )] (8.14)
2
y n +1 = y n + hf(x n , y n )
h
y n +1 = y n + [f(x n , y n ) + f(x n +1 , y n +1 ) (8.15)
2
x n +1 = xn + h
Ejemplo:
INGRESO DE DATOS
---------------------------------------------
INGRESE EL NUMERO DE PUNTOS (N)
15
INGRESE LOS LIMITES DE OPERACION [A,B]
0.0 1.0
INGRESE LAS CONDICIONES INICIALES (X0,Y0)
0.0 0.0
---------------------------------------------
RESULTADOS
=====================
X F(X)
=====================
.0000 .000000
.0667 .537208
.1333 .859936
.2000 .975807
.2667 .903230
.3333 .672700
.4000 .325851
.4667 -.087393
.5333 -.513061
.6000 -.898170
.6667 -1.195901
.7333 -1.370285
.8000 -1.399818
.8667 -1.279581
.9333 -1.021609
1.0000 -.653432
=====================
Gráfica:
La grafica generada con los resultados mostrados es la siguiente:
1.5
0.5
0
0 0.2 0.4 0.6 0.8 1 1.2
-0.5
-1
-1.5
-2
Codificación:
REAL(4) N,X0,Y0,A,B,H,YK(1000),XK(1000)
10 WRITE(*,*)''
WRITE(*,*)' SOLUCION DE E.D.O. METODO RUNGE KUTTA 2 ORDEN'
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 (X0,Y0)'
READ(*,*)X0,Y0
WRITE(*,*)' ---------------------------------------------'
WRITE(*,*)''
XK(1)=X0
YK(1)=Y0
H=(B-A)/N
DO I=1,N+1
XK(I+1)=XK(I)+H
YY=YK(I)+H*F(XK(I),YK(I))
YK(I+1)=YK(I)+(0.5)*H*(F(XK(I),YK(I))+F(XK(I+1),YY))
END DO
OPEN(1,FILE='RK2.TXT')
WRITE(*,*)' RESULTADOS'
WRITE(*,*)' --------------------'
WRITE(*,*)' ===================='
WRITE(*,*)' X F(X)'
WRITE(*,*)' ===================='
DO I=1,N+1
WRITE(*,20)XK(I),YK(I)
WRITE(1,20)XK(I),YK(I)
END DO
20 FORMAT(2X,F9.4,3X,F10.6)
WRITE(*,*)' ===================='
END
FUNCTION F(X,Y)
F=10*COS(5*X)-5*Y
RETURN
END
Método de Runge-Kutta de tercer orden
b h
I = f(x)dx = [f(a) + 4f( x ) + f(b)]
a 3
y n +1 x n +1
yn
dy = +
xn
f(x, y)dx
x n +1
y n +1 = y n + f(x, y)dx
xn
h
y n +1 = y n + [f(x n , y n ) + 4f(x 1 , y 1 ) + f(x n +1 , y n +1 )] (8.16)
3 n+ n+
2 2
Donde <yn+1> y <yn+1/2>, son estimaciones, que pueden obtenerse mediante el método
de Euler hacia adelante; entonces, para el caso de <yn+1/2>, se aplica la siguiente fórmula
recursiva:
h
y 1 = y n + f(x n , y n ) (8.17)
n+ 2
2
y n +1 = y n + hf(x 1 y 1 ) (8.18)
n+ n+
2 2
Ejemplo:
ln( R 0 )
r=
T
INGRESO DE DATOS
---------------------------------------------
INGRESE EL NUMERO DE PUNTOS (N)
20
INGRESE LOS VALOR INICIAL Y FINAL DEL DOMINIO
1 10
INGRESE LAS CONDICIONES INICIALES (X0,Y0)
1.0 2200
---------------------------------------------
RESULTADOS
============================
t (años) Población en
Individuos
============================
1.000000 2200.000000
1.450000 2409.737000
1.900000 2639.470000
2.350000 2891.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
6.849999 7186.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
============================
Codificación:
10 WRITE(*,*)''
WRITE(*,*)' SOLUCION DE E.D.O. METODO RUNGE KUTTA 3 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 (X0,Y0)'
READ(*,*)X0,Y0
WRITE(*,*)' ---------------------------------------------'
WRITE(*,*)''
X(1)=X0
Y(1)=Y0
H=(B-A)/N
DO I=1,N+1
X(I+1)=X(I)+H
A=Y(I)+H*0.5*F(X(I),Y(I))
B=Y(I)+H*F(X(I)+H*0.5,A)
Y(I+1)=Y(I)+H*0.33333*(F(X(I),Y(I))+4*F(X(I)+0.5*H,A)+F(X(I+1),B))
END DO
WRITE(*,*)' RESULTADOS'
WRITE(*,*)' --------------------'
WRITE(*,*)' ===================='
WRITE(*,*)' X F(X)'
WRITE(*,*)' ===================='
DO J=1,N+1
WRITE(*,20)X(J),Y(J)
ENDDO
20 FORMAT(2X,F9.4,3X,F10.3)
WRITE(*,*)' ===================='
END
FUNCTION F(X,Y)
F=0.1035*Y+0.0*X
RETURN
END
1
y n +1 = y n + (k 1 + 3k 2 + 3k 3 + k 4 ) (8.19)
8
Dónde:
k 1 = hf(x n , y n )
h 1
k 2 = hf ( x n + , y n + k1 )
3 3
2h 1 1
k 3 = hf ( x n + , y n + k1 + k 2 )
3 3 3
k 4 = hf ( x n + h , y n + k 1 − k 2 + k 3 )
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
el tiempo es igual a cero, el 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).
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 q
= −
dt R RC
Determine la variación de carga para t desde 0 hasta 1 seg. Si se sabe que cuando t =
0, q = 0; además: V = 10 Voltios, C = 2200 F y R = 100. (Obtenga 15 puntos de
gráfica).
RESULTADOS
===================
X F(X)
===================
.00000 .00000
.06667 .00038
.13333 .00075
.20000 .00112
.26667 .00148
.33333 .00184
.40000 .00219
.46667 .00253
.53333 .00286
.60000 .00320
.66667 .00352
.73333 .00384
.80000 .00415
.86667 .00446
.93333 .00477
1.00000 .00506
===================
Codificación:
PROGRAM RUNGEKUTTA_4ORDEN
REAL(4) N,X0,Y0,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 (X0,Y0)'
READ(*,*)X0,Y0
WRITE(*,*)' ---------------------------------------------'
WRITE(*,*)''
X(1)=X0
Y(1)=Y0
H=(B-A)/N
DO I=1,N+1
X(I+1)=X(I)+H
A=H*F(X(I),Y(I))
B=H*F(X(I)+H*0.333333,Y(I)+A*0.333333)
C=H*F(X(I)+H*0.666666,Y(I)+A*0.333333+B*0.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
20 FORMAT(2X,F9.5,3X,F9.5)
WRITE(*,*)' ===================='
END
FUNCTION F(X,Y)
F=0.0*X+0.1-Y/0.22
RETURN
END