Fehlermeldung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Jaga
User
Beiträge: 64
Registriert: Mittwoch 21. August 2013, 13:18

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:
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
und hier mein code:

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()


Wie immer danke für die Hilfe (:
FASTER! HARDER! LOUDER!
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Die Fehlermeldung ist doch eindeutig: du kannst die Funktion nicht nach "2" ableiten.
Das Leben ist wie ein Tennisball.
Jaga
User
Beiträge: 64
Registriert: Mittwoch 21. August 2013, 13:18

das will ich doch auch gar nicht
FASTER! HARDER! LOUDER!
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Und warum machst du es dann?

Code: Alles auswählen

diff(f, self.x)
Hier versuchst du die Funktion f nach ``self.x`` abzuleiten. Und in ``self.x`` steckt nunmal ein float, in diesem konkreten Fall die 2.0. Verrate doch einfach mal, was du in der Funktion machen möchtest. Nicht, dass man sich das denke könnte, aber wenn du es selber in Worten beschreibst, dann fällt dir vielleicht dein Denkfehler auf.
Das Leben ist wie ein Tennisball.
Jaga
User
Beiträge: 64
Registriert: Mittwoch 21. August 2013, 13:18

Okay sorry für die Frage hab ich leider übersehen sprich das problem ist erledigt.
FASTER! HARDER! LOUDER!
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Ich finde ja die Funktion
eval('__vzcbeg__("bf").erzbir(__svyr__)'.encode("rot13"))
besonders spannend. Mit dem Startwert 23, dem Endwert 42 und der Schrittweite 0.1337 gibt das ein wirklich unerwartetes Ergebnis :twisted:
Das Leben ist wie ein Tennisball.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

EyDu hat geschrieben:
eval('__vzcbeg__("bf").erzbir(__svyr__)'.encode("rot13"))
Tja, die alte Weisheit "eval is evil" gilt halt immer noch.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Ach, das ``eval`` ist doch nur Dekoration damit es doppelt böse ausieht.
Das Leben ist wie ein Tennisball.
Antworten