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.
Funktionen ableiten mit/ohne CAS
ist kein deutscher Satz. Ich nehme mal an du meinst ".. und SymPy braucht mehr."Allerdings hat der Rechner nur 16 MB Speicher und SymPy 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.
-
- User
- Beiträge: 9
- Registriert: Sonntag 24. März 2019, 16:24
Wie verringert man denn den Speicherverbrauch von SymPy?__deets__ hat geschrieben: ↑Sonntag 24. März 2019, 17:56ist kein deutscher Satz. Ich nehme mal an du meinst ".. und SymPy braucht mehr."Allerdings hat der Rechner nur 16 MB Speicher und SymPy 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.
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.
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.
@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?
Was willst Du denn erreichen? Was soll das Ziel sein?
-
- User
- Beiträge: 9
- Registriert: Sonntag 24. März 2019, 16:24
-
- 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
Ich habe das hier gelesen, aber irgendwie nicht richtig verstanden: viewtopic.php?t=21148
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:
Und daraus das abgeleitete Polynom zu berechnen ist ja nun trivial:
Das kann man mit einer einfachen For-Schleife erledigen.
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)]
Code: Alles auswählen
p_d = [(10, 4)]
-
- 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)?
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)?
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.
-
- User
- Beiträge: 9
- Registriert: Sonntag 24. März 2019, 16:24
Ok aber danke trotzdem!