En aquest tema, aprendrem a utilitzar Fortran per simular sistemes físics. La simulació de sistemes físics és una aplicació clau de la programació científica, i Fortran és un llenguatge especialment adequat per a aquest tipus de tasques gràcies a la seva eficiència i capacitat de maneig de càlculs numèrics complexos.
Objectius del Tema
- Comprendre els conceptes bàsics de la simulació de sistemes físics.
- Aprendre a implementar models físics en Fortran.
- Desenvolupar habilitats per resoldre equacions diferencials numèricament.
- Aplicar tècniques de simulació a problemes reals.
Contingut
- Introducció a la Simulació de Sistemes Físics
La simulació de sistemes físics implica la creació de models matemàtics que representen el comportament d'un sistema real. Aquests models es poden utilitzar per predir el comportament del sistema sota diferents condicions.
Conceptes Clau
- Model Matemàtic: Representació matemàtica d'un sistema físic.
- Equacions Diferencials: Equacions que descriuen el canvi d'una variable en funció d'una altra.
- Mètodes Numèrics: Tècniques per resoldre equacions matemàtiques de manera aproximada.
- Modelització d'un Sistema Físic
Comencem amb un exemple senzill: la simulació del moviment d'un projectil. El moviment d'un projectil es pot descriure mitjançant les equacions de moviment de Newton.
Equacions del Moviment
Les equacions diferencials que descriuen el moviment d'un projectil són: \[ \frac{d^2x}{dt^2} = 0 \] \[ \frac{d^2y}{dt^2} = -g \]
On:
- \( x \) és la posició horitzontal.
- \( y \) és la posició vertical.
- \( g \) és l'acceleració deguda a la gravetat.
- Implementació en Fortran
Implementem aquestes equacions en Fortran utilitzant el mètode d'Euler per resoldre les equacions diferencials.
Codi Exemple
program projectile_motion implicit none real :: x, y, vx, vy, t, dt, g integer :: i, n ! Inicialització de variables x = 0.0 y = 0.0 vx = 10.0 ! velocitat inicial en x (m/s) vy = 10.0 ! velocitat inicial en y (m/s) g = 9.81 ! acceleració deguda a la gravetat (m/s^2) t = 0.0 dt = 0.01 ! pas de temps (s) n = 1000 ! nombre d'iteracions ! Bucle de simulació do i = 1, n ! Actualització de la posició x = x + vx * dt y = y + vy * dt ! Actualització de la velocitat vy = vy - g * dt ! Actualització del temps t = t + dt ! Sortida de resultats print *, "t =", t, "x =", x, "y =", y ! Condició de parada si el projectil toca el terra if (y < 0.0) exit end do end program projectile_motion
Explicació del Codi
- Inicialització de Variables: Es defineixen les variables per a la posició, velocitat, temps, pas de temps i acceleració deguda a la gravetat.
- Bucle de Simulació: Es realitza un bucle per actualitzar la posició i velocitat del projectil en cada pas de temps.
- Condició de Parada: El bucle es trenca si el projectil toca el terra (quan \( y < 0 \)).
- Exercici Pràctic
Modifica el codi anterior per incloure la resistència de l'aire en la simulació del moviment del projectil. La resistència de l'aire es pot modelar com una força proporcional a la velocitat del projectil.
Pistes
- La força de resistència de l'aire es pot expressar com \( F_{res} = -k \cdot v \), on \( k \) és una constant de proporcionalitat i \( v \) és la velocitat del projectil.
- Les equacions del moviment es modifiquen per incloure aquesta força.
- Solució de l'Exercici
program projectile_motion_with_air_resistance implicit none real :: x, y, vx, vy, t, dt, g, k, v integer :: i, n ! Inicialització de variables x = 0.0 y = 0.0 vx = 10.0 ! velocitat inicial en x (m/s) vy = 10.0 ! velocitat inicial en y (m/s) g = 9.81 ! acceleració deguda a la gravetat (m/s^2) k = 0.1 ! constant de resistència de l'aire t = 0.0 dt = 0.01 ! pas de temps (s) n = 1000 ! nombre d'iteracions ! Bucle de simulació do i = 1, n ! Calcula la velocitat total v = sqrt(vx**2 + vy**2) ! Actualització de la posició x = x + vx * dt y = y + vy * dt ! Actualització de la velocitat amb resistència de l'aire vx = vx - k * v * vx * dt vy = vy - g * dt - k * v * vy * dt ! Actualització del temps t = t + dt ! Sortida de resultats print *, "t =", t, "x =", x, "y =", y ! Condició de parada si el projectil toca el terra if (y < 0.0) exit end do end program projectile_motion_with_air_resistance
- Resum
En aquest tema, hem après a simular el moviment d'un projectil utilitzant Fortran. Hem vist com implementar models físics simples i com resoldre equacions diferencials numèricament. També hem practicat la inclusió de factors addicionals com la resistència de l'aire en les nostres simulacions.
- Preparació per al Següent Tema
En el següent tema, aplicarem tècniques similars per simular altres sistemes físics més complexos, com ara sistemes oscil·latoris i dinàmiques de fluids.
Curs de Programació en Fortran
Mòdul 1: Introducció a Fortran
- Introducció a Fortran
- Configuració de l'Entorn de Desenvolupament
- Sintaxi i Estructura Bàsiques
- Escrivint el teu Primer Programa en Fortran
Mòdul 2: Conceptes Bàsics
- Variables i Tipus de Dades
- Operadors i Expressions
- Entrada i Sortida
- Estructures de Control: Sentències If
- Estructures de Control: Bucles
Mòdul 3: Arrays i Cadenes
Mòdul 4: Procediments i Funcions
Mòdul 5: Estructures de Dades Avançades
Mòdul 6: Gestió de Fitxers
Mòdul 7: Temes Avançats
Mòdul 8: Millors Pràctiques i Optimització
- Tècniques d'Optimització de Codi
- Depuració i Perfilat
- Escrivint Codi Mantenible
- Estàndards i Portabilitat de Fortran