Puja, baixa, …

  1. Dissenya la funció f que donat un valor numèric x, retorni \(f(x)\), on \(f\) és la següent funció definida a trossos:

    \[\begin{split}f(x) = \begin{cases} e^x sin^2(x) & x < 2\pi \\ ln(x) (1-cos(3x)) & x \ge 2\pi \\ \end{cases}\end{split}\]
    ../../../_images/f.png

    La funció sempre ha de retornar un float. Desa-la al fitxer pujaBaixa.py. La funció ha de passar el següent doctest:

    >>> from math import pi
    
    >>> round(f(2*pi-0.02), 4)
    0.2099
    >>> round(f(2*pi), 4)
    0.0
    >>> round(f(2*pi+0.02), 4)
    0.0033
    >>> round(f(pi/2-0.01), 4)
    4.7621
    >>> round(f(pi/2), 4)
    4.8105
    >>> round(f(pi/2+0.01), 4)
    4.8583
    

    Nota

    Podeu descarregar el fitxer amb tests pujaBaixa_1.txt

  2. Dissenya la funció g que donat un valor numèric x, retorni \(g(x)\), on \(g\) és la següent funció definida a trossos:

    \[\begin{split}g(x) = \begin{cases} -x² -8x - 10 & x < -4 \\ 2-x & -4 \le x \le 0 \\ \frac{1}{10}x³ -x + 2 & x > 0 \\ \end{cases}\end{split}\]
    ../../../_images/g.png

    La funció sempre ha de retornar un float. Desa-la al fitxer pujaBaixa.py. La funció ha de passar el següent doctest:

    >>> round(g(-4-0.05), 4)
    5.9975
    >>> round(g(-4), 4)
    6.0
    >>> round(g(-4+0.05), 4)
    5.95
    >>> round(g(-0.05), 4)
    2.05
    >>> round(g(0), 4)
    2.0
    >>> round(g(0.05), 4)
    1.95
    

    Nota

    Podeu descarregar el fitxer amb tests pujaBaixa_2.txt

  3. Dissenya la funció analitza_funcio que donat un valor numéric x, un petit increment delta, i una funció unaria func, retorni un d’aquests enters:

    • 1, si la funció func «fa pujada» quan es consideren els 3 punts x - delta, x, i x + delta; és a dir, quan func ( x - delta ) < func ( x ) \(\;\) i \(\;\) func ( x ) \(<\) func ( x + delta )

    • -1, si la funció func «fa baixada» quan es consideren els punts x - delta, x, i x + delta

    • 0, en qualsevol altre cas

    Desa la funció al fitxer pujaBaixa.py. La funció ha de passar el següent doctest:

    >>> from math import pi, sqrt
    
    >>> analitza_funcio(2*pi, 0.02, f)      # la funció f(x) "no puja ni baixa" a x=2*pi
    0
    >>> analitza_funcio(pi/2, 0.01, f)      # la funció f(x) "puja" a x=pi/2
    1
    >>> analitza_funcio(-4, 0.05, g)        # la funció g(x) "no puja ni baixa" a x=-4
    0
    >>> analitza_funcio(0, 0.05, g)         # la funció g(x) "baixa" a x=0
    -1
    >>> analitza_funcio(-2.5, 0.01, abs)    # la funció abs(x) "baixa" a x=-2.5
    -1
    >>> analitza_funcio(7.3, 0.02, sqrt)    # la funció sqrt(x) "puja" a x=7.3
    1
    

    Nota

    Podeu descarregar el fitxer amb tests pujaBaixa_3.txt

Solució

Disposeu de solucions al fitxers pujaBaixa.py