Fehlermeldung
Verfasst: Montag 16. September 2013, 14:21
So mit o kurz und knapp könnt ihr mir mal bitte mit der Fehlermeldung helfen, die kommt, wenn man die Tangente zeichnen will? Sprich was heißt das und wie bekomm ichs weg?
By the way ja es ist chaotisch aber das kommt noch.
hier der Fehler:
Wie immer danke für die Hilfe (:
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()