|
|
|
Dynamische Funktionen auswerten |
|
| Nakamura |

Forum-Newbie
|
 |
Beiträge: 2
|
 |
|
 |
Anmeldedatum: 19.10.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 19.10.2011, 08:57
Titel: Dynamische Funktionen auswerten
|
 |
Hallo zusammen,
ich möchte mehrere beliebige, vom Benutzer eingebbare Funktionen mit vielen (>1e4) Werten für die verwendeten Variablen auswerten.
Der unte beigefügte Code funktioniert, allerdings zu langsam. Der Profiler sagt, dass die im Wesentlichen an der langsamen feval-Funktion liegt.
Wie kann man das optimieren? Die m-Schleife ist notwendig, da in der realen Datei mehrere Funktionen ausgewertet werden sollen.
Kann man feval durch etwas schnelleres ersetzen?
Vielen Dank.
|
|
|
|
|
|
| _Peter_ |

Moderator
|
 |
Beiträge: 537
|
 |
|
 |
Anmeldedatum: 08.12.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: 7.10, 2010a
|
 |
|
|
 |
|
Verfasst am: 19.10.2011, 09:54
Titel: Re: Dynamische Funktionen auswerten
|
 |
| |
 |
|
Hallo Nakamura,
vielleicht erklärst du uns nochmal genauer, was du genau vor hast. Für mich ist deine Absicht leider nicht ganz erkennbar, da dein Code an ein paar Stellen keinen Sinn macht:
| Nakamura hat Folgendes geschrieben: |
|
Warum setzt du hier eine Schleife? Und warum der eval Befehl?
Warum nicht einfach folgendes?
| Nakamura hat Folgendes geschrieben: |
|
Was willst du hiermit bewirken? Warum die beiden Schleifen, wenn du nur aus x_values ein Cell-array machst? warum nicht mit x_values einfach wieter arbeiten? Dies könnte man meiner Meinung nach weglassen.
Zum Thema eval gibt es hier sehr viele Beiträge, vorallem von Jan, bei denen er erklärt warum dies zu vermeiden ist.
| Nakamura hat Folgendes geschrieben: |
|
Bevor man hier was verändert, solltest du erklären was genau du vorhast denke ich...
p.s.: Dein Code brauch bei mir 2,583225s
die folgende Variante nur 2.113680s, aber da geht bestimmt noch mehr:
_________________
Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
|
|
|
|
| Nakamura |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 2
|
 |
|
 |
Anmeldedatum: 19.10.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 19.10.2011, 11:29
Titel:
|
 |
Hallo Peter,
Die m-for-Schleife ist notwendig, weil func auch mehr als nur eine Funktion enthalten kann. Ich habe es im Beispiel auf 1 reduziert. Daher ist denke ich auch die eval Funktion nötig.
In deiner Variante hast du nun hardcodiert, dass es drei Variablen gibt. Dies weiß man jedoch nicht, da parameter_list auch mehr als nur drei Variablen enthälten könnte.
Wenn man die Funktion und die Variablen kennen würde, könnte man es effizienter hardcodieren. Die Funktionen und Variablen sind aber variabel, auch bzgl. ihrer Anzahl. Daher der Aufwand.
|
|
|
|
| Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 19.10.2011, 14:32
Titel: Re: Dynamische Funktionen auswerten
|
 |
Hallo Nakamura,
Nein, FEVAL ist definitiv nicht langsam. Das Problem sind die ineffizienten INLINE-Funktionen.
Peter hat ja schon vorgeschlagen, das EVAL einfach wegzulassen:
Wozu ist das EVAL denn nötig??
Wenn Du die Funktionen in ein M-file schreiben könntest, wäre das wohl deutlich effizienter als die INLINE-Aufruf. Um wieviele funktionen geht es denn? Sind die Funktionen vektorisierbar?
Gruß, Jan
|
|
|
|
| Naka |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 19.10.2011, 15:41
Titel:
|
 |
Die Funktionen sind nicht vektorisierbar, da sie ja nichtlinear sind.
Typischerweise sind es bis zu 10 Funktionen.
Die Funktionen in m-files zu schreiben habe ich schon versucht. Das bringt nur etwa 50%. Bei typischen 1e6 oder 1e7 vielen Werten wartet man also immer noch ewig.
|
|
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|