Matroids Matheplanet Forum Index
Moderiert von mire2
Mathematische Software & Apps » Andere Softwarepakete » Generierung von effizientem Code mit (x)maxima
Autor
Kein bestimmter Bereich Generierung von effizientem Code mit (x)maxima
k-mte
Wenig Aktiv Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 18.02.2014
Mitteilungen: 24
  Themenstart: 2019-10-18

Hallo, in (x)maxima gibt es eine Funktion zur Generierung von effizientem Code, die so funktioniert, dass bei der Berechnung von komplizierten Ausdrucken (in einem "block"?) in einem externen Programm (Fortran?) zunächst im Ausdruck mehrmals wiederkehrende Teilausdrucke berechnet werden und anhand dieser Basis dann der der gesamte Ausdruck. Ich komme einfach nicht mehr darauf, wie der dieser Befehl heißt und bitte um Hilfe. k-mte


   Profil
zippy
Senior Letzter Besuch: im letzten Monat
Dabei seit: 24.10.2018
Mitteilungen: 5147
  Beitrag No.1, eingetragen 2019-10-18

Die Funktion, die in einem komplizierten Ausdruck nach wiederkehrenden Teilausdrücken sucht, ist optimize: \sourceon -- Function: optimize () Returns an expression that produces the same value and side effects as but does so more efficiently by avoiding the recomputation of common subexpressions. 'optimize' also has the side effect of "collapsing" its argument so that all common subexpressions are shared. Do 'example (optimize)' for examples. \sourceoff Die hat aber nichts mit der Ausgabe im Fortran-Format zu tun. --zippy


   Profil
k-mte
Wenig Aktiv Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 18.02.2014
Mitteilungen: 24
  Beitrag No.2, vom Themenstarter, eingetragen 2019-10-19

Hallo zippy, vielen Dank! Info: optimize () berechnet z. B. den Ausdruck y = (a + b)^2 + (a + b)^3, indem es erst den Ausdruck a + b berechnet und einer lokalen Variablen zuweist und anschließend die Exponierung und Summenbildung anhand der bereits berechneten lokalen Variablen durchführt. Die Ausgabe erfolgt leider nur in maxima-Code, der zur (numerischen) Berechnung des Ausdrucks mit einem externen Programm zunächst noch in die gewünschte Programmiersprache übersetzt werden muß. (Wobei sich bei der Portierung nach C die Portierung von basis^exponent nach pow (basis, exponent) manschmal als etwas sperrig erweist)


   Profil
Folgende Antworten hat der Fragensteller vermutlich noch nicht gesehen.
zippy
Senior Letzter Besuch: im letzten Monat
Dabei seit: 24.10.2018
Mitteilungen: 5147
  Beitrag No.3, eingetragen 2019-10-19

\quoteon(2019-10-19 13:17 - k-mte in Beitrag No. 2) Wobei sich bei der Portierung nach C die Portierung von basis^exponent nach pow (basis, exponent) manschmal als etwas sperrig erweist \quoteoff Das kannst du auch maxima machen lassen: \sourceon maxima (%i1) ((a + b)^2 + (a + b)^3 + 1)^4; 3 2 4 (%o1) ((b + a) + (b + a) + 1) (%i2) subst (pow, "^", %); (%o2) pow(pow(b + a, 3) + pow(b + a, 2) + 1, 4) \sourceoff


   Profil

Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2023 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]