<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Modélisation du modèle
Sommaire
1 - Introduction
2 - Polymère
3 - Calcul de la concentration
4 - Table des valeurs 
5 - Calcul de c2
6 - Graphiques
Introduction
Ce programme nous permet de modéliser la concentration (c2) pour différents food simulant. Cela nous permet également de tracer différents graphiques.
Step1:  Polymère
Step2:  Calcul de la concentration finale
Nous avons besoin de différentes valeurs de concentration qui sont les suivantes 
Step3:  Table des valeurs
Ici, nous pouvons voir les valeurs obtenus pour chaque expériences. Nous avons donc la valeur de l'épaisseur du film utilisé, le food simulant utilisé, la concentration initiale d'antioxydant dans le plastique, la valeur de K qui est le coefficient de partition du migrant entre le polymer et le food simulant.Dp est le coefficient de diffusion de l'antioxydant dans le polymère, RMSE permet de prédire l'erreur faite sur la valeur, et enfin k est le coefficient de transfert massique. 
Grâce à ces valeurs nous pouvons déterminer la concentration finale dans le plastique.
Step4:  Calcul de c2
Ce calcul nous permet donc d'obtenir les valeurs de la concentration finale dans le plastique et donc de déterminer l'efficacité du procédé.
Step5:  Graphique 
Step6:  Graphique 
Step7:  Graphique 
Step8:  Grapgique 
Step9:  Nous remarquons que réunir tous les graphiques n'est pas spécialement adéquat car les résultats sont totalement illisibles.
<ASSISTANT_TASK:>
Python Code:
import numpy as np
import pandas as pd
import math
import cmath
from scipy.optimize import root
import matplotlib.pyplot as plt
%matplotlib inline
Explanation: Modélisation du modèle
Sommaire
1 - Introduction
2 - Polymère
3 - Calcul de la concentration
4 - Table des valeurs 
5 - Calcul de c2
6 - Graphiques
Introduction
Ce programme nous permet de modéliser la concentration (c2) pour différents food simulant. Cela nous permet également de tracer différents graphiques.
End of explanation
a = ("Table1.txt")
a
Explanation: Polymère
End of explanation
class InterfazPolimero:
    def __init__ (self,a):
        self.a=a
    def Lire(self):
        self.tab = pd.read_csv(self.a,sep=" ")
        coef =self.tab.values
        self.Experiment = coef[:,0]
        self.Thickness = coef[:,1]
        self.FoodSimulant = coef[:,2]
        self.Cpo = coef[:,3]
        self.K = coef [:,4]
        self.Dp = coef[:,5]
        self.RMSE = coef[:,6]
        self.k = coef[:,7]
        self.c4 = coef[:,8]
#         self.c1 =coef[:,9]
        self.c2 = np.zeros(10)
        
        return self.tab
    
    def inicializarC2(self):
        self.c2 = np.zeros(10)
        self.dimension = np.shape(self.c2)
        print(self.dimension)
        return self.c2
    
    
    def calcul(self):
        self.tab["j1"] = (self.tab["Dp"] / (self.tab["Thickness"] / 2)) * (self.tab["Cpo"] - self.c2)
        print(self.tab["j1"])
        self.c3 = self.c2 / self.K
        self.j2 = self.k * (self.c3 - self.tab["c4"])
        return (self.tab["j1"] - self.j2) / self.tab["j1"]
            
    def calcul2(self): 
        i = 0
        for self.tab["Thickness"], self.tab["Dp"], self.tab["K"], self.tab["k"], self.tab["c"] in enumerate(tab):
            self.sol = root(calcul,15,args=(float(self.tab["Dp"]),float(self.tab["k"]),float(self.tab["K"]),float(self.tab["c4"]),float(self.tab["Cpo"]),float(self.tab["Thickness"])))
            c2[i]= self.sol.x
            i = i + 1
        print(self.c2)
        return self.c2
    
    def Garder(self):
        raw_data ={"résultat" : [1.115510936772821, 1.0542169426645587, 1.041340418781726, 1.0219,1.4353658536585368, 1.0542169426645587, 1.058921125781793,1.0217682926829268, 1.05340368852459, 1.058921125781793]}
        df = pd.DataFrame(raw_data,index=["1","2","3","4","5","6","7","8","9","10"])
        df.to_csv("c2rep")
        return df
    
    def Graphique(self):
        plt.plot(self.tab["Dp"],self.Cpo,"^")
        plt.title("f(Dp)=Cpo")
        plt.xlabel("Dp")
        plt.ylabel("Cpo")        
    def Graphique2(self):
        plt.plot(self.tab["Dp"],[1.115510936772821, 1.0542169426645587, 1.041340418781726, 1.0219,1.4353658536585368, 1.0542169426645587, 1.058921125781793,1.0217682926829268, 1.05340368852459, 1.058921125781793],"^")
        plt.title("f(Dp)=c2")
        plt.xlabel("Dp")
        plt.ylabel("c2")        
    def Graphique3(self):
        plt.plot(self.tab["Cpo"],[1.115510936772821, 1.0542169426645587, 1.041340418781726, 1.0219,1.4353658536585368, 1.0542169426645587, 1.058921125781793,1.0217682926829268, 1.05340368852459, 1.058921125781793],"^")
        plt.title("f(Cpo)=c2")
        plt.xlabel("Cpo")
        plt.ylabel("c2")
    def Graphique4(self):
        plt.plot(self.tab["Thickness"],[1.115510936772821, 1.0542169426645587, 1.041340418781726, 1.0219,1.4353658536585368, 1.0542169426645587, 1.058921125781793,1.0217682926829268, 1.05340368852459, 1.058921125781793],"^")
        plt.title("f(Epaisseur)=c2")
        plt.xlabel("Epaisseur")
        plt.ylabel("c2")
        
    def Graphique5(self):
        fig,axes=plt.subplots(2,2)
        
        axes[0,0].plot(self.tab["Dp"],self.Cpo,"^")
        axes[1,1].plot(self.tab["Dp"],[1.115510936772821, 1.0542169426645587, 1.041340418781726, 1.0219,1.4353658536585368, 1.0542169426645587, 1.058921125781793,1.0217682926829268, 1.05340368852459, 1.058921125781793],"^")
        axes[0,1].plot(self.tab["Cpo"],[1.115510936772821, 1.0542169426645587, 1.041340418781726, 1.0219,1.4353658536585368, 1.0542169426645587, 1.058921125781793,1.0217682926829268, 1.05340368852459, 1.058921125781793],"^")
        axes[1,0].plot(self.tab["Thickness"],[1.115510936772821, 1.0542169426645587, 1.041340418781726, 1.0219,1.4353658536585368, 1.0542169426645587, 1.058921125781793,1.0217682926829268, 1.05340368852459, 1.058921125781793],"^")
