Berechnen von glob.+lok. Maxima & Minima [Programm]

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.
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Abend,

Ich bin gerade dabei das Programm für meine Belegarbeit im Leistungskurs Mathematik zu beenden.

Mein Problem liegt darin herauszufinden wie ich die x-Werte in die Ausgangsgleichung setzen kann, damit ich die y-Werte der Extremas bekomme
und die x-Werte in die 2.Ableitung zu setzen und mit 0 vergleichen, um herauszufinden, ob der x-Wert Minima oder Maxima ist.

Mein Ansatz war :

Code: Alles auswählen

for werte in x:
     y = self.f().subs(Symbol('x'),x)
     print(y)
allerdings gibt er mir ein Fehler aus, da self.f() ein String ist, doch wie mache ich es dann - welche Alternative gibts?

Code: Alles auswählen

    def f(self):
        #Funktion erstellen
        return self.entry.text() #QLineEdit.text()

    def erste_ableitung(self):
        #1.Ableitung bilden
        return diff(self.f())

    def zweite_ableitung(self):
        #2.Ableitung bilden
        return diff(self.erste_ableitung())

    def extremas(self):
        #Extremas berechnen
        #Bekomme alle X'n, setze in f() ein um Y zubekommen
        x = solveset(self.erste_ableitung(),Symbol('x'))
        return x
Zum Inhalt des Programms: es soll die 1. & 2. Ableitung bilden, Extremas berechnen, glob.&lok. Minimas&Maximas bestimmen

Grüße,
xXSkyWalkerXx1
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Niemand? ^^
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@xXSkyWalkerXx1: hast Du schon ein Sympy-Tutorial durchgearbeitet. Da sollte eigentlich vorkommen, wie man einen String in einen Ausdruck umwandelt.
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Habe nochmals, genauer, hineingeschaut und habe die Lösung gefunden! :)
"sympify()" konvertiert String zu Ausdruck.
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Habe Mal 1 Frage:

Wie vergleiche ich komplexe Zahlen?
Also z.b. if 1 == sqrt(2)
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Ich sehe da keine komplexen Zahlen. Dein Beispiel vergleicht einen Integer mit einem Float...
Benutzeravatar
__blackjack__
User
Beiträge: 13112
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@snafu: Nicht wenn `sqrt` aus dem `cmath`-Modul kommt. 👉

Code: Alles auswählen

In [10]: cmath.sqrt(2)
Out[10]: (1.4142135623730951+0j)
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Ja, tschuldigung, hätte das erwähnen sollen, dass es aus dem Modul kommt. ^^
Benutzeravatar
__blackjack__
User
Beiträge: 13112
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@xXSkyWalkerXx1: Jetzt solltest Du vielleicht noch verraten was denn Dein Problem ist‽ Denn der Vergleich wird genau so gemacht wie Du ihn gezeigt hast:

Code: Alles auswählen

In [19]: 1 == cmath.sqrt(2)
Out[19]: False

In [20]: 1 == 1+0j
Out[20]: True
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Naja, durch Substitution (.subs() ) werden x-Werte in eine Funktion gesetzt, um die y-Werte dessen zu ermitteln, dabei wird allerdings ab einer Funktion 3. Grades auch Mal eine Wurzel ausgegeben.
Doch diese y-Werte muss ich mit 0 vergleichen können, um herrauszu finden welches lokalen Und dann die globalen Minima & Maximas sind.

Nur dabei bekomme ich einen Fehlercode, dass das Programm die 0 nicht mit komplexen Zahlen vergleichen könne.
Benutzeravatar
__blackjack__
User
Beiträge: 13112
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@xXSkyWalkerXx1: Geht doch:

Code: Alles auswählen

In [39]: 0 == 1+0j
Out[39]: False
Ich weiss was Du tust und welche Fehlermeldung Du warum bekommst. Du musst aber dringend an Deiner Kommunikation arbeiten. Was Du tust und was für eine Fehlermeldung Du bekommst, sollte man nämlich nicht raten müssen, das sollte von Dir beschrieben werden. Am besten mit Code und Fehlermeldung, und nicht mit diesen vagen Andeutungen.

Also was tust Du denn da genau und was passiert genau, und vor allem – was erwartest Du denn von so einem Vergleich und warum?
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Ist zwar bissel spät, hatte aber bissel was für Schule zu tun. ^^

Code: Alles auswählen

Traceback (most recent call last):
  File "C:\Users\Philipp\Desktop\Eigene_Programme\Mathe - Belegarbeit\Berechner von Min&Max.py", line 68, in <lambda>
    self.button.clicked.connect(lambda: self.calculation(self.x))
  File "C:\Users\Philipp\Desktop\Eigene_Programme\Mathe - Belegarbeit\Berechner von Min&Max.py", line 93, in calculation
    self.find_extremas(x)
  File "C:\Users\Philipp\Desktop\Eigene_Programme\Mathe - Belegarbeit\Berechner von Min&Max.py", line 131, in find_extremas
    if value < 0:
  File "C:\Users\Philipp\AppData\Roaming\Python\Python35\site-packages\sympy\core\expr.py", line 358, in __lt__
    raise TypeError("Invalid comparison of complex %s" % me)
TypeError: Invalid comparison of complex 2 - 2*sqrt(3)*I/9
...das ist der Fehlercode, den ich bekomme, wenn ich beim Programm ab "x**3" eingebe.
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Wie soll eine komplexe Zahl auch größer oder kleiner sein als eine andere?
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Ich muss die aber vergleichen können, bezüglich Minima & Maxima.
Benutzeravatar
__blackjack__
User
Beiträge: 13112
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@xXSkyWalkerXx1: Aber wie? Zeig doch mal einen Vergleich zwischen einer komplexen Zahl auf kleiner oder grösser und erkläre dann mal was da Deiner Meinung nach herauskommen soll und warum, beziehungsweise wie man auf dieses Ergebnis kommen soll‽
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Ich bin mir nicht sicher, ob ich dich richtig verstanden habe, aber hier... :

Code: Alles auswählen

try:#lokale Max&Min
            for value in y_val_abl2_list:
                if value < 0:
                    lok_maxima_list.append(value)
                else:
                    lok_minima_list.append(value)
        except:
            lok_maxima_list.append("/")
            lok_minima_list.append("/")
...der Vergleich.

Das Programm soll auch die Komplexe "2 - 2*sqrt(3)*I/9" (siehe Fehlercode) vergleichen, um diese Minima bzw. Maxima zu zuordnen.
Also demnach sollte diese Komplexe der Minimaliste zugeordnet (hinzugefügt) werden.
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Also mal konkret, ist nun 2-3i < 0 oder größer 0?

Keine nakten Excepts, vor allem, wenn man den Fehler ignoriert.
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Das ist kein "I", sondern eine "1".

Und es ist >0.
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Was ist eine 1? Hast Du nun komplexe Zahlen oder nicht?
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

1. Ja, es ist eine komplexe Zahl.
2. Naja, scheint wohl doch ein "I" zu sein, aber woher kommt das "I" - denn ich habe es ja garnicht mit eingegeben, als Funktion?

Da muss ich mir Mal kurz die Doku anschauen.

EDIT: reicht es die "0" als Vergleich in eine Komplexe Zahl umzuwandeln - mit "complex()"?
Bin nämlich gerade nicht am PC, sondern erst morgen wieder.
Antworten