You are on page 1of 21

FÍSICA COMPUTACIONAL

II
Juan Castillo
Contenido
• Programación por “guion” VS Programación “tradicional”
• ¿ Por que Matlab? ¿Qué hay de Python?
• Introducción a Matlab
• Manipulación de matrices
• Comandos útiles en Matlab
• Sintaxis de Matlab
• Ciclos for y while
• Condicionales: if, ifelse
• Operaciones lógicas
Programación: guion vs tradicional

• Programación tradicional, también • En el contexto de este curso la


llamada programación de sistema programación por guion (scripting)
(system programming), se refiere a la queremos decir aquella programación
construcción de programas o con un nivel alto y flexible, que utiliza
aplicaciones que utilizan lenguajes lenguajes como Python o Matlab.
como Fortran, C, C++, C# o Java,
entre otros.

PROS en la programación por guion


 Los científicos avanzan. Los científicos e ingenieros simplemente se
sienten mas productivos en tales ambientes.
 Construye tu ambiente. Simular, visualizar y analizar datos de la
forma en que tu desees.
 Interfaces gráficas de Usuario (GUI). Pueden construirse fácilmente
programas con ambientes gráficos para la educación o para
comodidad de trabajo.
¿Python o Matlab?

En muchos sentidos Matlab es un estándar de facto. Pero lo cierto es que:

 Python es un lenguaje de programación más poderoso.


 El ambiente de Python es totalmente abierto y hecho para la integración
con herramientas externas.
 La programación en Python es orientada a objetos, la cual es más
conveniente
 La interconexión entre códigos en C, C++ y Fortran está mejor lograda en
Python y por lo tanto es más simple.
 Python es libre y corre en mas plataformas (Windows, Mac OS, Linux,
Raspberry Pi)

Y entonces ¿ por que Matlab ?

 No requiere conocimientos profundos de programación o del


sistema operativo.
 Mejor suporte en el funcionamiento de sus herramientas.
 Y sobre todo: PORQUE AL PROFE DE LA CLASE LE AGRADA
Matlab: Matrix-Laboratory

Ventana de Herramientas
contextuales

Ventana
Ventana de Editor “espacio de
ubicación trabajo”
actual

Ventana del
Historial

Ventana de
comandos

La ventana de comandos es la ventana


principal de Matlab y es la que se emplea
para la ejecución de los comandos.
Puntos para trabajar en la ventana de
comandos
 Para teclear un comando el cursor debe estar situado después del
prompt: “>>”.
 Los comandos se ejecutan al presionar la tecla Intro.
 Pueden teclearse mas de dos comandos usando “,” entre ellos.
 No es posible ir hacia arriba en una línea anterior.
 Pueden invocarse comandos anteriores con las teclas de flechas
arriba y abajo.
 Un comando puede ser dividido en dos renglones usando “…”
 Los comentarios se introducen con el símbolo “%”
 Los comandos que se ejecuten muestran inmediatamente
cualquiera que sea su respuesta de salida. Si se desea evitar ésta
visualización debe colocarse “;” al final del comando.
 El comando clc limpia la ventana de comandos (borra todas las
salidas anteriores), pero las variables creadas aún se encuentran
definidas dentro de la memoria de Matlab. El comando clear borra
las variables sin borrar la ventana de comandos.
Operaciones aritméticas y funciones
matemáticas
Operación Símbolo Ejemplo Función Descripción Ejemplo

Suma + 5+3 sqrt(x) Raíz cuadrada sqrt(81)

Resta - 5-3 exp(x) ex exp(5)

Multiplicación * 5*3 abs(x) Valor absoluto abs(-23)

División Derecha / 5/3 log(x) Logaritmo base e log(12)

log10(x) Logaritmo base 10 log10(32)


División Izquierda \ 5\3 =3/5
factorial(x) x! factorial(5)
Exponenciación ^ 5^3 = 53
sin(x) Función seno sin(pi)

Función Descripción Ejemplo cos(x) Función coseno cos(34)

Redondea al entero tan(x) Función tangente tan(pi/2)


round(x) round(17/5)
mas proximo

