By the way ja es ist chaotisch aber das kommt noch.
hier der Fehler:
und hier mein code:Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python27\lib\lib-tk\Tkinter.py", line 1410, in __call__
return self.func(*args)
File "G:\W-Seminar\Seminararbeit\Praxis\Funktionsplotter.py", line 145, in tangente
self.ableitung()
File "G:\W-Seminar\Seminararbeit\Praxis\Funktionsplotter.py", line 140, in ableitung
diff(f, self.x)
File "C:\Python27\lib\site-packages\sympy\core\function.py", line 1418, in diff
return Derivative(f, *symbols, **kwargs)
File "C:\Python27\lib\site-packages\sympy\core\function.py", line 852, in __new__
Can\'t differentiate wrt the variable: %s, %s''' % (v, count)))
ValueError:
Can't differentiate wrt the variable: 2.00000000000000, 1
Code: Alles auswählen
import matplotlib.pyplot as plt
import numpy as np
import Tkinter
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
import parser
import re
from sympy import Symbol, diff
REPLACE_DIC = {'sin' : 'np.sin',
'arcsin' : 'np.arcsin',
'sinh' : 'np.sinh',
'arcsinh' : 'np.arcsinh',
'cos' : 'np.cos',
'arccos' : 'np.arccos',
'cosh' : 'np.cosh',
'arccosh' : 'np.arccosh',
'tan' : 'np.tan',
'arctan' : 'np.arctan',
'tanh' : 'np.tanh',
'arctanh' : 'np.arctanh',
'ln' : 'np.log',
'log' : 'np.log',
'log10' : 'np.log10',
'exp' : 'np.exp',
'^' : '**',
'sqrt' : 'np.sqrt',
'pi' : 'np.pi',
}
class App():
def __init__(self, master):
self.master = master
master.protocol("WM_DELETE_WINDOW", self.ende)
self.initUI()
def ende(self):
self.master.destroy()
self.master.quit()
def initUI(self):
self.master.title("Funktionsplotter")
self.label_funktion = Tkinter.Label(self.master, text = "Funktion: f(x)")
self.label_funktion.grid(row = 0, column = 0)
self.entry_funktion = Tkinter.Entry(self.master, width = 120)
self.entry_funktion.grid(row = 0, column = 1)
self.label_startwert = Tkinter.Label(self.master, text = "Startwert der Funktion:")
self.label_startwert.grid(row = 2, column = 0)
self.entry_startwert = Tkinter.Entry(self.master, width = 15)
self.entry_startwert.grid(row = 2, column = 1)
self.label_endwert = Tkinter.Label(self.master, text = "Endwert der Funktion:")
self.label_endwert.grid(row = 3, column = 0)
self.entry_endwert = Tkinter.Entry(self.master, width = 15)
self.entry_endwert.grid(row = 3, column = 1)
self.label_genauigkeit = Tkinter.Label(self.master, text = "Abstand zwischen zu berechnenden Punkten:")
self.label_genauigkeit.grid(row = 4, column = 0)
self.entry_genauigkeit = Tkinter.Entry(self.master, width = 15)
self.entry_genauigkeit.grid(row = 4, column = 1)
self.plot_button = Tkinter.Button(self.master, text = "Funktion plotten", command = self.plot)
self.plot_button.grid(row = 0, column = 4)
self.hinzufueg_button = Tkinter.Button(self.master, text = "Zum Plot hinzufügen", command = self.hinzufuegen)
self.hinzufueg_button.grid(row = 3, column = 4)
self.tangenten_button = Tkinter.Button (self.master, text = "Tangente einzeichnen im Punkt:", command = self.tangente)
self.tangenten_button.grid(row = 5, column = 4)
self.entry_tangentenpunkt = Tkinter.Entry(self.master, width = 7)
self.entry_tangentenpunkt.grid(row = 6, column = 4)
fig = plt.figure()
self.canvas = FigureCanvasTkAgg(fig, master=self.master)
self.toolbar = NavigationToolbar2TkAgg(self.canvas, self.master)
self.canvas.get_tk_widget().grid(row=5, column=1)
self.toolbar.grid(row=7, column=1)
def formel_analysieren(self,):
self.x = np.arange(float(self.entry_startwert.get()),
float(self.entry_endwert.get()),
float(self.entry_genauigkeit.get()))
x = self.x
formula_raw = self.entry_funktion.get().replace('e^x', 'exp(x)')
formula_raw_exp = formula_raw.replace('e^', 'exp')
formula_list = re.split('(\W)', formula_raw_exp)
formula_replace = [REPLACE_DIC.get(item,item) for item in formula_list]
formula_finish = ''.join(formula_replace)
form = parser.expr(formula_finish).compile()
try:
self.y = eval(form)
self.legend = self.entry_funktion.get()
except NameError:
self.y = np.sin(self.x)
self.legend = 'sin(x)'
return (self.x,self.y,self.legend)
def plot(self):
self.formel_analysieren()
plt.clf()
plt.plot(self.x,self.y, label=self.legend)
plt.grid('on')
plt.xlabel('x - Achse')
plt.ylabel('y - Achse')
plt.legend()
plt.gcf().canvas.draw()
def hinzufuegen(self):
self.formel_analysieren()
plt.plot(self.x,self.y, label=self.legend)
plt.legend()
plt.gcf().canvas.draw()
def ableitung(self):
self.formel_analysieren()
self.x=float(self.entry_tangentenpunkt.get())
self.y = Symbol('y')
f = self.y
diff(f, self.x)
return (diff)
def tangente(self):
self.ableitung()
m = diff
self.x = np.arange(float(self.entry_startwert.get()),
float(self.entry_endwert.get()),
float(self.entry_genauigkeit.get()))
x = self.x
formula_raw = self.entry_funktion.get().replace('x', float(self.entry_tangentenpunkt.get()))
formula_raw_expo = formula_raw.replace('e^x', 'exp(x)')
formula_raw_exp = formula_raw_expo.replace('e^', 'exp')
formula_list = re.split('(\W)', formula_raw_exp)
formula_replace = [REPLACE_DIC.get(item,item) for item in formula_list]
formula_finish = ''.join(formula_replace)
form = parser.expr(formula_finish).compile()
self.y = eval(form)
self.legend = self.entry_funktion.get()
return (self.x,self.y,self.legend)
t = (self.y)-m*(float(self.entry_tangentenpunkt.get()))
plt.plot(self.x, m*x+t, label=self.legend)
plt.legend()
plt.gcf().canvas.draw()
def main():
root = Tkinter.Tk()
app = App(root)
root.mainloop()
if __name__ == '__main__':
main()