p = InterfazPolimero("Table1.txt")
p
Explanation: Calcul de la concentration finale
Nous avons besoin de différentes valeurs de concentration qui sont les suivantes : 
Afin de calculer la concentration finale, nous avons besoin d'équations qui sont les suivantes : 
Afin de calculer cela, il faut suivre la méthode précédente. C'est à dire, il faut connaître les propriétés principales, la structure utilisée, les conditions initales et le coefficient de partition K. 
Ensuite, il faut faire une hypothèse sur la concentration de migrant au sein du polymère et du simulant alimentaire. Ensuite, il faut calculer le transfert massique de migrant a l'intérieur du polymère (Jp) et également à l'intérieur du simulant alimentaire (Jfs). Ceux sont des phénomènes de transfert de matière. Le phénomène de transfert massique est un phénomène irréversible durant lequel une grandeur physique est transportée par le biais de molécules, cela nous amène à la loi de Fick cependant, dans notre cas, la loi de Fick est simplifiée, en effet, la loi de Fick ne comportera ici qu'une seule dimension. Et ce transfert peut être défini de cette manière J = (Dp/(L/2))x(C1-C2).
Grâce au coefficient de partition (K), nous pouvons déterminer C2, cependant, il faut connaître C3, afin de connaître C3, nous devons déterminer le déterminer le transfert dans la couche limite du simulant alimentaire qui est donné par la relation suivante : J2 = k*(C3-C4). Il y a des conditions initiales, premièrement, Cpx = Cp0 et deuxièmement, au temps t = 0, C1=C2=Cp0, donc au début de la migration on a Cfs = 0. La dernière condition est que $ \frac{\partial c_{Cpx}}{\partial x}$ est égale à 0. La méthode "Regula Falsi" est utilisée afin de réduire le nombre de concentrations interfaciales. Le nombre d'itérations s'arrête losque J1=J2.
End of explanation
p.Lire()
Explanation: Table des valeurs
Ici, nous pouvons voir les valeurs obtenus pour chaque expériences. Nous avons donc la valeur de l'épaisseur du film utilisé, le food simulant utilisé, la concentration initiale d'antioxydant dans le plastique, la valeur de K qui est le coefficient de partition du migrant entre le polymer et le food simulant.Dp est le coefficient de diffusion de l'antioxydant dans le polymère, RMSE permet de prédire l'erreur faite sur la valeur, et enfin k est le coefficient de transfert massique. 
Grâce à ces valeurs nous pouvons déterminer la concentration finale dans le plastique.
End of explanation
p.calcul()
Explanation: Calcul de c2
Ce calcul nous permet donc d'obtenir les valeurs de la concentration finale dans le plastique et donc de déterminer l'efficacité du procédé.
End of explanation
p.Graphique()
Explanation: Graphique : f(Dp) = Cpo
Ici nous remarquons que le coefficient de diffusion n'est pas spécialement lié à la concentration initiale. De plus, les résultats sont très étranges.
End of explanation
p.Graphique2()
Explanation: Graphique : f(Dp) = c2
Ici nous remarquons que le coefficient de diffusion n'influe pas directement sur la concentration finale. Les résultats sont également très étranges.
End of explanation
p.Graphique3()
Explanation: Graphique : f(Cpo) = c2
Ici nous remarquons un point étrange situé aux alentours de 2000/1.45 car il n'est pas proche des autres. Donc nous pouvons supposer qu'il y a des erreurs de calculs. Cependant, nous pouvons voir que la concentration finale fluctue en fonction de la concentration initiale.
End of explanation
p.Graphique4()
Explanation: Grapgique : f(Epaisseur) = c2
Ici nous remarquons que le graphique est très étrange car les valeurs sont parfois décroissantes et parfois stagnes.
End of explanation
p.Graphique5()
Explanation: Nous remarquons que réunir tous les graphiques n'est pas spécialement adéquat car les résultats sont totalement illisibles.
End of explanation
<END_TASK>