fix(x) Redondea hacia cero fix(13/5)

Redondea hacia
ceil(x) ceil(11/5)
infinito
Redondea hacia
floor(x) floor(-9/4)
menos infinito
Retorna el residuo
rem(x) rem(13/5)
de una división
1 si x>0, -1 si x<0, 0
sign(x) sign(5)
si x=0

tan(x) Función tangente tan(pi/2)


Variables en Matlab
Reglas en la creación de
Variables predefinidas
variables
• Pueden contener letras, números y el guion • ans Esta variable contiene el resultado
bajo “_”. del comando que no fue asignado a una
• Siempre deben empezar con una letra variable.
• Matlab distingue entre MAYÚSCULAS y • pi es el número 
minúsculas, por lo que aa, aA, Aa y AA son 4 • eps es la diferencia mas pequeña
variables distintas. entre dos números.
• Evitar usar nombres de variables que se • inf División por cero
utilizan como funciones. • i, j −1
• NaN Abreviatura para Not a Number,
división 0/0

Comandos útiles
Comando Resultado
clear Borra las variables de la memoria

clear x y z Borra solo las variables x, y, y z de la


memoria
who Muestra un listado de las variables creadas
hasta el momento
whos Lo mismo que who, además muestra
información acerca del tipo y tamaño de las
variables
Arrays (Vectores: matrices unidimensionales)

El array es una estructura fundamental que Matlab Creación de un vector con datos igualmente
utiliza para almacenar y manipular datos. Estos arrays espaciados
o vectores, son listas de números dispuestos en filas
y/o columnas. VectorFila=[ m:q:n]

Cuando la información que se almacena en estos ó


arrays son caracteres, usualmente se denominan
cadenas de caracteres (strings) VectorFila = m:q:n

Los array solo pueden contener un tipo de variable, no Donde m es el valor inicial, q es el incremento y n es
pueden tenerse arrays que contengan variables el valor final. Si q>0, entonces n>m, de lo contrario si
numéricas y caracteres. q<0 entonces n<m

Si q se omite, entonces se tomara una incremento por


defecto de una unidad. En este caso n>m siempre
En este curso se usaran invariablemente los nombres debe ser cierto.
arrays o vectores para referirnos a listas de números
ordenados en filas o columnas.

Creación de un vector con datos segmentados por


Creación de un vector a partir de una lista de
un valor cualquiera
números conocidos

VectorFila= linspace(Inicio, Final, Num_Valores)


VectorFila=[ num1 num2 num3 … numN ]
Con Inicio y Final los valores inicial y final del intervalo
VectorColumna = [num1; num2;num3; … numN]
y Num_Valores el numero de valores aparecerán en el
intervalo Final - Inicio
Matrices Comando
Comandos útiles con matrices
Resultado
una_matriz = [ a11, a12, a13; …
zeros(m,n) Crea una matriz rellena de ceros con m
a21, a22, a23; …
filas y n columnas
a31, a32, a33; …
a41, a42, a43] ones(m,n) Crea una matriz rellena de unos con m
filas y n columnas
Los elementos de las filas están separados por
eye(n) Crea una matriz cuadrada de nxn con la
comas o por espacios.
diagonal rellena de unos.
Para colocar una nueva fila se usa punto y coma, A’ Se crea la matriz transpuesta de la matriz
en este ejemplo se usaron tres puntos para A
separar cada fila y ser claro, sin embargo pueden
length(A) Devuelve el numero de elementos en A
definirse las matrices en un solo renglón.

