Seite 1 von 1

Mahtematische Funktion

Verfasst: Samstag 5. Februar 2011, 20:36
von welt-von-max
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

Re: Mahtematische Funktion

Verfasst: Samstag 5. Februar 2011, 20:47
von EyDu
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.

Re: Mahtematische Funktion

Verfasst: Samstag 5. Februar 2011, 20:53
von welt-von-max
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 ?

Re: Mahtematische Funktion

Verfasst: Samstag 5. Februar 2011, 21:07
von EyDu
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.

Re: Mahtematische Funktion

Verfasst: Samstag 5. Februar 2011, 21:11
von welt-von-max
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'

Re: Mahtematische Funktion

Verfasst: Sonntag 6. Februar 2011, 12:47
von HerrHagen

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