Moviment rectilini uniformement accelerat (MRUA)

  1. Dissenya una funció que donada una posició inicial x0 en metres, una velocitat inicial v0 (en m/s), una acceleració constant a (en m/s²), i el temps transcorregut t (en segons), calculi i retorni la posició final.

    def mrua(x0, v0, a, t):
        """
        >>> round(mrua(0, 0, 6, 5), 2)
        75.0
        >>> round(mrua(10, 0, 2, 20.3), 2)
        422.09
        """
        x = x0 + v0*t + (1/2)*a*t**2
        return x
    


  1. Fent servir la funció anterior, dissenya un altre funció caiguda_lliure(h, t), que donada una altura h (en metres) i un termps t (expressat en minuts) calculi i retorni la altura final. Si aquesta és inferior a 0, ha de retornar -1.0.

    Amb les dues funcions en el mateix mòdul: fisica_lliure.py

    def mrua(x0, v0, a, t):
        """
        >>> round(mrua(0, 0, 6, 5), 2)
        75.0
        >>> round(mrua(10, 0, 2, 20.3), 2)        
        422.09
        """
        x = x0 + v0*t + (1/2)*a*t**2
        return x
    
    def caiguda_lliure(h, t):
        """
        La altura h esta en metres, i el temps t en minuts!
        >>> round(caiguda_lliure(1000, 0.1), 1)    # 6 segons
        823.5
        >>> round(caiguda_lliure(1000, 0.2), 1)    # 12 segons
        293.9
        >>> round(caiguda_lliure(1000, 0.3), 1)    # 18 segons
        -1.0
        """
        h = mrua(h, 0, -9.80665, t*60)
        return max(h, -1.0)    # max ens permet estalviar el condicional
    

Amb la nova funció en un altre mòdul:

  • en el mòdul fisica.py

    def mrua(x0, v0, a, t):
        """
        >>> round(mrua(0, 0, 6, 5), 2)
        75.0
        >>> round(mrua(10, 0, 2, 20.3), 2)
        422.09
        """
        x = x0 + v0*t + (1/2)*a*t**2
        return x
    
  • en el mòdul lliure.py

    import fisica            # la funció mrua es troba al mòdul fisica.py
    import scipy.constants   # aquest altre mòdul defineix el valor de g amb més precissió
    
    def caiguda_lliure(h, t):
        """
        La altura h esta en metres, i el temps t en minuts!
        >>> round(caiguda_lliure(1000, 0.1), 1)
        823.5
        >>> round(caiguda_lliure(1000, 0.2), 1)
        293.9
        >>> round(caiguda_lliure(1000, 0.3), 1)
        -1.0
        """
        a = scipy.constants.g    # acceleració de la gravetat
        h = fisica.mrua(h, 0, -a, t*60)
        return max(h, -1.0)