You are on page 1of 3

Facultad de Ciencias.

Departamento de Fsica Aplicada


Grado en Fsica. Curso 2017/18

M TODOS NUMRICOS
H OJA 0

0.1 Escribe, compila y ejecuta el siguiente programa:

PROGRAM cuentas

IMPLICIT NONE
REAL r1,r2,r3

r1=1/2
print*,1/2 =,r1
r2=1./2.
print*,1./2. =,r2

r1=0.00001
r2=1000000.0
r3=r2+r1
print*,0.00001+1000000.0 =,r3

r3=r3-r2
print*,(0.00001+1000000.0) - 1000000.0 =,r3
print*

r1=1234567890.0
print*,1234567890.0 = ,r1
print*

r2=1000000000.0
print*,1000000000.0 = ,r2
print*

print*,1234567890.0/1000000000.0 = ,r1/r2
print*

stop
end

Explica qu hace el programa. Por qu algunos resultados parece que estn mal? cmo se
puede solucionar?
0.2 El siguiente programa efecta la suma de los n primeros trminos de la serie armnica en orden
ascendente (descendente en magnitud de los sumandos) y en orden descendente (ascendente en
magnitud de los sumandos):

program suma

implicit none
integer i,j
real suma1,suma2

print*,numero de sumandos
read*,j
suma1=0.0

do i=1,j
suma1=suma1+1.0/i
end do

print*,suma ascendente =,suma1


suma2=0.0

do i=j,1,-1
suma2=suma2+1.0/i
end do
print*,suma descendente =,suma2

stop
end

a) Escribe, compila y ejecuta el programa.


b) Si trabajamos con reales con 6 cifras significativas, para n mayor que 1.000.000 ambas
sumas dan resultados sensiblemente diferentes. Adems, a partir de 3.000.000 parece que
la serie ascendente converge y la descendente sigue siendo divergente. Por qu ocurre
esto?

0.3 Escribe, compila y ejecuta un programa que:


a) Calcule x = 1, 0/1000, 0 y sume x 1.000 veces.
b) Sume 0, 001 1.000 veces.
c) Multiplique 0, 001 por 1000, 0.
Cules son los resultados de los apartados anteriores en precisin sencilla (trabajando con
REAL)? Y en doble precisin? Qu consecuencia se saca de esto?

0.4 Escribe un programa que calcule las races de la ecuacin ax2 + bx + c = 0 (incluidas las races
complejas).
La solucin de la ecuacin es bien conocida:

b b2 4ac
x= (1)
2a
Sentencias y estructuras comunes tiles en este programa:

Lectura de los datos a, b y c de la consola: La sentencia READ *,A,B,C lee el valor de


las variables A, B y C (que debern ser reales simples o de doble precisin) de la consola.
Bloque condicional IF THEN, ELSE, ELSE IF, ENDIF (ELSE y ELSE IF son
opcionales): El uso para este ejemplo del bloque condicional podra ser como sigue. Su-
pongamos que DELTA es el discriminante de (1), entonces necesitamos saber si es mayor
que cero (dos soluciones reales), igual a cero (una solucin doble, real) o menor que cero
(dos soluciones, compleja y compleja conjugada). La estructura podra ser as:
IF(DELTA.GT.0.0) THEN
.......
ELSE IF(DELTA.EQ.0.0) THEN
.......
ELSE
.......
END IF
Los operadores condicionales de la sentencia IF son los siguientes:
Aritmticos: .LE., .EQ., .GE., .LT., .GT., .NE. que equivalen a ,
=, , <, > y 6=.
Lgicos: .AND., .OR., .NOT., .EQV. y .NEQV.

0.5 Escribir un programa que almacene en varios ficheros los valores de algunas funciones notables
(trigonomtricas, hiperblicas, etc.). Cada fichero debe contener dos columnas, una con los
valores de x y otra con la funcin que sea.

Funciones comunes tiles en este programa:

Las funciones trigonomtricas e hiperblicas comunes se representan en FORTRAN median-


te las siguientes funciones: SIN(X), COS(X), TAN(X), ASIN(X), ACOS(X), ATAN(X),
ATAN2(X,Y), SINH(X), COSH(X) y TANH(X).
Su significado es evidente salvo quizs el de la funcin ATAN2(X,Y) que representa el arco
cuya tangente es X/Y, ATAN2(X,Y) arctan(x/y). Los argumentos de las funciones directas
deben estar dados en radianes. Los resultados de las funciones inversas tambin estn dados
en radianes. Otras funciones de uso comn son la exponencial, el logaritmo neperiano, el loga-
ritmo decimal y la raz cuadrada, que se representan con EXP(X), LOG(X), LOG10(X),
SQRT(X). De manera general, para elevar un nmero A a una potencia B, se utiliza la sintaxis
A**B.
Para abrir un fichero se utiliza la sentencia OPEN. La sintaxis ms simple de este comando
es OPEN(n,FILE=Nombre-fichero) donde n es un nmero mayor de 9 y menor que
100. Antes de terminar el programa, o cuando ya no se vaya a usar el fichero, se debe cerrar con
el comando CLOSE(n). Para escribir en un fichero se puede utilizar el comando WRITE de
la siguiente forma: WRITE(n,*) x,f(x) donde n es el nmero que hemos utilizado para
abrir el fichero y f(x) es la funcin que queremos escribir.

You might also like