# -*- coding: utf-8 -*-
"""
Chapitre 2 - Dosage par etalonnage conductimetrique (loi de Kohlrausch)
-----------------------------------------------------------------------
Pour une gamme etalon (concentration c connue -> conductivite sigma mesuree),
on modelise sigma = f(c) par une droite avec la fonction linregress de
scipy.stats, conformément à la fiche M2.
On en deduit la concentration d'une solution inconnue a partir de sa conductivite.

A ouvrir et executer dans EduPython (menu "Executer" ou touche F5).
Seule une ligne est a completer (le calcul de c_inc).
"""

import matplotlib.pyplot as plt
from scipy.stats import linregress

# --- Gamme etalon : concentrations connues et conductivites mesurees ---
c = [5.0, 10.0, 15.0]          # concentrations (mol/m^3)
sigma = [0.075, 0.150, 0.225]  # conductivites (S/m)

# --- Régression linéaire : sigma = k * c + b (fiche M2) ---
reg = linregress(c, sigma)
k = reg.slope
b = reg.intercept
r = reg.rvalue

print("coefficient directeur k =", k, "S.m2/mol")
print("ordonnee a l'origine b =", b, "(proche de 0 : proportionnalite)")
print("r^2 =", r**2)

# --- Solution inconnue ---
sigma_inc = 0.18      # conductivite mesuree (S/m)
c_inc = 0.0           # A COMPLETER : deduire c_inc de sigma_inc et de k

print("concentration inconnue : c =", c_inc, "mol/m^3")
print("soit", c_inc / 1000.0, "mol/L")

# --- Trace de la droite d'etalonnage ---
plt.plot(c, sigma, "s", label="gamme etalon")
x = []
y = []
for i in range(17):              # c de 0 a 16 mol/m^3
    x.append(i)
    y.append(k * i + b)
plt.plot(x, y, "-", label="regression lineaire")
plt.plot(c_inc, sigma_inc, "o", label="solution inconnue")
plt.xlabel("c (mol/m^3)")
plt.ylabel("sigma (S/m)")
plt.title("Etalonnage conductimetrique")
plt.legend()
plt.grid(True)
plt.show()
