Mahtematische Funktion

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
welt-von-max
User
Beiträge: 19
Registriert: Dienstag 18. Januar 2011, 10:17

Hallo ich möchte gerne ein Programm schreiben, was eine Kurvendiskursion durchführt ...
doch komm ich nicht weiter, angenommen der Funktion soll mittels paararmeter eine funktion übermittelt werden
und mit dieser dann eine wertetabelle erstellt werden bsp .:

Code: Alles auswählen

def werte_tb(funktion,von,bis):
        tb =[[],[]]
        for x in range(von,bis+1):
                 tb[0].append(x)
                 tb[1].append(???????????????)  
wie kann ich das umsetzen???
danke schön
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo.

Zum Beispiel so:

Code: Alles auswählen

>>> def square(x):
...     return x**2
... 
>>> def plot(function, begin, end):
...     return [(x, function(x)) for x in range(begin, end+1)]
... 
>>> def plot2(function, begin, end):
...     result = []
...     for x in range(begin, end+1):
...         result.append((x, function(x)))
...     return result
... 
>>> plot(square, 0, 10)
[(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25), (6, 36), (7, 49), (8, 64), (9, 81), (10, 100)]
>>> plot2(square, 0, 10)
[(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25), (6, 36), (7, 49), (8, 64), (9, 81), (10, 100)]
Kurvendiskussion ist das natürlich noch lange nicht.
Das Leben ist wie ein Tennisball.
welt-von-max
User
Beiträge: 19
Registriert: Dienstag 18. Januar 2011, 10:17

ja aber bei dir ist die funktion square s(x) = x² schon "im Programm"

ich wollt im pronziep das der endnutzer meinetwegen das interface hat:

funktion = raw_input("Geben sie die funktion ein: ")
.....
....
.....
....
print WERTETABELLE

verstehst du ?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo.

Die beste Lösung wäre natürlich, wenn du dir einen eigenen Parser baust und damit Strings in Funktionen umwandelst (oder schon einen fertigen Parser benutzt). Wahrscheinlich ist das aber ein wenig komplex für dich. Eine andere schöne Möglichkeit wäre, den Raum der Funktionen einzugrenzen, zum Beispiel nur auf quadratische Funktionen, und dazu die Parameter abfragst. Dann kannst du die Nullstellen auch analytisch berechnen. Ich gebe den Hinweis nur sehr ungerne, aber auf die schnelle könntest du dir die eval-Funktion anschauen. Du solltest dir aber klar darüber sein, dass man damit beliebigen Python-Code ausführen kann, was natürlich zu beliebigen Problemen führen kann. Und natürlich gibt es auch eine Bibliothek, welche all diese Aufgaben übernimmt und analytisch arbeitet. Mir fällt der Name gerade nicht ein, aber Google sollte dein Freund sein.
Das Leben ist wie ein Tennisball.
welt-von-max
User
Beiträge: 19
Registriert: Dienstag 18. Januar 2011, 10:17

ich hab mir überlegt man könnte die funktion als string lassen und dann immer
umformen ,aber da kommt immer ein fehler

Code: Alles auswählen

print int("3*2")
Traceback (most recent call last):
File "H:/Python/Kurvendiskursion/versuch1.py", line 1, in <module>
print int("3*2")
ValueError: invalid literal for int() with base 10: '3*2'
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

Code: Alles auswählen

int("3*2")
3*2 ist ja auch keine "fertige" Zahl. Der Ausdruck muss vorher ausgewertet werden. Int verkraftet nur "vorgekaute und mundfertige" Zahlen.

Hier noch ein Hinweis wie du Funktionen die als String übergeben wurden in eine normale Python-Funktion umwandeln kannst:

Code: Alles auswählen

>>> def parsefunc(codestr, arg):
...     return eval("lambda %s: %s" % (arg, codestr))
>>> f = parsefunc("2*x+4", "x")
>>> f(3)
10
@EyDu: Da es nur für Versuche am eigenen Schreibtisch genutzt wird braucht man denke ich auch kein schlechtes Gewissen zu haben.
Wenn du echte Plots erstellen willst empfehle ich dir matplotlib anzuschauen.
Wenn du symbolische Algebra mit Python machen willst, dann schau dir mal SymPy an.

MFG HerrHagen
Antworten