También puedes construir una matriz usando size(A) Devuelve un vector fila [m,n] donde m y n
vectores, siempre y cuando las dimensiones sean son el tamaño de la matriz A
coherentes.
EJEMPLO: Interactuar con Matlab (I/O)
>> A=[1:2:11; 0:5:25;
linspace(10,60,6); Comando Resultado
67 2 43 68 4 13]
input(‘Texto Muestra un mensaje de texto en la
• A( : , n ) se refiere a todos los elementos de descriptivo’) ventana de comando para solicitar
la columna n de la matriz A información por el teclado, por defecto se
• A( n, : ) se refiere a todos los elementos de espera un número
la fila n de la matriz A input(‘Texto’, ‘s’) Se espera información de tipo carácter
• A( :, m:n) se refiere a los elementos entre
las columnas m y n disp(‘Texto’) Muestra texto en la ventana de
• A( m:n, : ) se refiere a los elementos entre comandos
las filas m y n disp(variable) Muestra el valor de la variable en la
• A(m:n, p:q) se refiere a los elementos entre ventana de comandos
la fila m y n y las columnas p y q
Determinantes, división por izquierda y
derecha
Matlab, puede calcular el determinante de O como:
matrices cuadradas con la función det() :
4 2 6
EJEMPLO: 𝑥 𝑦 𝑧 −2 8 10 = [8 4 0]
>> A=[6,5; 3, 9];
>> det(A) 6 2 3
Matlab es capaz de realizar divisiones de arrays: Que pueden ser vistos como ecuaciones matriciales de
la forma:
por la izquierda y por la derecha.
Estas operaciones son particularmente útiles 𝐴𝑋 = 𝐵
cuando se desea resolver sistemas de
ecuaciones.
𝑋 𝑇 𝐴𝑇 = 𝐵𝑇
Por ejemplo un sistema de ecuaciones lineales de tres
Con:
incógnitas: 𝑥
4𝑥 − 2𝑦 + 6𝑧 = 8 𝑋= 𝑦 𝑋𝑇 = 𝑥 𝑦 𝑧
2𝑥 + 8𝑦 + 2𝑧 = 4 𝑧
4 −2 6 4 2 6
6𝑥 + 10𝑦 + 3𝑧 = 0
𝐴= 2 8 2 𝐴𝑇 = −2 8 10
Puede ser escrito de forma matricial como: 6 2 3
6 10 3
4 −2 6 𝑥 8 8
2 8 2 𝑦 = 4 𝐵= 4 𝐵𝑇 = [8 4 0]
6 10 3 𝑧 0 0
División Izquierda, derecha
Por lo tanto podemos resolver las ecuaciones si
hacemos:

𝐴−1 𝐴𝑋 = 𝐴−1 𝐵 𝑋 𝑇 𝐴𝑇 𝐴𝑇 −1
= 𝐵𝑇 𝐴𝑇 −1

𝑋 = 𝐴\𝐵 𝑋 𝑇 = 𝐵𝑇 /𝐴𝑇

Es importante recordar que Matlab por defecto


realiza operaciones matriciales.

Sin embargo la mayor parte de las veces solo


deseamos operaciones elemento a elemento, en
estos casos es necesario anteponer un punto a
los operadores de multiplicación y división

.* Multiplicacion elemento a elemento


./ Division elemento a elemto.
Graficar funciones Especificadores de línea

Estilo de línea Especificador


Para graficar funciones en Matlab se utiliza el
comando plot(x,y) donde las variables x y y son Solida (defecto) -
vectores que contienen los datos de los ejes x y y. Discontinua --
punteada :

La mucho de los comandos, instrucciones o comandos Raya punto -.


en Matlab, pueden modificar sus acciones con
parámetros adicionales a los necesarios por defecto.
Especificadores de marcas
Particularmente el comando plot en general puede
ampliarse su sintaxis de la siguiente manera: Estilo de línea Especificador
Signo mas +
plot(x,y,’Especificadores de linea’, Círculo o
‘Propiedad’, ‘valor’)
Asterisco *
Cuadrado s
• Los especificadores se introducen como caracteres Diamante d
dentro del comando plot
• Dentro de cada cadena los especificadores pueden
ser introducidos en cualquier orden Especificadores de color
• Los especificadores son opcionales. Esto implica
que un comando puede tener uno o más Estilo de línea Especificador
especificadores o incluso ninguno
Rojo r
Ejemplos:
Verde g
plot(x, y) Linea solida azul Azul b
plot(x, y, ’r’) Línea solida roja
plot(x, y, ’*g’) Asteriscos sin Negro k
unir, verde Magenta m
Múltiples funciones
Cuando se desea colocar mas una curva en la
gráfica, debe usarse el comando hold on
inmediatamente después del comando plot de la
primera curva. De aquí en adelante, cada que se
ejecute un comando plot, Matlab mantendrá todas
las curvas graficadas en la ventana.

