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

  1. 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.

  1. 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.

  1. 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

  1. Inicialització de Variables: Es defineixen les variables per a la posició, velocitat, temps, pas de temps i acceleració deguda a la gravetat.
  2. Bucle de Simulació: Es realitza un bucle per actualitzar la posició i velocitat del projectil en cada pas de temps.
  3. Condició de Parada: El bucle es trenca si el projectil toca el terra (quan \( y < 0 \)).

  1. 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.

  1. 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

  1. 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.

  1. 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.

© Copyright 2024. Tots els drets reservats