Funktionen ableiten mit/ohne CAS

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
Gyplay_GER
User
Beiträge: 9
Registriert: Sonntag 24. März 2019, 16:24

Hallo,
als erstes: Ich habe keine Ahnung von Python, allerdings brauche ich ein paar Zeilen um eine Ableitung zu erstellen.
Bis jetzt habe ich die Lösung mit SymPy gefunden:

from sympy import Symbol, diff

x = Symbol('x')
func = input("Funktion hier:")
diff(func, x)
print(diff(func, x))

Das Problem damit ist, dass ich das Programm auf meinem Taschenrechner (CASIO FX CG50) brauche. Allerdings hat der Rechner nur 16 MB Speicher und SymPy mehr. Ich brauche nun also eine Methode, unter 16 MB eine Ableitung einer Funktion mit Python zu berechnen.

Als Beispiel könnte man z.B. 2*x**5+70 nutzen.
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

Allerdings hat der Rechner nur 16 MB Speicher und SymPy mehr.
ist kein deutscher Satz. Ich nehme mal an du meinst ".. und SymPy braucht mehr."

Wenn dem so ist: es gibt keinen einfachen Trick, wie man so etwas komplexes wie symbolisches Rechnen selbst machen kann. Wenn SymPy nicht zum laufen zu bringen ist, stehen die Chancen schlecht, dass du eine Alternative findest, geschweige denn, dass sie dir hier jemand kurz hinschreibt.

Da haettest du eher eine Chance zu versuchen, den Speicherverbrauch zu reduzieren.
Gyplay_GER
User
Beiträge: 9
Registriert: Sonntag 24. März 2019, 16:24

__deets__ hat geschrieben: Sonntag 24. März 2019, 17:56
Allerdings hat der Rechner nur 16 MB Speicher und SymPy mehr.
ist kein deutscher Satz. Ich nehme mal an du meinst ".. und SymPy braucht mehr."

Wenn dem so ist: es gibt keinen einfachen Trick, wie man so etwas komplexes wie symbolisches Rechnen selbst machen kann. Wenn SymPy nicht zum laufen zu bringen ist, stehen die Chancen schlecht, dass du eine Alternative findest, geschweige denn, dass sie dir hier jemand kurz hinschreibt.

Da haettest du eher eine Chance zu versuchen, den Speicherverbrauch zu reduzieren.
Wie verringert man denn den Speicherverbrauch von SymPy?
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

Bitte kein full-quote eines Postings direkt davor. Den kann man ja schon so ganz gut lesen.

Und den Verbrauch verringert man, indem man zB versucht, Teile zu identifizieren die nicht benoetigt werden. Das ist allerdings ein zaeher Prozess. Du kannst zB schauen, ob es Unter-Module/Pakete gibt, fuer die du keine Verwendug hast, und die loeschen. Wenn dann importe die benoetigen, kannst du die entfernen, aber das klappt natuerlich nur, wenn diese importe dann nicht auch benoetigt werden.

Ein generisches Rezept kann es nicht geben - sonst wuerde man das automatisch machen koennen, und von vorne herein weniger Speicher brauchen.
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

@Gyplay_GER: Dein Casio benutzt MicroPython, hat also wahrscheinlich viel weniger Speicher als die 16MB Flash. Und auch nicht alles läuft so, wie bei einem normalen Python.
Was willst Du denn erreichen? Was soll das Ziel sein?
Gyplay_GER
User
Beiträge: 9
Registriert: Sonntag 24. März 2019, 16:24

Sirius3 hat geschrieben: Sonntag 24. März 2019, 18:10 Was soll das Ziel sein?
Das Ziel soll sein, die erste Ableitung einer Funktion anzeigen zu lassen. Der Taschenrechner kann zwar von Haus aus eine Ableitung anzeigen, allerdings nur als Graph.
Gyplay_GER
User
Beiträge: 9
Registriert: Sonntag 24. März 2019, 16:24

Ist es vielleicht auch irgendwie möglich eine Ableitung ohne CAS zu bilden?
Ich habe das hier gelesen, aber irgendwie nicht richtig verstanden: viewtopic.php?t=21148
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

Naja, das bedeutet am ende, dass man das von dir gegebene Polynom

2*x**5+70

transformiert zu einer Semi-Normalform

2*x**5+70*x**0

womit klar ist, dass es auch im Grunde nur eine Liste von (koeffizient, exponent)-Werten ist:

Code: Alles auswählen

p = [(2, 5), (70, 0)]
Und daraus das abgeleitete Polynom zu berechnen ist ja nun trivial:

Code: Alles auswählen

p_d = [(10, 4)]
Das kann man mit einer einfachen For-Schleife erledigen.
Gyplay_GER
User
Beiträge: 9
Registriert: Sonntag 24. März 2019, 16:24

Okay, Danke!
Ich habe nur leider keine Ahnung von Python und einer For-Schleife.
Kannste mir bitte (wenns nicht zu kompliziert ist) einfach kurz ein paar Zeilen schreiben (mit input, anstatt mit einer Funktion)?
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das ist nicht so voellig trivial, denn die Eingabe eines solchen Polynoms einzulesen in der Form wie du die hier haben willst (also "4*x**5" etc) - dafuer muss man einen eigenen Parser schreiben. Das sind ein paar dutzen zeilen und eine Stunde oder so Arbeit. Vielleicht findet sich jemand, aber mir fehlt dafuer die Zeit und die Lust.
Gyplay_GER
User
Beiträge: 9
Registriert: Sonntag 24. März 2019, 16:24

Ok aber danke trotzdem!
Antworten