Para desactivar este estado debe usarse hold off.

Ejemplo:

>> plot(x, y)
>> hold on
>> plot(x, y1, ’r’)

Si por el contrario se desean colocar distintas


curvas en cuadros independientes, puede usarse
el comando subplot(renglón, columna, número).
Donde la variable renglón y columna representan
las divisiones en reglones y columnas de la
ventana (sub-gráficas), número representa la
posición de la sub-gráfica, numerada de izquierda
a derecha y de arriba abajo.

Ejemplo:

>> subplot(2,2,1);
>> plot(x, y)
>> subplot(2,2,3)
>> plot(x, y1, ’r’)
Comandos útiles en el graficado de datos
Comando Descripción

xlim( [ xa xb ] ) Establece límites en los ejes coordenados x, y, z.


ylim( [ xa yb ] ) El parámetro que requiere el comando es un
zlim( [ za zb ] ) vector con dos elementos: el inicio y el final del
intervalo
xlabel( ‘Texto ’ ) Coloca legendas en los ejes coordenados x, y, z.
ylabel( ‘Texto ’ ) El texto debe introducirse como una cadena de
zlabel( ‘Texto ’ ) caracteres

semilogy( x, y ) Gráficas semi-logaritmicas en los ejes x y y así


semilogx( x, y ) como una grafica logarítmica en x y y
loglog( x, y )
bar( x, y ) Gráfico de barras

barh(x,y) Gráfico de barras horizontal

stairs(x,y) Gráfico de escaleras

stem(x,y) Gráfico de líneas verticales

hyst(y,x) Histograma, y es el vector con los datos a


estudiar y x es el número de intervalos.
polar( r, theta, ‘especificadores de línea’ ) Gráfica en coordenadas polares, r y theta son
las coordenadas.
Un ejemplo simple Ahora bien la distancia de recorrido del pistón puede
calcularse a partir del siguiente esquema:

Funcionamiento del mecanismo de un piston r c


h

Calcular y representar gráficamente la posición,
velocidad y aceleración del pistón para cada una d1 d2
de las revoluciones de la manivela.
Representar tres gráficos distintos en la misma x
ventana gráfica. Considerar que  =0° en el
instante t = 0; Donde x, es nuestra variable de interés.
Las distancias d1 y h están dadas por:
𝑑1 = 𝑟𝑐𝑜𝑠(𝜃) y ℎ = 𝑟𝑠𝑒𝑛(𝜃)

Por lo tanto d2 puede calcularse como:


 1 1
𝑑2 = 𝑐 2 − ℎ2 2 = 𝑐 2 − 𝑟 2 𝑠𝑒𝑛 𝜃 2 2

Por lo tanto la posición del pistón es:


1
Solución: 𝑥 = 𝑑1 + 𝑑2 = 𝑟𝑐𝑜𝑠 𝜃 + 𝑐 2 − 𝑟 2 𝑠𝑒𝑛 𝜃 2 2
La manivela v rotando con una velocidad angular
constante 𝜃. Esto significa que si tomamos 𝜃=0,
cuando t=0, entonces el ángulo 𝜃 para un Por lo que la velocidad del pistón es:
determinado instante t es simplemente:
𝑟 2 𝜃𝑠𝑒𝑛 2𝜃
𝜃 = 𝜃𝑡 𝑥 = −𝑟𝜃𝑠𝑒𝑛 𝜃 −
2 𝑐 2 − 𝑟 2 𝑠𝑒𝑛 𝜃 2

Y finalmente la aceleración es:

4𝑟 2 𝜃 2 cos(2𝜃) 𝑐 2 − 𝑟 2 𝑠𝑒𝑛 𝜃 2
+ 𝑟 2 𝜃𝑠𝑒𝑛 2𝜃 2
𝑥= −𝑟𝜃 2 𝑐𝑜𝑠 𝜃 − 3
4 𝑐 2 − 𝑟 2 𝑠𝑒𝑛 𝜃 2 2
Sentencias condicionales
Diagrama de …
flujo … programa Matlab

