Advertisement
Guest User

Untitled

a guest
Aug 15th, 2013
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.89 KB | None | 0 0
  1. from Tkinter import *
  2. import matplotlib.pyplot as plt
  3.  
  4. class Application(Frame):
  5.     def run_brussel(self):
  6.         t_start = float(self.t_start_entry.get())
  7.         t_end = float(self.t_end_entry.get())
  8.         t_diff = float(self.t_diff_entry.get())
  9.         k1 = float(self.k1_entry.get())
  10.         k2 = float(self.k2_entry.get())
  11.         k3 = float(self.k3_entry.get())
  12.         k4 = float(self.k4_entry.get())
  13.         A = float(self.A_entry.get())
  14.         B = float(self.B_entry.get())
  15.         X = float(self.X_entry.get())
  16.         Y = float(self.Y_entry.get())
  17.         mode = self.mode.get()
  18.  
  19.         brussel = brussel_func(t_start, t_end, t_diff, k1, k2, k3, k4, A, B, X, Y)
  20.         plot_brussel(mode, brussel[0], brussel[1], brussel[2])
  21.  
  22.     def createWidgets(self):
  23.         self.t_start_label = Label(text="start time")
  24.         self.t_start_label.grid(row=0, column=0, sticky=W)
  25.         self.t_start_entry = Entry(self)
  26.         self.t_start_entry.delete(0, END)
  27.         self.t_start_entry.insert(0, "0.0")
  28.         self.t_start_entry.grid(row=0, column=1)
  29.  
  30.         self.t_end_label = Label(text="end time")
  31.         self.t_end_label.grid(row=1, column=0, sticky=W)
  32.         self.t_end_entry = Entry(self)
  33.         self.t_end_entry.delete(0, END)
  34.         self.t_end_entry.insert(0, "100.0")
  35.         self.t_end_entry.grid(row=1, column=1)
  36.  
  37.         self.t_diff_label = Label(text="time precision")
  38.         self.t_diff_label.grid(row=2, column=0, sticky=W)
  39.         self.t_diff_entry = Entry(self)
  40.         self.t_diff_entry.delete(0, END)
  41.         self.t_diff_entry.insert(0, "0.0001")
  42.         self.t_diff_entry.grid(row=2, column=1)
  43.  
  44.         self.k1_label = Label(text="k1 value")
  45.         self.k1_label.grid(row=3, column=0, sticky=W)
  46.         self.k1_entry = Entry(self)
  47.         self.k1_entry.delete(0, END)
  48.         self.k1_entry.insert(0, "1.0")
  49.         self.k1_entry.grid(row=3, column=1)
  50.  
  51.         self.k2_label = Label(text="k2 value")
  52.         self.k2_label.grid(row=4, column=0, sticky=W)
  53.         self.k2_entry = Entry(self)
  54.         self.k2_entry.delete(0, END)
  55.         self.k2_entry.insert(0, "1.0")
  56.         self.k2_entry.grid(row=4, column=1)
  57.  
  58.         self.k3_label = Label(text="k3 value")
  59.         self.k3_label.grid(row=5, column=0, sticky=W)
  60.         self.k3_entry = Entry(self)
  61.         self.k3_entry.delete(0, END)
  62.         self.k3_entry.insert(0, "1.0")
  63.         self.k3_entry.grid(row=5, column=1)
  64.  
  65.         self.k4_label = Label(text="k4 value")
  66.         self.k4_label.grid(row=6, column=0, sticky=W)
  67.         self.k4_entry = Entry(self)
  68.         self.k4_entry.delete(0, END)
  69.         self.k4_entry.insert(0, "1.0")
  70.         self.k4_entry.grid(row=6, column=1)
  71.  
  72.         self.A_label = Label(text="initial A concentr.")
  73.         self.A_label.grid(row=7, column=0, sticky=W)
  74.         self.A_entry = Entry(self)
  75.         self.A_entry.delete(0, END)
  76.         self.A_entry.insert(0, "1.0")
  77.         self.A_entry.grid(row=7, column=1)
  78.  
  79.         self.B_label = Label(text="initial B concentr.")
  80.         self.B_label.grid(row=8, column=0, sticky=W)
  81.         self.B_entry = Entry(self)
  82.         self.B_entry.delete(0, END)
  83.         self.B_entry.insert(0, "2.5")
  84.         self.B_entry.grid(row=8, column=1)
  85.  
  86.         self.X_label = Label(text="initial X concentr.")
  87.         self.X_label.grid(row=9, column=0, sticky=W)
  88.         self.X_entry = Entry(self)
  89.         self.X_entry.delete(0, END)
  90.         self.X_entry.insert(0, "0.0")
  91.         self.X_entry.grid(row=9, column=1)
  92.  
  93.         self.Y_label = Label(text="initial Y concentr.")
  94.         self.Y_label.grid(row=10, column=0, sticky=W)
  95.         self.Y_entry = Entry(self)
  96.         self.Y_entry.delete(0, END)
  97.         self.Y_entry.insert(0, "0.0")
  98.         self.Y_entry.grid(row=10, column=1)
  99.  
  100.         self.mode = IntVar()
  101.         self.modus_operandi_label = Label(text="plot type")
  102.         self.modus_operandi_label.grid(row=0, column=2, sticky=W)
  103.         self.modus_operandi_button = Radiobutton(self, text="X : Y", variable=self.mode, value=True).grid(row=1, column=2, sticky=W)
  104.         self.modus_operandi_button = Radiobutton(self, text="X, Y : time", variable=self.mode, value=False).grid(row=2, column=2, sticky=W)
  105.  
  106.         self.plot = Button(self)
  107.         self.plot["text"] = "PLOT",
  108.         self.plot["command"] = self.run_brussel
  109.         self.plot.grid(row=1, column=3)
  110.  
  111.         self.QUIT = Button(self)
  112.         self.QUIT["text"] = "QUIT"
  113.         self.QUIT["fg"]   = "red"
  114.         self.QUIT["command"] =  self.quit
  115.         self.QUIT.grid(row=0, column=3)
  116.  
  117.     def __init__(self, master=None):
  118.         Frame.__init__(self, master)
  119.         self.grid()
  120.         self.createWidgets()
  121.  
  122. def brussel_func(t_start, t_end, t_diff, k1, k2, k3, k4, A, B, X, Y):
  123.     t = t_start
  124.     t_list = []
  125.     t_list.append(0)
  126.     X_list = [X]
  127.     Y_list = [Y]
  128.     step = 0
  129.  
  130.     while t < t_end:
  131.         X_diff = t_diff * (k1 * A - k2 * B * X_list[step] + k3 * X_list[step]**2 *             Y_list[step] - k4 * X_list[step])
  132.         Y_diff = t_diff * (k2 * B * X_list[step] - k3 * X_list[step]**2 * Y_list[step])
  133.         X_list.append(X)
  134.         Y_list.append(Y)
  135.         t_list.append(t)
  136.         t += t_diff
  137.         X += X_diff
  138.         Y += Y_diff
  139.         step += 1
  140.  
  141.     return [t_list, X_list, Y_list]
  142.        
  143. def plot_brussel(mode, t_list, X_list, Y_list):
  144.     p = []
  145.  
  146.     #plots X : Y   
  147.     if mode == True:
  148.             p = plt.plot(X_list, Y_list)
  149.             plt.xlabel('x')
  150.             plt.ylabel('y')
  151.  
  152.     #plots X, Y : time
  153.     else:
  154.             p = plt.plot(t_list, X_list, label="X")
  155.             p += plt.plot(t_list, Y_list, label="Y")
  156.             plt.legend(loc="upper left", bbox_to_anchor=(1,1))
  157.             plt.xlabel('time')
  158.  
  159.     #displays chosen plot
  160.     plt.show(p)
  161.  
  162. def main():
  163.     root = Tk()
  164.     root.wm_title("Brusselator")
  165.     app = Application(master=root)
  166.     app.mainloop()
  167.     root.destroy()
  168.  
  169. if __name__ == '__main__':
  170.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement