Mehrere Funktionen in einem Koordinatensystem?

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
Troix
User
Beiträge: 5
Registriert: Samstag 15. August 2015, 09:34

Hallo zusammen :mrgreen:

Ich habe in python eine Liste erstellt, die mit eine Anzahl Funktionen befüllt wird.
Nun möchte ich diese in einem Plot anzeigen.
Die einfache Funktion x funktioniert, alle anderen nicht.
Bereits bei x+1 gibt es mir eine Fehlermeldung.

Hier mal ein Auszug aus dem Code:

Code: Alles auswählen

import matplotlib.pyplot as plt
import numpy as np
import math

i=0
t=0
wahl2=2

if wahl2==2:
        print("")
        print("Wieviele Funktionen möchten Sie eingeben?")
        wahl21 = input("Ihre Wahl= ")
        while(i<wahl21):
            print("Geben Sie bitte die Funktion in '' an! Desweiteren gilt sin(x) = np.sin(x) und e**x = np.exp(x)")
            func = input("Funktion= ")
            myList.insert(i,func)
            i=i+1

        x = np.arange(-10.0,10,0.1)
        while(t<wahl21):
            y= myList[t] 
            plt.plot(x,y)
            t=t+1

        plt.grid(True)
        plt.show()
Ich würde gerne die Liste mit verschiedenen Funktionen füllen und diese in einem Plot ausgeben.

Danke für die Hilfe im Vorfeld, :mrgreen:
Troix
Sirius3
User
Beiträge: 17753
Registriert: Sonntag 21. Oktober 2012, 17:20

@Troix: auch x funktioniert nicht. Variablen sollten dann initialisiert werden, wenn sie auch gebraucht werden und nicht irgendwo am Anfang. print ist ein Statement und keine Funktion, sollte dann auch nicht wie eine geschrieben werden. input solltest Du nicht verwenden, weil es implizit ein eval ausführt, womit man ziemlichen Unfug anstellen kann. while ist auch keine Funktion, die Klammern überflüssig. Statt while solltest Du hier auch for benutzen. Wenn Du bei func x eingibst, wird das sofort evaluiert, x ist aber nicht definiert, es gibt also einen Fehler. Genauso ist myList nicht definiert. myList ist auch ein schlechter Name. Er hält sich nicht an die Namenskonvention, das my-Präfix ist sinnfrei und List sagt auch nichts über den Inhalt der Liste (Genauso ist die wahllose Nummerierung der wahl-Variablen sinnfrei). Statt insert wäre hier append richtig.
Troix
User
Beiträge: 5
Registriert: Samstag 15. August 2015, 09:34

Danke für die Antwort.
Wie plotte ich aber nun mehrere Funktionen in einem Koordinatensystem?
Hat mir jemand ein einfaches Beispiel?

Danke,
Troix
BlackJack

@Troix: Das ist nicht so einfach sauber hin zu bekommen. Man müsste den Ausdruck in der Zeichenkette den man vom Benutzer bekommt kompilieren, dann ein Wörterbuch mit den Funktionen/Werten erstellen die man dem Benutzer zur Verfügung stellen möchte, explizit dafür sorgen das die eingebauten Funktionen *nicht* zur Verfügung stehen (`__builtins__` in dem Wörterbuch zum Beispiel auf `None` abbilden), dann die freie(n) Variablen(n) setzen und den kompilierten Code mit dem Wörterbuch als Namensraum ausführen lassen, und danach das Ergebnis aus diesem Wörterbuch holen.
Sirius3
User
Beiträge: 17753
Registriert: Sonntag 21. Oktober 2012, 17:20

@Troix: hier das einfache Beispiel:

Code: Alles auswählen

result = eval('sin(x)', {'__builtins__':None, 'sin':np.sin}, {'x':5})
Antworten