Fonctions affines : Le tarif le plus avantageux

Une personne a acheté un téléphone portable. Trois opérateurs lui proposent les formules suivantes :

Abonnement mensuel fixe pour 2 heures de communication Supplément par minute (commencée) au delà des 2 heures
Formule 1 30 € 0,25 €
Formule 2 15 € 0,75 €
Formule 3 20 € 0,5 €

L'objectif est de choisir la formule la plus avantageuse suivant le temps de dépassement du forfait

Pour cela, on note \( x \) le nombre de minutes au delà des 2 heures du forfait et \( f_1, f_2 \text{ et } f_3 \) les fonctions qui à \( x \) associent la dépense relative à chacune des formules 1, 2 et 3.

Question 1 :

Ecrire en python les fonctions \( f_1, f_2 \text{ et } f_3 \).

Une proposition de réponse :

# -*- coding: utf-8 -*-
def f1(x):
"""renvoie Formule 1"""
    return 0.25*x+30
def f2(x):
"""renvoie Formule 2"""
    return 0.75*x+15
def f3(x):
"""renvoie Formule 3"""
    return 0.5*x+20

Question 2 :

  1. Exprimer \( f_1(x), f_2(x) \text{ et } f_3(x) \) en fonction de \(x.\)
  2. Resolvez les équations \( f_1(x) = f_2(x) ; f_1(x) = f_3(x) \text{ et } f_2(x) = f_3(x). \)

Une proposition de réponse :

# -*- coding: utf-8 -*-
from sympy import *
def f1(x):
"""renvoie Formule 1"""
    return 0.25*x+30
def f2(x):
"""renvoie Formule 2"""
    return 0.75*x+15
def f3(x):
"""renvoie Formule 3"""
    return 0.5*x+20
>>> x=Symbol('x')
>>> solveset(f1(x)-f2(x))
{30.0}
>>>

Donc l'ensemble des solutions de l'équation \( f_1(x) = f_2(x) \text{ est } \{30\} \)

>>> solveset(f1(x)-f3(x))
{40.0}
>>>

Donc l'ensemble des solutions de l'équation \( f_1(x) = f_3(x) \text{ est } \{40\} \)

>>> solveset(f2(x)-f3(x))
{20.0}
>>>

Donc l'ensemble des solutions de l'équation \( f_2(x) = f_3(x) \text{ est } \{20\} \)

Question 3

Avant de faire cette question regardez ce cours.

Représenter à l'aide de la bibliothèque matplotlib les trois fonctions pour \( x \in [0 ; 50] \)

Une proposition de réponse :

# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
def f1(x):
    return 0.25*x+30
def f2(x):
    return 0.75*x+15
def f3(x):
    return 0.5*x+20
lx=np.linspace(0,50,2)
ly1=f1(lx)
ly2=f2(lx)
ly3=f3(lx)
plt.grid(True)
plt.plot(lx,ly1,label='Formule1')
plt.plot(lx,ly2,label='Formule2')
plt.plot(lx,ly3,label='Formule3')
plt.title('Problème de facturation')
plt.xlabel('minutes dépassées')
plt.ylabel('Le prix')
plt.legend()
plt.show()

On obtient la figure suivante :

Courbe des trois fonctions

Question 4 :

Soit la fonction \( g \) qui à \( x \) associe le tarif le plus avantageux :

Traduire cette fonction en langage Python.

Une proposition de réponse :

# -*- coding: utf-8 -*-
def g(x):
    if x<20:
        return 0.75*x+15
    elif x < 40:
        return 0.5*x+20
    else:
        return 0.25*x+30

Question 5 :

Avant de faire cette question regardez ce cours.

Tracer en rouge, sur le graphique précédent, la courbe représentative de la fonction $ g $ qui à $ x $ associe le tarif le plus avantageux

Une proposition de réponse :

import numpy as np
import matplotlib.pyplot as plt
def f1(x):
    return 0.25*x+30
def f2(x):
    return 0.75*x+15
def f3(x):
    return 0.5*x+20
def g(x):
    if x<20:
        return 0.75*x+15
    elif x < 40:
        return 0.5*x+20
    else:
        return 0.25*x+30
lx=np.linspace(0,50,50)
ly=[g(x) for x in lx]
ly1=f1(lx)
ly2=f2(lx)
ly3=f3(lx)
plt.grid(True)
plt.plot(lx,ly1,label='Formule1',color='b')
plt.plot(lx,ly2,label='Formule2',color='g')
plt.plot(lx,ly3,label='Formule3',color='m')
plt.grid(True)
plt.plot(lx,ly,color='r')
plt.title('Le tarif le plus avantageux en fonction des minutes')
plt.xlabel('minutes dépassées')
plt.ylabel('Le prix')
plt.show()

On obtient la figure suivante :

Courbe des quatre fonctions
import numpy as np
import matplotlib.pyplot as plt
def g(x):
    if x<20:
        return 0.75*x+15
    elif x < 40:
        return 0.5*x+20
    else:
        return 0.25*x+30
lx=np.linspace(0,50,50)
ly=[g(x) for x in lx]
plt.grid(True)
plt.plot(lx,ly,color='r')
plt.title('Le tarif le plus avantageux en fonction des minutes')
plt.xlabel('minutes dépassées')
plt.ylabel('Le prix')
plt.show()

On obtient la figure suivante :

Courbe des trois fonctions

Question 6 :

  1. Ecrire une fonction en Python, de paramètre $ x $, qui renvoie la formule la plus avantageuse pour $ x $ minutes dépassées
  2. Pour un mois, la personne pense dépasser de 25 minutes en moyenne les deux heures de forfait. Quelle formule doit-elle choisir ?

Une proposition de réponse :

  1. # -*- coding: utf-8 -*-
    def FormuleAvantageuse(x):
        if x<20:
            return "La formule2 est la plus avantageuse"
        elif x < 40:
            return "La formule3 est la plus avantageuse"
        else:
            return "La formule1 est la plus avantageuse"
  2. >>>FormuleAvantageuse(25)
    'La formule3 est la plus avantageuse'
    >>>
    La personne doit choisir la formule3 qui est la plus avantageuse si elle dépasse son forfait de 25 minutes