Introducci on a la Inform atica · 2019-10-23 · I la programaci on est a basada en la L ogica...
Transcript of Introducci on a la Inform atica · 2019-10-23 · I la programaci on est a basada en la L ogica...
Introduccion a la InformaticaGrado en Fısica 2020-2021
October 8, 2020
profesores
Prof. Alberto RuizDepartamento de Informatica y Sistemashttp://dis.um.es/profesores/[email protected]
Prof. Javier BussonsDepartamento de Fı[email protected]
Prof. Juan [email protected]
Informatica - Grado en Fısica - UMU 2
→ circuit simulator
Informatica - Grado en Fısica - UMU 4
objetivo de la asignatura
I conocer herramientas informaticas imprescindibles para uncientıfico
I aprender a escribir programas sencillos
Informatica - Grado en Fısica - UMU 5
contenidos
1. introduccion
2. fundamentos de programacion
3. herramientas de calculo cientıfico
4. otros temas (graficos, edicion documentos cientıficos, etc.)
Informatica - Grado en Fısica - UMU 6
practicas
I ejercicios semanales
I cuaderno de la asignatura
I practicas en aula de ordenadores (Querequete, Fac. Quımica)
online, dependiendo de la evolucion de la pandemia
asistencia obligatoria
Informatica - Grado en Fısica - UMU 7
evaluacion
examen teorico-practico:
ejercicios parecidos a los que haremos en clase
Informatica - Grado en Fısica - UMU 8
bibliografıa
I basica: apuntes de los profesores
dis.um.es/profesores/alberto ← aula virtual
I complementaria: material de internet
Informatica - Grado en Fısica - UMU 9
horario
I teorıa: 13:00-14:00 lunes, miercoles y (algunos) jueves
I practicas: 15:00-17:00 lunes, miercoles o jueves segun elgrupo asignado.
→ calendario
El grupo 1 empieza esta tarde
Informatica - Grado en Fısica - UMU 10
grupos de practicas
Asignacion de alumnos: en los recursos del aula virtual.
I grupo 1: lunes
I grupo 2: miercoles
I grupo 3: jueves
Informatica - Grado en Fısica - UMU 11
contacto primera parte
Prof. Alberto Ruiz GarcıaDepartamento de Informatica y Sistemas
http://dis.um.es/profesores/[email protected]
Facultad de Informatica2a planta, despacho 2.09
tutorıas: email / aula virtual.
Informatica - Grado en Fısica - UMU 12
apuntes
Estan disponibles en la pagina web de la asignatura, accesibledesde el Contenido Web del aula virtual.
Hay dos “materiales’:
I esta presentacion
I un conjunto de “notebooks jupyter”
Son documentos interactivos que combinan texto, programas ylos resultados de los calculos.
Aprenderemos a usarlos en la clase de practicas.
Informatica - Grado en Fısica - UMU 13
conceptos fundamentales
En informatica hay dos tipos de conceptos:
I Conceptos fundamentales que hay que aprender de memoria.
I Convenios para expresar esos conceptos. Se buscan en google.
Informatica - Grado en Fısica - UMU 14
lenguajes de programacion
Hay muchısimos. . .
Nosotros usaremos Python y R,
y sus herramientas de calculo cientıfico.
Informatica - Grado en Fısica - UMU 15
como se estudia esta asignatura
1. Atender en clase
2. Leer cuidadosamente los apuntes.
3. Reproducir los ejemplos de programacion y experimentarcambiando cosas para ver lo que ocurre.
4. Preguntar lo antes posible todas las dudas. No avanzar sinentender bien los conceptos esenciales que iremos estudiando.
5. Practicar, practicar, practicar: el papel se lo traga todo peroel ordenador no admite ningun error.
Informatica - Grado en Fısica - UMU 16
informatica
procesamiento automatico de informacion
programacion: redactar instrucciones para resolver un problema
computador: maquina que obedece instrucciones (“ejecuta”programas)
Informatica - Grado en Fısica - UMU 17
programacion
un lenguaje matematico ampliado
formulas normales junto con instrucciones para:
I tomar decisiones
I repetir calculos
I poner nombres
Escribiendo las formulas usando solo los sımbolos del teclado
Informatica - Grado en Fısica - UMU 18
toma de decisiones
f =
{1 +√x, si x ≥ 0
cos(2x), en caso contrario
if x>=0:
f = 1 + sqrt(x)
else:
f = cos(2*x)
Informatica - Grado en Fısica - UMU 19
repeticion
x0 = 3
xk+1 = 5xk − 2, para k = 1, 2, . . .
¿ x9 ?
x[0] = 3
for k in range (9):
x[k+1] = 5*x[k] - 2
3, 13, 63, 313, 1563, 7813, 39063, 195313, 976563, 4882813
Informatica - Grado en Fısica - UMU 20
Ecuacion de Kepler
En esta ecuacion no podemos despejar x
x− ε sin(x) = M
pero para unos datos concretos, p.ej.
M =π
2' 1.5708 ε = 0.2
podemos construir una secuencia de aproximaciones cada vez mejores
x0 = M
xk+1 = M + ε sin(xk), para k = 1, 2, . . .
x = 1.5708, 1.7708, 1.7668, 1.7670, 1.7670, . . .
Informatica - Grado en Fısica - UMU 21
computacion
computacion: formula matematica que incluye repeticiones ytoma de decisiones (= programa)
algoritmo: computacion que resuelve un determinado problema(= receta)
ejecucion: realizar fısicamente la computacion (a mano o conordenador)
Informatica - Grado en Fısica - UMU 22
Mr Shanks, an English “computer”. . .
(Traduccion de los Elementos de Euclides, 1885.)
se equivoco en el dıgito no 507
relacion con otras ciencias
relacion con la Fısica:
I herramienta de computo
I soporte de la computacion
relacion con las Matematicas
I la Teorıa de la Computacion es una rama de lasmatematicas
I la programacion esta basada en la Logica
Informatica - Grado en Fısica - UMU 24
Breve historia
I -150 Mecanismo de Antikythera
I 1640s Maquina de Pascal
I 1800s Tarjetas perforadas
I 1830s Analytical Engine, telegrafo, fotografıa
I 1890s coche, tabulador Hollerith, telefono, electron
I 1910s avion, Torres Quevedo, Einstein
I 1920s radio, calculadoras electromecanicas
I 1930s Turing, TV
Informatica - Grado en Fısica - UMU 25
Breve historia
I 1940s Von Neumann, Shannon, transistor, ENIAC, EDSAC
I 1950s Fortran, Lisp, IBM 704, circuito integrado, Sputnik
I 1960s Algol, Basic, mainframes, 74xx, Apollo
I 1970s microprocesador, calculadoras, email
I 1980s ordenadores domesticos
I 1990s WWW, deep blue, windows, linux, portatiles
I 2000s wikipedia, google maps, youtube, SSD
I 2010s tablets, smartphones, redes sociales, deep learning,alphaGo, rpi
Informatica - Grado en Fısica - UMU 26
ejemplos
Informatica - Grado en Fısica - UMU 27
ejemplos
Calcula la superficie de un polıgono irregular
Informatica - Grado en Fısica - UMU 28
ejemplos
Datos experimentales:
corriente - voltaje
Informatica - Grado en Fısica - UMU 29
ejemplos
Recta de regresion
la pendiente es un estimador de la resistencia
Informatica - Grado en Fısica - UMU 30
ejemplos
Calcula la media de los siguientes numeros:
224, 700, 592, 13, 576, 151, 866, 940, 172, 468, 537, 647, 199,383, 239, 123, 877, 965, 181, 881, 491, 650, 364, 319, 213, 404,448, 619, 421, 881, 421, 148, 246, 989, 158, 529, 776, 113, 669,694, 506, 907, 524, 480, 534, 13, 519, 277, 90, 847, 433, 834, 239,72, 444, 374, 121, 991, 754, 659, 148, 289, 265, 115, 88, 992, 987,239, 313, 389, 740, 721, 428, 862, 914, 52, 507, 185, 505, 597,306, 339, 635, 608, 101, 846, 216, 507, 935, 98, 840, 519, 236,401, 196, 510, 55, 510, 161, 383, 849, 182, 447, 999, 762, 323,712, 911, 284, 754, 806, 41, 69, 568, 135, 157, 23, 894, 708, 657,23, 697, 132, 437, 136, 364, 35, 414, 417, 528, 778, 109, 643, 254,389, 164, 456, 269, 357, 31, 154, 633, 997, 50, 761, 598, 491, 541,615, 764, 458, 509, 17, 324, 821, 936, 692, 742, 60
Informatica - Grado en Fısica - UMU 31
ejemplos
Calcula la mediana de los siguientes numeros:
224, 700, 592, 13, 576, 151, 866, 940, 172, 468, 537, 647, 199,383, 239, 123, 877, 965, 181, 881, 491, 650, 364, 319, 213, 404,448, 619, 421, 881, 421, 148, 246, 989, 158, 529, 776, 113, 669,694, 506, 907, 524, 480, 534, 13, 519, 277, 90, 847, 433, 834, 239,72, 444, 374, 121, 991, 754, 659, 148, 289, 265, 115, 88, 992, 987,239, 313, 389, 740, 721, 428, 862, 914, 52, 507, 185, 505, 597,306, 339, 635, 608, 101, 846, 216, 507, 935, 98, 840, 519, 236,401, 196, 510, 55, 510, 161, 383, 849, 182, 447, 999, 762, 323,712, 911, 284, 754, 806, 41, 69, 568, 135, 157, 23, 894, 708, 657,23, 697, 132, 437, 136, 364, 35, 414, 417, 528, 778, 109, 643, 254,389, 164, 456, 269, 357, 31, 154, 633, 997, 50, 761, 598, 491, 541,615, 764, 458, 509, 17, 324, 821, 936, 692, 742, 60
Informatica - Grado en Fısica - UMU 32
ejemplos
Calcula la probabilidad de obtener una suma mayor o igual que 10al lanzar 2 dados.
Informatica - Grado en Fısica - UMU 33
ejemplos
Calcula la probabilidad de que al lanzar 3 dados no se repitaninguna puntuacion.
→ enumeracion
Informatica - Grado en Fısica - UMU 33
Resuelve el siguiente sistema de ecuaciones:
x1 + x2 + x3 = 5
x1 − x2 + 2x3 = 1
5x1 + x2 − x3 = 17
Informatica - Grado en Fısica - UMU 34
En forma matricial: halla el vector x tal que:
Ax = b
donde A =
1 1 11 −1 25 1 −1
y b =
5117
Informatica - Grado en Fısica - UMU 35
Resuelve el sistema
−6 −19 −8 −1 8−14 −13 −20 −20 −7−17 8 18 −1 514 3 6 2 −11−20 −18 −16 3 −15
x =
−38−356135−32−268]
Informatica - Grado en Fısica - UMU 36
Resuelve un sistemaAx = b
donde A tiene dimension 1000× 1000 . . .
from numpy.linalg import solve
x = solve(A,b)
Informatica - Grado en Fısica - UMU 37
Simplifica la siguiente expresion:
(1 + x)(1− x2) + (x3 − x)
Informatica - Grado en Fısica - UMU 38
Simplifica
p(x)
q(x)
donde
p(x) =− x16 + 7x15 − 15x14 + 5x13 + 5x12 + 31x11−− 27x10 − 35x9 − 25x8 + 45x7 + 51x6 + 23x5−− 25x4 − 35x3 − 25x2 − 9x− 2
y
q(x) =− x15 + 5x14 − 5x13 − 5x12 − 5x11 + 21x10 + 15x9−− 5x8 − 35x7 − 25x6 + x5 + 25x4 + 25x3 + 15x2 + 5x+ 1
Informatica - Grado en Fısica - UMU 39
Expresa de forma irreducible:
77
143
Informatica - Grado en Fısica - UMU 40
Expresa de forma irreducible:
8 377 851 883
18 939 210 449
Informatica - Grado en Fısica - UMU 41
Calcula los factores primos de
1234567891011121314151617181920
from sympy.ntheory import factorint
factorint (1234567891011121314151617181920)
{2: 5, 3: 1, 5: 1, 323339: 1, 3347983: 1,
2375923237887317: 1}
Informatica - Grado en Fısica - UMU 42
Calcula los factores primos de
1234567891011121314151617181920
from sympy.ntheory import factorint
factorint (1234567891011121314151617181920)
{2: 5, 3: 1, 5: 1, 323339: 1, 3347983: 1,
2375923237887317: 1}
Informatica - Grado en Fısica - UMU 42
∫e−xdx
Informatica - Grado en Fısica - UMU 43
∫xe−x
2dx
Informatica - Grado en Fısica - UMU 44
∫e−x
2dx
Informatica - Grado en Fısica - UMU 45
∫ 1
0e−x
2dx
Informatica - Grado en Fısica - UMU 45
Φ(t) =1√2π
∫ t
−∞e−
12x2dx
Φ(0.46) =
Informatica - Grado en Fısica - UMU 46
Φ(t) =1√2π
∫ t
−∞e−
12x2dx
Φ(0.46) =
from scipy.stats import norm
norm.cdf (0.46)
0.6772418897496523
Informatica - Grado en Fısica - UMU 47
Φ(t) =1√2π
∫ t
−∞e−x
2dx
Φ(0.46) = 0.5+
from scipy.integrate import quad
from numpy import sqrt , pi, exp
def gauss(t):
return 1/sqrt (2*pi)*exp (-0.5*t**2)
quad(gauss ,0 ,0.46)
(0.1772418897496523 , 1.967780269281375e-15)
↑ ↑resultado error de la aproximacion
Informatica - Grado en Fısica - UMU 48
elementos basicos de Python
un programa es
un conjunto de instrucciones que se evaluan sucesivamente
d = 2+2
print(’hola’)
c = 5*d + 7
print(c)
hola
27
Informatica - Grado en Fısica - UMU 49
computacion
una secuencia de operaciones matematicas ampliadas
con “construcciones” para
I poner nombres (a datos y a formulas)
I repetir operaciones
I seleccionar operaciones dependiendo de condiciones
I operar “a la vez” con conjuntos de numeros
Informatica - Grado en Fısica - UMU 50
elementos basicos de Python
Incluye siempre al principio:
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
Para usar las operaciones matematicas y hacer graficas.
Informatica - Grado en Fısica - UMU 51
numeros
enteros, reales, complejos
17
3.5 4e7 -3.4e-6
2-3.2j
enteros exactos (dıgitos ilimitados)
reales aproximados, coma flotante (15 dıgitos)
Informatica - Grado en Fısica - UMU 52
calculadora
operaciones aritmeticas
+ - * / **
cociente y resto de la division entera
// %
funciones trigonometricas, exponenciales, etc.
np.sin(), np.cos(), np.tan(), np.log(), np.exp(), ...
np.arcsin (), np.arccos (), np.arctan2(y,x), ...
np.pi, np.radians (), np.degrees (), ...
comparaciones
< <= > >= == !=
and or not
Informatica - Grado en Fısica - UMU 53
precedencia
d =3x+ a
2b
d = 3x+a/2b MAL
d = 3*x+a/2*b MAL
d = (3*x+a)/2*b MAL
d = (3*x+a)/(2*b) OK
d = (3*x+a)/2/b OK
Informatica - Grado en Fısica - UMU 54
raız cuadrada
numeros reales:
I 2**0.5
I np.sqrt(2)
I np.sqrt(-2) → NaN
numeros complejos
I (-2)**0.5
I np.sqrt(-2+0j)
Informatica - Grado en Fısica - UMU 55
¡¡OJO!!
No confundir = con ==
a = 2
if a==2:
bla bla
Informatica - Grado en Fısica - UMU 56
¡cuidado!
3,5 → (3, 5)
(se interpreta como un par ordenado o “tupla”)
La coma sirve para separar numeros en una secuencia
Los decimales se indican con un punto:
3.5
cuando tengais tiempo buscad en wikipedia floating point arithmetic
Informatica - Grado en Fısica - UMU 57
secuencias
programar: crear y transformar secuencias
[5.2, -7.4, 100.32 , 0, 42 ]
np.arange (20)
np.linspace(a,b,n)
np.random.randn(n)
[ 3*k**2 - 1 for k in range (10) ]
Informatica - Grado en Fısica - UMU 58
linspace
np.linspace(1,5,9)
1 2 3 4 5
[ 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 ]
Informatica - Grado en Fısica - UMU 59
range
np.arange(7)
0 1 2 3 4 5 6
[0, 1, 2, 3, 4, 5, 6]
Informatica - Grado en Fısica - UMU 60
range
np.arange(2, 8, 0.4)
2 3 4 5 6 7 8
[2.0 2.4 2.8 3.2 3.6 4.0 4.4 4.8 5.2 5.6 6.0 6.4 6.8 7.2 7.6]
Informatica - Grado en Fısica - UMU 61
random
np.random.rand(20)
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19k
0.2
0.4
0.6
0.8
1.0
x k
[0.88731441 0.50000184 0.05722593 0.20895773 0.95041584 0.58817358
0.43823722 0.95436973 0.41268205 0.09126576 0.78811276 0.59018398
0.88699176 0.81361323 0.36222857 0.19685292 0.70095276 0.19702364
0.79414344 0.85533817]
np.random.randint(a,b,n)
np.random.randn(n)
Informatica - Grado en Fısica - UMU 62
random
Simulamos el lanzamiento de 10 dados:
np.random.randint (1,7,10)
array([5, 2, 3, 2, 3, 2, 4, 6, 6, 3])
Informatica - Grado en Fısica - UMU 63
random
Simulamos repetir 10 veces el lanzamiento de 5 dados:
np.random.randint (1,7,(10,5))
array([[4, 2, 6, 3, 5],
[2, 5, 4, 3, 6],
[1, 5, 1, 4, 2],
[4, 2, 2, 2, 1],
[2, 2, 4, 1, 2],
[1, 3, 4, 4, 6],
[2, 2, 6, 3, 4],
[6, 4, 1, 4, 1],
[1, 2, 4, 1, 1],
[4, 6, 3, 4, 3]])
Informatica - Grado en Fısica - UMU 64
operaciones con secuencias
elemento a elemento:
+ - * / ** // %
np.sqrt np.sin np.cos np.exp np.log abs
reduccion:
np.sum np.mean np.median np.std
np.max np.argmax
np.linalg.norm
trocear y combinar
(veremos todos los detalles mas adelante)
Informatica - Grado en Fısica - UMU 65
np.dot
@
“dot product” (producto escalar)
I producto escalar de vectores: u @ v → numero
I producto matriz - vector M @ v → vector
I producto de matrices A @ B → matriz
en general: contraccion de “tensores”
Informatica - Grado en Fısica - UMU 66
sumatorio
combinando lo anterior ya podemos calcular facilmente expresiones como:
22∑k=5
(2k3 − 5k2 + 3
)
k = np.arange (5 ,22+1)
[ 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22]
2*k**3 - 5*k**2 + 3
[ 128 255 444 707 1056 1503 2060 2739 3552 4511
5628 6915 8384 10047 11916 14003 16320 18879]
np.sum( 2*k**3 - 5*k**2 + 3 )
109047
Informatica - Grado en Fısica - UMU 67
cuidado
10∑k=1
(k2 + 1) 6=10∑k=1
k2 + 1
Informatica - Grado en Fısica - UMU 68
“ceros numericos”
sin 30o =1
2
np.sin( np.radians (30) )
0.49999999999999994
np.sin( np.radians (30) ) == 1/2
False
abs( np.sin( np.radians (30) ) - 1/2 ) < 1e-13
True
Informatica - Grado en Fısica - UMU 69
otra forma
[ 2*j**3 - 5*j**2 + 3 for j in range(5, 22+1) ]
[ 128 255 444 707 1056 1503 2060 2739 3552 4511
5628 6915 8384 10047 11916 14003 16320 18879 ]
[ k**2 for k in range (20) if k % 2 == 0 ]
[0, 4, 16, 36, 64, 100, 144, 196, 256, 324]
Esta construccion se llama list comprehension o bucle implıcito.
Informatica - Grado en Fısica - UMU 70
archivos
# local
np.loadtxt("ruta/datos.txt")
# remoto
np.loadtxt("http :// maquina.dominio/ruta/datos.txt")
Informatica - Grado en Fısica - UMU 71
graficas
plt.plot(x,y)
Informatica - Grado en Fısica - UMU 72
plot
x = np.linspace(0, 2*np.pi , 100)
y = np.sin(x) + 1/3*np.sin(3*x) + 1/5 *np.sin(5*x)
plt.plot(x,y)
0 1 2 3 4 5 61.00
0.75
0.50
0.25
0.00
0.25
0.50
0.75
1.00
Informatica - Grado en Fısica - UMU 73
plot
t = np.linspace(0, 2*np.pi , 100)
plt.plot(np.cos(t), np.sin(t))
1.00 0.75 0.50 0.25 0.00 0.25 0.50 0.75 1.001.00
0.75
0.50
0.25
0.00
0.25
0.50
0.75
1.00
Informatica - Grado en Fısica - UMU 74
histogram
x = np.random.rand (1000)
plt.hist(x);
0.0 0.2 0.4 0.6 0.8 1.00
20
40
60
80
100
120
Informatica - Grado en Fısica - UMU 75
histogram
x = np.random.randn (1000)
plt.hist(x, edgecolor=’black’);
3 2 1 0 1 2 30
50
100
150
200
Informatica - Grado en Fısica - UMU 76
poner nombres
dos tipos de definicion: constantes y funciones
=
peso = 5*3
def
def cua(x):
return x**2
Informatica - Grado en Fısica - UMU 77
variables
b = 2
r = 5*b + 3
print(r)
13
Informatica - Grado en Fısica - UMU 78
variables
b = 2
r = 5*b + 3
b = 0
print(r)
13
El sımbolo =
I da nombre a un “dato” (numero, secuencia, texto, etc.)
I el nombre se puede reutilizar (redefinir)
I guarda un dato en un espacio de almacenamiento
I “variable” significa constante que se puede cambiar
Informatica - Grado en Fısica - UMU 79
funciones
b = 2
def fun(z):
y = -z**2 + b
return y
print( fun )
ERROR!
Informatica - Grado en Fısica - UMU 80
funciones
b = 2
def fun(z):
y = -z**2 + b
return y
print( fun )
ERROR!
Informatica - Grado en Fısica - UMU 80
funciones
b = 2
def fun(z):
y = -z**2 + b
return y
print( fun(3) )
-7
Informatica - Grado en Fısica - UMU 81
funciones
b = 2
def fun(z):
y = -z**2 + b
return y
b = 5
print( fun(3) )
-4
El sımbolo def
I da nombre a una formula (computacion)
I tiene argumentos
I se evalua cada vez con las definiciones mas recientes
Informatica - Grado en Fısica - UMU 82
Leed detenidamente:
I Tema 1 (Operaciones simples)
I Tema 4 (Funciones)
Para estudiar los notebooks es conveniente quitar los resultados
(menu Cell → All Output → Clear)
y evaluar sucesivamente las celdas intentando adivinar el resultado que va a
aparecer.
Los apartados marcados con asterisco * son mas avanzados y se pueden saltar
en una primera lectura
Informatica - Grado en Fısica - UMU 83
Calculemos con lapiz y papel
ln 5
Informatica - Grado en Fısica - UMU 84
lnx =
∫ x
1
dt
t
0 1 2 3 4 5 6 70.0
0.2
0.4
0.6
0.8
1.0
1.2
1.4
ln5 = 1.6094379
Informatica - Grado en Fısica - UMU 85
lnx =
∫ x
1
dt
t
0 1 2 3 4 5 6 70.0
0.2
0.4
0.6
0.8
1.0
1.2
1.4
ln5 1.683
aproximamos el area mediante un polıgono
Informatica - Grado en Fısica - UMU 85
lnx =
∫ x
1
dt
t
0 1 2 3 4 5 6 70.0
0.2
0.4
0.6
0.8
1.0
1.2
1.4
ln5 1.622
aproximamos el area mediante un polıgono
Informatica - Grado en Fısica - UMU 85
trapecios
Informatica - Grado en Fısica - UMU 86
integracion
La informatica nace para automatizar la integracion numerica.
→ integrador mecanico
→ ball and disk
→ video
→ differential analyser
Informatica - Grado en Fısica - UMU 87
ejercicio
Con lo aprendido hasta ahora ya podemos automatizar el calculoaproximado de integrales definidas como
ln(5) =
∫ 5
1
1
xdx
Φ(t) =1√2π
∫ t
0e−x
2dx, Φ(0.46) = ??
Dividiremos el area bajo la curva en varios trozos simples, rectangulares otriangulares.
Lo haremos primero con la funcion 1/x. Cuando funcione bien podemos
cambiar como deseemos la funcion y los extremos de integracion.
Informatica - Grado en Fısica - UMU 88
primera idea
def f(x):
return 1/x
x = np.linspace (1,5,7)
d = x[1]-x[0]
r = sum( f(x) ) * d
0 1 2 3 4 5 6 70.0
0.2
0.4
0.6
0.8
1.0
1.2
1.4
ln5 2.044
Informatica - Grado en Fısica - UMU 89
segunda idea
n=5; a=1; b=5
d = (b-a)/(n-1)
x = np.arange(a,b,d)
r = sum( f(x) + f(x+d) )/2 * d
0 1 2 3 4 5 6 70.0
0.2
0.4
0.6
0.8
1.0
1.2
1.4
ln5 1.683
Informatica - Grado en Fısica - UMU 90
Excepto en los extremos, cada valor de f(xk) se cuenta dos veces.Se puede simplificar.
Si yk = f(xk), el area de cada tramo es (yk + yk+1)d/2. La sumade todos es
((y0 + y1) + (y1 + y2) + (y2 + y3) + . . .+ (yn−2 + yn−1))d
2=
= (1y0 + 2y1 + 2y2 + 2y3 + . . .+ 2yn−2 + 1yn−1)d
2
Informatica - Grado en Fısica - UMU 91
mejor
x = np.linspace (1,5,5)
d = x[1]-x[0]
y = f(x)
w = [1,2,2,2,1]
r = sum( y * w )/2 * d
0 1 2 3 4 5 6 70.0
0.2
0.4
0.6
0.8
1.0
1.2
1.4
ln5 1.683
Informatica - Grado en Fısica - UMU 92
con el producto escalar
x = np.linspace (1,5,5)
d = x[1]-x[0]
y = f(x) * d/2
w = [1,2,2,2,1]
r = y @ w
equivalente a la anterior
0 1 2 3 4 5 6 70.0
0.2
0.4
0.6
0.8
1.0
1.2
1.4
ln5 1.683
Informatica - Grado en Fısica - UMU 93
en general
n = 10
x = np.linspace (1,5,n)
d = x[1]-x[0]
w = np.zeros(n)
w[0:n] = 2
w[0] = 1; w[n-1] = 1
y = f(x) * d/2
r = y @ w
1.6249415218949677
Hay diferentes formas de construir los coeficientes w = [1,2,2,...,2,1].
Las explicaremos en clase.
Informatica - Grado en Fısica - UMU 94
quad
∫ 1
0x2 dx
from scipy.integrate import quad
def f(x):
return x**2
quad(f,0,1)
(0.33333333333333337 , 3.700743415417189e-15)
↑ ↑resultado error de la aproximacion
Informatica - Grado en Fısica - UMU 95
secuencias
cerrada: x[k] solo depende de k
Puedo calcular directamente cualquier elemento, p.ej.x[7154], sin calcular los anteriores
podemos calcular facilmente muchos elementos “a la vez” ya que las
operaciones matematicas actuan automaticamente sobre secuencias. Lo
hemos hecho en el ejemplo del sumatorio y de la integral.
recursiva: x[k] depende de x[k-1], x[k-2], . . .
Hay que calcular antes todos los anteriores
Necesitamos programar la “iteracion” con instrucciones de repeticion.
Informatica - Grado en Fısica - UMU 96
A continuacion vamos a practicar con las construcciones derepeticion for, break, y while.
Tambien practicaremos la definicion de funciones con def.
Para ello vamos a resolver de varias formas el problema deencontrar una solucion aproximada de una ecuacion cualquieraf(x) = 0 en la que no se puede despejar x, y por tanto tenemosque recurrir a un metodo de aproximaciones sucesivas.
Es un problema tıpico en el que cada elemento depende de losanteriores, y por tanto hay que programar expresamente laiteracion.
Informatica - Grado en Fısica - UMU 97
Newton’s method
Buscamos la solucion x∗ (root) de una ecuacion:
f(x) = 0
−2 −1 0 1 2 3 4 5−100
0
100
200
300
400
y = f (x)
f (x∗) = 0
x∗
Informatica - Grado en Fısica - UMU 98
Newton’s method
Aproximacion inicial (semilla) x0:
f(x0) 6= 0
−2 −1 0 1 2 3 4 5−100
0
100
200
300
400
y = f (x)
x0
Informatica - Grado en Fısica - UMU 98
Newton’s method
Resolvemos una aproximacion lineal a la ecuacion:
f(x) ' f ′(x0)x+ b
−2 −1 0 1 2 3 4 5−100
0
100
200
300
400
y = f (x)
x0x1
Informatica - Grado en Fısica - UMU 98
Newton’s method
Aproximaciones sucesivas:
xk+1 = xk −f(xk)
f ′(xk)
−2 −1 0 1 2 3 4 5−100
0
100
200
300
400
y = f (x)
Informatica - Grado en Fısica - UMU 98
Newton’s method
Ejemplo: resuelve la ecuacion 2x3 + 20x = 10.
f(x) = 2x3 + 20x− 10
f ′(x) = 6x2 + 20
xk+1 = xk −2x3k + 20xk − 10
6x2k + 20
Informatica - Grado en Fısica - UMU 99
Newton’s method
Codigo:
def f(x):
y = 2*x**3 + 20 *x - 10
return y
def fp(x):
return 6*x**2 + 20
x = np.zeros (10)
x[0] = 4
for k in range (9):
x[k+1] = x[k] - f(x[k]) / fp(x[k])
print(x)
[4. 2.29310345 1.12961369 0.57005995 0.4893439 0.48835345
0.48835331 0.48835331 0.48835331 0.48835331]
Informatica - Grado en Fısica - UMU 100
En 6 pasos la secuencia se estabiliza: a partir de ahı lasaproximaciones se repiten.
Comprueba que f(x[6]) es (aproximadamente) cero. Hemosencontrado una solucion de la ecuacion.
Intenta encontrar mas soluciones cambiando la semilla.
Esta ecuacion tiene solo una solucion real. ¿Podemos encontrar lascomplejas mediante este metodo?
Informatica - Grado en Fısica - UMU 101
ecuacion de Kepler
Resuelve con el metodo de Newton
M = x− ε sin(x) para M = 3π/4, ε = 0.8
Solucion: con x0 = M las aproximaciones son
[2.356194490192345,
2.71749658570593,
2.6989297690080485,
2.698896384568338,
2.6988963844574974,
2.6988963844574974,
2.6988963844574974,
...]
¡compruebalo!
Informatica - Grado en Fısica - UMU 102
ecuacion de Kepler
Para estos valores de M = 3π/4 y ε = 0.8 el metodo simple de latransparencia 21 converge muy despacio:
x0 = M
xk+1 = M + ε sin(xk)
[ 2.356194490192345, 2.921879915141583, 2.530553911204325,
2.815169333413777, 2.612720308085192, 2.759842547568407,
2.6542306198829424, 2.7308318414083494, 2.6756400655894796,
2.715613723440277, 2.686764432048095, 2.707640894534943,
2.692562131556909, 2.7034683831622406, 2.6955878080375086,
2.701286207905195, 2.697167852036122, 2.70014539328672,
2.6979932339498625, 2.699549113988344 . . .
Informatica - Grado en Fısica - UMU 103
metodo de Newton
para calcular facilmente la raız cuadrada de un numero dado n.
x2 = n
0 = f(x) = x2 − n
f ′(x) = 2x
xk+1 = xk −f(xk)
f ′(xk)= xk −
x2k − n2xk
=x2k − n
2xk=
1
2
(xk +
n
xk
)
→ algoritmo babilonico
Informatica - Grado en Fısica - UMU 104
√7
xk+1 =1
2
(xk +
7
xk
)X = np.zeros (10)
X[0] = 1
n = 7
for k in range (9):
X[k+1] = ( X[k] + n/X[k] )/2
print(X)
[1. 4. 2.875 2.6548913 2.64576704 2.64575131
2.64575131 2.64575131 2.64575131 2.64575131]
Informatica - Grado en Fısica - UMU 105
√7
Lo mismo pero sin almacenar los pasos intermedios:
x← 1
2
(x+
7
x
)x = 1
n = 7
for k in range (9):
x = ( x + n/x )/2
print(x, x**2)
2.6457513110645907 7.000000000000001
Ahora x es una variable simple (no una secuencia) y redefinimos su valor en
cada paso.
Informatica - Grado en Fısica - UMU 106
√7
Si metemos el print dentro del bucle observamos los valores sucesivos en la
pantalla, pero no se guardan.
x = 1
n = 7
for k in range (9):
x = (x+n/x)/2
print(x, x**2)
4.0 16.0
2.875 8.265625
2.654891304347826 7.048447837901702
2.64576704419029 7.0000832521234235
2.6457513111113693 7.00000000024753
2.6457513110645907 7.000000000000001
2.6457513110645907 7.000000000000001
2.6457513110645907 7.000000000000001
2.6457513110645907 7.000000000000001
Informatica - Grado en Fısica - UMU 107
En los ejemplos anteriores estamos refinando la solucion unnumero fijo de veces.
Normalmente no sabemos cuantos pasos son necesarios.
Es mejor terminar el proceso cuando la aproximacion seasuficientemente buena. Hay dos formas: while y break.
Informatica - Grado en Fısica - UMU 108
while
Primera idea: detener la iteracion cuando f(x) = 0
(o sea, cuando se cumpla la ecuacion, en este caso x2 = n)
x← 1
2
(x+
n
x
)x = 1
n = 7
while x**2 != n:
x = ( x + n/x )/2
print(x)
¡¡¡El ordenador se ”cuelga”!!! (bucle infinito)
7 != 7.000000000000001
menu kernel → interruptInformatica - Grado en Fısica - UMU 109
OJO: si ponemos una condicion estricta como
while not( x**2 == n):
el ordenador se quedara “cogado” en un bucle infinito.
7 6= 7.000000000000001
Informatica - Grado en Fısica - UMU 110
while
Detenemos la iteracion cuando la ecuacion se cumpla bastantebien: f(xk) ' 0, o sea, |f(xk)| < ε
x← 1
2
(x+
7
x
)x = 1
n = 7
while abs( x**2 - n ) > 1E-6:
x = ( x + n/x )/2
print(x)
2.6457513111113693
Informatica - Grado en Fısica - UMU 111
break
x = 1
n = 7
for k in range (100):
x = ( x + n/x )/2
print(x)
if abs( x**2 - n ) < 1E-6:
break
4.0
2.875
2.654891304347826
2.64576704419029
2.6457513111113693
Informatica - Grado en Fısica - UMU 112
while pone las condiciones de continuacion al principio del bucle.Si no se cumplen nunca el proceso se quedara en un bucle infinito.
break es mas flexible: puedes poner varias condiciones determinacion a lo largo del cuerpo del bucle. Y ademas, garantizaun numero maximo de repeticiones.
Informatica - Grado en Fısica - UMU 113
Las siguientes transparencias son una breve introduccion a temasavanzados que estudiaremos mas adelante. Podemos saltarlas enuna primera lectura.
Informatica - Grado en Fısica - UMU 114
derivacion numerica
Para aplicar el metodo de Newton hay que calcular y programar laderivada manualmente.
Alternativa: usar una diferencia finita:
f ′(x) ' f(x+ h)− f(x)
hh = “pequeno”
En la ecuacion anterior 2x3 + 20x = 10, con h = 0.1 se obtiene:
[4., 2.32798514, 1.18227111, 0.60009897, 0.49210829,
0.4884096, 0.48835412, 0.48835332, 0.48835331. 0.48835331]
¡compruebalo!
Informatica - Grado en Fısica - UMU 115
derivacion numerica
Es mejor usar una biblioteca de funciones que proporciona unaaproximacion muy precisa a la derivada:
import numdifftools as nd
def f(x):
y = 2*x**3 + 20 *x - 10
return y
df = nd.Derivative(f)
x = np.zeros (10)
x[0] = 4
for k in range (9):
x[k+1] = x[k] - f(x[k]) / df(x[k])
[4., 2.29310345, 1.12961369, 0.57005995, 0.4893439,
0.48835345, 0.48835331, 0.48835331, 0.48835331, 0.48835331]
Informatica - Grado en Fısica - UMU 116
instalacion de paquetes
En una celda del jupyter notebook:
!pip install numdifftools
Collecting numdifftools
Downloading https :// files.pythonhosted.org/etc...
100%
Installing collected packages: numdifftools
Successfully installed numdifftools -0.9.39
Informatica - Grado en Fısica - UMU 117
calculo simbolico
Tambien es posible manipular sintacticamente formulas matematicas, sin dar
valores numericos concretos a las variables.
import sympy as s
x = s.symbols(’x’)
s.diff( 3*x**5 - s.sin(2*x) , x)
15*x**4 - 2*cos (2*x)
x,e,M = s.symbols(’x e M’)
kepler = x - e*s.sin(x) - M
s.diff( kepler , x)
-e*cos(x) + 1
Informatica - Grado en Fısica - UMU 118
condiciones logicas
expresiones que se evaluan a True o False y se se construyencombinando los operadores:
< <= > >= == != in
not and or
1 > 2
n%2 == 0
x > 0 and x**2 <= 100
( x in [10 ,20 ,30] or not (z != y) ) and c == []
Informatica - Grado en Fısica - UMU 119
condiciones logicas
Se usan en las construcciones if y while.
def fun(x):
if x > 0 and x**2 < 100:
return x
else:
return -3*x
r = 5 * (b if b >= 0 else -b) + 3
n = 17
while n != 1:
print(n)
n = n//2 if n%2==0 else 3*n+1
Informatica - Grado en Fısica - UMU 120
estructura de bloques
def fun(x,y):
z = x+y
for k in range(10):
print(k)
if k>z:
print('bien')
m = 2
else:
m = 3
return z**m
Informatica - Grado en Fısica - UMU 121
estructura de bloques
def fun(x,y):
z = x+y
for k in range(10):
print(k)
if k>z:
print('bien')
m = 2
else:
m = 3
return z**m
4
4
4
Informatica - Grado en Fısica - UMU 122
Graficas
Cada grafica permite especificar:
I una o varias curvas superpuestas, cada una con su estilo(color, grosor, etc.)
I leyenda
I seleccion del intervalo en cada eje, ticks, grid
I tıtulo, nombre de los ejes, anotaciones de texto
I dimensiones de la figura, subplots.
plt.savefig(’nombre.pdf’)
Informatica - Grado en Fısica - UMU 123
0 1 2 3 4 5 6x
1.00
0.75
0.50
0.25
0.00
0.25
0.50
0.75
1.00y hola
bonito plot
sin(x)sin(2x)cos(x)
Informatica - Grado en Fısica - UMU 124