lunes, 30 de marzo de 2009
Eliminado
Un sistema de ecuaciones se resuelve por eliminación gaussiana cuando se obtienen sus soluciones mediante la reducción del sistema dado a otro equivalente en el que cada ecuación tiene una incógnita menos que la anterior. Pivoteos y sustituciones inversas o directas deambulan por este método. Aqui, un ejemplo de código escrito en noble fortran.
! --------- PROGRAMA ELIMINACIÓN GAUSSIANA -------------------
! gauss.f90
! Resuelve sistemas de ecuaciones lineales de hasta 20x20
program gaussian
! datos.dat
! NÚMERO DE ECUACIONES
! N
! COEFICIENTES DE LA MATRIZ A(I,J)
! a11, a12, ..., a1N
! a21, a22, ..., a2N
! ...........................
! aN1, aN2, ..., aNN
! VECTOR INDEPENDIENTE
! b1, b2, ..., BN
PARAMETER (IN=20)
REAL :: A(IN,IN), B(IN)
OPEN(1,FILE='datos.dat',STATUS='OLD')
READ (1,*)
READ (1,*) N
READ (1,*)
READ (1,*) ((A(I,J),J=1,N),I=1,N)
READ (1,*)
READ (*,*) (B(I),I=1,N)
CLOSE(1)
OPEN(2,FILE='resultados.dat',STATUS='UNKNOWN')
WRITE (2,*) ('**** ELIMINACIÓN GAUSSIANA ****')
WRITE (2,*)
WRITE (2,*) ('COEFICIENTES DE LA MATRIZ ingresados:')
CALL PRINTA(A,IN,N,N,2)
WRITE(2,*)
WRITE(2,*) ('VECTOR INDEPENDIENTE ingresado:')
CALL PRINTV(B,N,2)
WRITE(2,*)
! CONVERTIR A LA FORMA TRIANGULO SUPERIOR
DO K = 1,N-1
IF (ABS(A(K,K)).GT.1.E-6) THEN
DO I = K+1, N
X = A(I,K)/A(K,K)
DO J = K+1, N
A(I,J) = A(I,J) -A(K,J)*X
ENDDO
B(I) = B(I) - B(K)*X
ENDDO
ELSE
WRITE (2,*) 'PIVOT CERO en la línea:'
WRITE (2,*) K
STOP
END IF
ENDDO
WRITE(2,*) 'MATRIZ MODIFICADA'
CALL PRINTA(A,IN,N,N,2)
WRITE(2,*)
WRITE(2,*) 'VECTOR INDEPENDIENTE MODIFICADO'
CALL PRINTV (B,N,2)
WRITE(2,*)
! SUSTITUCION INVERSA
DO I = N,1,-1
SUM = B(I)
IF (I.LT.N) THEN
DO J= I+1,N
SUM = SUM - A(I,J)*B(J)
ENDDO
END IF
B(I) = SUM/A(I,I)
ENDDO
! IMPRIMIR LOS RESULTADOS
write(2,*) ('VECTOR SOLUCIÓN')
CALL PRINTV(B,N,2)
END PROGRAM GAUSSIAN
!------------------------------------------
SUBROUTINE PRINTA(A,IA,M,N,ICH)
! ESCRIBE LA MATRIZ A
REAL A(IA,*)
DO I =1,M
WRITE(ICH,2) (A(I,J),J=1,N)
ENDDO
2 FORMAT(1X,6E12.4)
END SUBROUTINE PRINTA
!-----------------------------------------
SUBROUTINE PRINTV(VEC,N,ICH)
! ESCRIBE EL VECTOR INDEPENDIENTE
REAL VEC(*)
WRITE(ICH,1) (VEC(I),I=1,N)
1 FORMAT(1X,6E12.4)
END SUBROUTINE PRINTV
!-----------------------------------------
viernes, 27 de marzo de 2009
Mate amargo
Se debe empezar por saber cuanto valen pi y e. Hoy en día, la gente se pelea por encontrar más decimales a estos números (como ejemplo, ver las aventuras de Shigeru Kondo y Steve Pagliarulo con el número e). Estos son pi y e, en este caso, con cincuenta decimales.
pi ≈ 3,14159265358979323846264338327950288419716939937510...
e ≈ 2.7182818284590452353602874713526624977572470936999...
Pero, ¿cuánto valen pi y e para un ingeniero? ... y PIPORE? Depende...
jueves, 19 de marzo de 2009
El Efecto Mariposa
Lorenz realizó distintas aproximaciones hasta que consiguió ajustar el modelo a la influencia de tres variables que expresan como cambian a lo largo del tiempo la velocidad y la temperatura del aire. El modelo se concretó en tres ecuaciones matemáticas, bastante simples, conocidas, hoy en día, como modelo de Lorenz.
Pero, Lorenz recibió una gran sorpresa cuando observó que pequeñas diferencias en los datos de partida (algo aparentemente tan simple como utilizar 3 ó 6 decimales) llevaban a grandes diferencias en las predicciones del modelo. De tal forma, cualquier pequeña perturbación, o error, en las condiciones iniciales del sistema puede tener una gran influencia sobre el resultado final, lo que hacía muy difícil hacer predicciones climatológicas a largo plazo. Por ejemplo, los datos empíricos que proporcionan las estaciones meteorológicas tienen errores inevitables, aunque sólo sea porque hay un número limitado de observatorios incapaces de cubrir todos los puntos de nuestro planeta, esto hace que las predicciones se vayan desviando con respecto al comportamiento real del sistema.
Estas observaciones finalmente le llevaron a lo que llegó a convertirse en el efecto mariposa — un término que surgió de un artículo científico que presentó en 1972 titulado: “Predictability: Does the Flap of a Butterfly’s Wings in Brazil Set Off a Tornado in Texas? (Predictibilidad: ¿El aleteo de una mariposa en Brasil genera un tornado en Texas?”
Se denomina, por tanto, efecto mariposa a la amplificación de errores que pueden aparecer en el comportamiento de un sistema complejo. En definitiva, el efecto mariposa es una de las características del comportamiento de un sistema caótico, en el que las variables cambian de forma compleja y errática, haciendo imposible hacer predicciones más allá de un determinado punto, que recibe el nombre de horizonte de predicciones.
Las primeras visiones de Lorenz marcaron el inicio de un nuevo campo que impactó no sólo en las matemáticas sino virtualmente en cada rama de la ciencia – biológica, física y social. En la meteorología, llevó a la conclusión de que puede ser básicamente imposible predecir el clima más allá de dos o tres semanas con un grado razonable de precisión.
Algunos científicos desde entonces han afirmado que el siglo XX será recordado por tres revoluciones científicas: la relatividad, la mecánica cuántica y el caos.
lunes, 16 de marzo de 2009
Crítica literaria
- ¿Qué literatura numérica nos pueden recomendar los hijos de Kutta?
- Y, mirá... Se ha escrito mucho sobre análisis numérico. Podemos recorrer anaqueles y bibliotecas de todo el mundo revisando y disfrutando las muchas y variadas obras que versan sobre el análisis numérico. Pero de toda esa amplia gama te podría nombrar algunos... Por ejemplo tenés Numerical Analysis de Burden & Faires que es muy completo, y que viene con bastantes ejercicios (muchos resueltos), alguna que otra aplicación y varios algoritmos. Otro muy bueno es Numerical Analysis, Mathematics Of Scientific Computing de Kincaid & Cheney, que es más teórico que el anterior y trae menos ejercicios, algoritmos y aplicaciones; pero goza del beneficio de ser un clásico. También está Numerical Methods for Engineers and Scientists de Hoffmann, que es muy del estilo de el de Burden & Faires, con algunos temas de los de complemento más profundizados. En fin, hay mucho para elegir. Por lo menos con estos que te nombro tenés un buen panorama...
miércoles, 11 de marzo de 2009
Una alternativa
lunes, 9 de marzo de 2009
Un relámpago llamado Justin
El relámpago llamado Justin, según tituló al día siguiente Pagina 12, un joven de 24 años nacido en Brooklyn, ostentaba varios títulos al momento de llegar a la línea de largada qatarí (Campeón Olímpico 2004 y Campeón del Mundo 2005). Dominador de las últimas grandes competiciones, había anunciado su intención de rebajar el tiempo del caribeño Asafa Powell cuanto antes (9,77 segundos), porque se consideraba en forma para conseguirlo. Esa tarde confianza le sobraba y en la conferencia de prensa previa, Gatlin bromeó con atacar el récord. "Si tenés el oro olímpico y mundial, ¿qué te falta?", canchereó.
Lo hizo, clavó 9,766 segundos.
Cinco días después, la Federación Internacional de Atletismo comunicó que el estadounidense Justin Gatlin sólo igualó el récord de Asafa Powell. La controvertida decisión, reveló que la marca de Gatlin efectivamente fue de 9,766 segundos, pero que fueron redondeados a 9,77 segundos según la normativa vigente.
El cuarto de Runge y Kutta
program RK4;
(* Program en Pascal – Runge-Kutta 4 *)
(* Ecuación (ODE) : dy/dx = x^2 + sin(xy) *)
(* Condición inicial : y(1) = 2 *)
var
number, i : integer;
h, k1, k2, k3, k4, x, y : real;
function f(x,y : real) : real;
begin
f := x*x + sin(x*y)
end;
begin
number := 1;
while number > 0 do
begin
x := 1.0;
y := 2.0;
writeln(' Número de pasos : ');
read(number);
if number >= 1 then
begin
writeln(' Paso : ');
read(h);
writeln(' x y');
writeln(x, y);
for i := 1 to number do
begin
k1 := h*f(x,y);
k2 := h*f(x+0.5*h,y+0.5*k1);
k3 := h*f(x+0.5*h,y+0.5*k2);
k4 := h*f(x+h,y+k3);
x := x + h;
y := y + (k1+2*k2+2*k3+k4)/6;
writeln(x, y);
end;
end;
end;
end.