|
|
|
Mehrmaliger Funktionsaufruf |
|
| soad |

Forum-Century
|
 |
Beiträge: 150
|
 |
|
 |
Anmeldedatum: 10.11.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 18.10.2011, 11:32
Titel: Mehrmaliger Funktionsaufruf
|
 |
Hi,
ich habe einen Vektor und möchte nun pro Eintrag eine Funktion auswerten. Kann man dies in Matlab ohne for-Schleife realisieren? Gibt es da eventuell eine Funktion bzw. könnte man das mit function_handles umsetzen?
Also:
ohne for?
mfg,
soad
|
|
|
|
|
|
| eupho |

Forum-Meister
|
 |
Beiträge: 777
|
 |
|
 |
Anmeldedatum: 07.01.09
|
 |
|
 |
Wohnort: Marburg
|
 |
|
 |
Version: R2009b
|
 |
|
|
 |
|
Verfasst am: 18.10.2011, 11:54
Titel:
|
 |
|
Die Frage ist vielmehr, wieso du das ohne for-Schleife realisieren möchtest?! Mit arrayfun() lässt sich das beispielsweise vektorisieren, bei extrem vielen Funktionsaufrufen hilft es i.d.R. auch, die Funktion entsprechend darauf anzupassen. Mit dem Profiler erkennst du Schwachstellen im Code, die vermutlich garnicht auf die Schleife zurückzuführen sind.
|
|
|
|
| Harald |

Forum-Meister
|
 |
Beiträge: 24.502
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 18.10.2011, 11:55
Titel:
|
 |
Hallo,
das hängt sehr stark von der aufgerufenen Funktion ab.
Wenn die Funktion das unterstützt, kannst du
schreiben, wobei ich bar als Variablenname vermeiden würde, da bar auch eine Funktion ist (zum Plotten von Balkendiagrammen).
Entscheidend ist wie gesagt, dass foo.m Vektoren als Eingabeargumente akzeptiert. Bei viele MATLAB-Funktionen ist das der Fall, z.B. sin, abs, sqrt.
Wenn das nicht der Fall ist, könnte man auch mit ARRAYFUN arbeiten; der Performance-Gewinn dürfte allerdings nicht so hoch sein, wie wenn man mit "echter" Vektorisierung arbeitet.
Grüße,
Harald
|
|
|
|
| soad |
Themenstarter

Forum-Century
|
 |
Beiträge: 150
|
 |
|
 |
Anmeldedatum: 10.11.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 18.10.2011, 12:33
Titel:
|
 |
Ok, danke euch beiden!
Wie ich gelesen habe, sollte man doch eher for-Schleifen in Matlab vermeiden, oder? Als Vektor kann ich den Parameter nicht übergeben.
Ja, ARRAYFUN hatte ich gesucht, hierzu noch eine Frage:
Ist es hier möglich eine fixen und eine variablen Parameter zu übergeben. Also:
Parameter fix bleibt bei allen Aufrufen gleich, Parameter var ändert sich bei jedem Aufruf.
mfg,
soad
|
|
|
|
| Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 18.10.2011, 16:23
Titel:
|
 |
Hallo soad,
Die Information, dass FOR-Schleifen in Matlab vermieden werden sollten, stimmt -- für Matlab <= 6.1. Wenn Du eine modernere Version verwendest, sind FOR-Schleifen oft am effizientesten, wenn sie weniger temporären Speicher benötigen als die vektorisierten Methoden.
Gruß, Jan
|
|
|
|
| Harald |

Forum-Meister
|
 |
Beiträge: 24.502
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 18.10.2011, 18:17
Titel:
|
 |
Hallo nochmal,
es wird sehr von der Art der Funktion abhängen.
In vielen Fällen wird es auch mit neueren MATLAB-Versionen so sein, dass Vektorisierung einen Performance-Gewinn von Faktor 10 oder mehr bringt. Insbesondere verschachtelte for-Schleifen sind oft ineffizient.
In anderen Fällen bringt Vektorisierung wenig bis gar keinen Performance-Gewinn und dafür dann sogar noch Speicherprobleme.
Pauschale Aussagen sind hier schlicht nicht möglich. Wenn ein Code-Teil sich als Bottleneck erweist, würde ich jedenfalls versuchen, ob Vektorisierung einen Performance-Gewinn ermöglicht.
Was die letzte Frage angeht:
fest: fixe Parameter (fix ist eine Funktion und sollte nicht als Variablenname verwendet werden)
variabel: variable Parameter (var ist eine Funktion und sollte nicht als Variablenname verwendet werden)
vari: eine Dummy-Variable für die variablen Parameter
foo.m: eine Funktion, die zwei Eingabeargumente annimmt.
Grüße,
Harald
|
|
|
|
| soad |
Themenstarter

Forum-Century
|
 |
Beiträge: 150
|
 |
|
 |
Anmeldedatum: 10.11.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 19.10.2011, 11:52
Titel:
|
 |
|
Super, herzlichen Dank euch beiden!
|
|
|
|
|
|
|
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.
|
|