if expresión_condicional
Sentencia Cierto … Grupo de
if … instrucciones
… MATLB
Falso Instrucciones
end


end …

Operador relacional (se pregunta) Descripción


< ¿Es menor que?
> ¿Es mayor que?
<= ¿ Es menor o igual que?
>= ¿Es mayor o igual que?
== ¿Es igual ?
~= ¿ Es diferente?
Operador lógico: A & B, si A y B son
&
ciertos entonces la sentencia es cierta
Operador lógico: A | B, si A o B es
|
cierto, entonces la sentencia es cierta.
Operador lógico: Negación, ~A negación
~
lógica de A
Estructura if-else-end
Diagrama de …
flujo … programa Matlab

if expresión_condicional
Falso Sentencia Cierto … Grupo de

if instrucciones
… MATLB

Instrucciones Instrucciones else


… Grupo de
… instrucciones
end … MATLB
end



Primera incursión en Física Computacional

Problema: Encontrar el valor de x para el cual f(x) = 0. Los primero que podríamos pensar es graficar tales curvas

Para polinomios de bajo orden, encontrar el cero de una


función es un problema trivial: si por ejemplo la función
es f(x) = x – 3, la ecuación x – 3 =0 es escrita fácilmente
como x = 3, la cual es la solución.
Soluciones de este tipo pueden encontradas para
ecuaciones cuadráticas, cúbicas e incluso cuarticas. Sin
embargo en general no existen soluciones para
polinomios de 5º orden y mayores.

Muchas de las ecuaciones involucran otras funciones que


no son polinomios por lo que pueden no tener del todo
una solución analítica.
Así que estamos realmente interesados por un método
para la solución de raíces de una ecuación no lineal.

Figura 2. 1. Curvas de las funciones x y cos(x).


Para ayudar a enfocar nuestra atención en el problema,
vamos a considerar un ejemplo específico: intentemos
encontrar el valor de x para el cual:

x = cos(x)

Esta es una ecuación TRASCENDENTAL, las


cuales no son (generalmente) solucionables analíticamente.
¿Cómo resolver el problema?

Posibilidad 1 Posibilidad 2

Podríamos intentar buscar el mínimo de la función


Acercarnos mediante divisiones del intervalo total
“distancia entre curvas”
• Básicamente dividimos a la mitad el intervalo inicial
• Elegimos el subintervalo que contiene la raíz
• Nuevamente dividimos el intervalo a la mitad
• Repetimos el proceso tanto como deseemos
¡Muy bien tenemos una primera idea!
Vamos a determinar qué es lo que el programa debería
% Nommbre del PROGRAMA PRINCIPAL
% Declaración de variables hacer y después
% Inicializa los límites de la búsqueda
Llamar la función de EncuentraRaices ¡ nos preocuparemos acerca de cómo hacerlo !
Muestra el resultado y finaliza
%----------------------------------------------------
Piensa primero y después codifica
% Identificación de la FUNCIÓN EncuentraRaices
Declaración de variables
Preparación del lazo iterativo: inicialización de
variables, etc.
% Inicio del lazo iterativo

% Cuerpo del lazo:
Dividir el intervalo a la mitad El pseudocódigo muestra algo muy importante:
Determinar cuál mitad contiene la raíz
Redefinir los límites del intervalo
• El problema se simplifica si lo divides en partes concretas y
… más sencillas.
% SI (la diferencia es muy grande) ir a Inicio de
lazo iterativo • Puedes ir resolviendo estas partes de manera independiente
… e incluso pueden funcionar aun cuando otras aún no estén
% Lazo finalizado: desarrolladas
De ser necesario finalizar variables, fin
%---------------------------------------------------- • Y lo mejor de todo da CLARIDAD Y LEGIBILIDAD a tu
programa.
Las instrucciones anteriores son llamadas
pseudocódigo dado que contienen los pasos necesarios para el
programa de interés, pero no contienen explícitamente los
comandos del lenguaje de programación.

You might also like