|
|
Quelltext von voreingespeicherten Matlab-Funktionen? |
|
daviderz |
Forum-Newbie
|
|
Beiträge: 4
|
|
|
|
Anmeldedatum: 27.10.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 27.10.2015, 17:06
Titel: Quelltext von voreingespeicherten Matlab-Funktionen?
|
|
Hallo liebe Community,
ich bin neu hier und habe auch noch nicht viel Erfahrung mit Matlab. Und zwar ist meine Frage, ob man irgendwie von Matlab den "Quelltext" zu den bereits voreingespeicherten Funktionen (wie z.B. inv(A) zur Invertierung einer Matrix A etc.) kriegen kann. Es würde mich interessieren, wie genau diese Funktionen geschrieben wurden
LG
David
|
|
|
|
|
Winkow |
Moderator
|
|
Beiträge: 3.842
|
|
|
|
Anmeldedatum: 04.11.11
|
|
|
|
Wohnort: Dresden
|
|
|
|
Version: R2014a 2015a
|
|
|
|
|
|
Verfasst am: 27.10.2015, 17:20
Titel:
|
|
du kannst es mit
open
oder
edit
versuchen. aber nicht alle befehle liegen als skript for. viele sind auch buildin wie zb auch
inv
.
_________________
richtig Fragen
|
|
|
daviderz |
Themenstarter
Forum-Newbie
|
|
Beiträge: 4
|
|
|
|
Anmeldedatum: 27.10.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 27.10.2015, 17:34
Titel:
|
|
Okay, bei den Befehlen ist es also nicht möglich, an den Quelltext der Funktion zu kommen?
|
|
|
daviderz |
Themenstarter
Forum-Newbie
|
|
Beiträge: 4
|
|
|
|
Anmeldedatum: 27.10.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 27.10.2015, 17:39
Titel:
|
|
Und open und edit geben ja nur eine Art Dokumentation zu der Funktion aus, nicht den richtigen Quelltext. Beispielsweise wenn ich wissen will, wie matlab durch Eingabe von 'realmax' den maximal darstellbaren Wert ermittelt ist das nicht möglich?
|
|
|
Winkow |
Moderator
|
|
Beiträge: 3.842
|
|
|
|
Anmeldedatum: 04.11.11
|
|
|
|
Wohnort: Dresden
|
|
|
|
Version: R2014a 2015a
|
|
|
|
|
|
Verfasst am: 27.10.2015, 17:44
Titel:
|
|
realmax ist ja auch build in und kein matlab script
als beispiel is
meshgrid
zb noch nicht buildin
_________________
richtig Fragen
|
|
|
daviderz |
Themenstarter
Forum-Newbie
|
|
Beiträge: 4
|
|
|
|
Anmeldedatum: 27.10.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 27.10.2015, 17:54
Titel:
|
|
Genau so etwas, wie bei open meshgrid erscheint suche ich. Wenn ich dich richtig verstanden habe, ist es nicht möglich, so etwas für build in funktionen zu finden?
|
|
|
Winkow |
Moderator
|
|
Beiträge: 3.842
|
|
|
|
Anmeldedatum: 04.11.11
|
|
|
|
Wohnort: Dresden
|
|
|
|
Version: R2014a 2015a
|
|
|
|
|
|
Verfasst am: 27.10.2015, 18:11
Titel:
|
|
Zitat: |
A built-in function is part of the MATLAB executable. MATLAB does not implement these functions in the MATLAB language |
also nicht das ich wüsste .
vielleicht kann man c code generieren mit der embedded coder toolbox und sich den c code mal angucken... hab ich aber noch nie versucht.
_________________
richtig Fragen
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 27.10.2015, 23:40
Titel:
|
|
|
|
|
Hallo daviderz,
In Matlab 2011b war
realmax
jedenfall ein M-File und man konnte es einfach per
öffnen. Für doubles stand dort z.B. "pow2(2-eps,1023)"
Einige Befehle sind aus Standard-Bibliotheken entnommen, z.B. ACOS und ATAN aus FDLIBM (siehe Internet). Die Berechnungen innerhalb von
inv
werden von BLAS und LAPACK-Funktionen ausgeführt, z.T. implementiert in der ATALS-Bibliothek bzw. Intels MKL.
Während Du den Code für BLAS und LAPACK, sowie auch der ATLAS Libraries im Internet findest, lässt Intel sich, soweit ich weiß, nicht mehr in die Karten schauen. Wie genau Matlab intern entscheidet, welche Bibliothek für die Invertierung aufgerufen wird, ist auch nicht öffentlich zugänglich.
Man kann zwar Matlab mit einen Debugger und einer De-Assemblierung zu Leibe rücken, denn es sind ja alle benötigten Informationen auf dem Rechner lokal vorhanden. Das würde allerdings gegen die Lizenz-Bedingungen verstoßen und wäre illegal.
Den Source-Code kann man auch einsehen, wenn man sich bei TMW als Programmierer einstellen lässt. Das ist aber mit zusätzlichem Aufwand verbunden, auf der anderen Seite hat es den Vorteil, dass man finanziell dafür entschädigt wird.
Gruß, Jan
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 28.10.2015, 00:05
Titel:
|
|
|
|
|
Hallo,
eine entscheidende Frage ist ja auch: warum interessiert dich das?
Vordefinierte Funktionen decken oft viele Eventualitäten ab und versuchen, in jedem Fall das beste zu machen. Ein Beispiel ist der Entscheidungsbaum in mldivide, der Funktion hinter \ :
http://de.mathworks.com/help/matlab/ref/mldivide.html (unter Algorithms)
Das bedeutet im Umkehrschluss auch, dass der Code manchmal länglich und schwer lesbar ist. Selbst wenn du ihn also zu sehen bekämst, würde dich das vermutlich überfordern - mich zumindest würde es überfordern.
Wenn es dir darum geht, selbst Programmieren zu lernen, dann hast du vermutlich mehr davon, den selbstgeschriebenen Code anderer Nutzer anzusehen.
Zum Thema inv lohnt sich vielleicht noch zu wissen, dass man nur sehr selten wirklich invertieren muss, siehe z.B.
http://www.johndcook.com/blog/2010/01/19/dont-invert-that-matrix/
Sollte man mal einen Bug vermuten oder Probleme mit einer konkreten Funktion haben, lohnt sich natürlich auch die Kontaktaufnahme mit dem Technischen Support von MathWorks.
Grüße,
Harald
|
|
|
Friidayy |
Forum-Century
|
|
Beiträge: 225
|
|
|
|
Anmeldedatum: 17.12.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2012b
|
|
|
|
|
|
Verfasst am: 03.05.2017, 10:43
Titel:
|
|
Hallo,
der Thread ist schon etwas älter; meine Anschlussfrage passt hier aber denk ich ganz gut rein.
Hat jemand eine Ahnung, warum Matlab für das Lösen von LGS (\-Operator) auf C-Funktionen zurückgreift, aber nicht bei ODE-Solvern oder Optimierungssolvern ala Fmincon? Das würde dort doch sicherlich auch sinnvoll sein, um Berechnungszeit zu sparen.
Gruß
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 03.05.2017, 13:42
Titel:
|
|
Hallo,
diese Frage würde ich an MathWorks stellen, im Zweifelsfall den Technischen Support.
Interessant kann an der Stelle sein, dass man aus Code, der ode45 (oder ode23)[/u] aufruft, mit MATLAB Coder auch MEX-Files generieren kann. Ich habe gerade noch mal ein Beispiel gefunden (Parameter Sweep über ein System von 4 DGLen, mit Event Funktion), in dem der Code dadurch in 0,25s statt 19s durchläuft.
Grüße,
Harald
|
|
|
Friidayy |
Forum-Century
|
|
Beiträge: 225
|
|
|
|
Anmeldedatum: 17.12.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2012b
|
|
|
|
|
|
Verfasst am: 03.05.2017, 16:59
Titel:
|
|
Hallo Harald,
ich wusste garnicht, dass man Funktionen, die einen ODE-Solver aufrufen, in ein Mex-File überführen kann. Das trifft sich gerade gut, da ich ein Optimierungsproblem habe, indem ich mein Modell unzählige Male simulieren muss. Ich hatte schon überlegt, eine C-Funktion zu schreiben, die die Simulation übernimmt und sie aus Matlab heraus aufzurufen. Ich schätze, dass sich damit schon einiges an Zeit einsparen lässt; aber ok, ich werds jetzt erstmal mit den Mex-Files probieren. Wie genau sieht dafür die Syntax aus? Normalerweise hat man ja 2 Funktionen, 1. für den Aufruf des ODE-Solvers und 2. für die Differentialgleichung; hast du für beide ein Mex-File generiert? GIbts dabei keine Probleme, da man ja nicht aus einem Mex-File heraus ein anderes Mex-File aufrufen darf.
Gruß
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 03.05.2017, 18:26
Titel:
|
|
Hallo,
jetzt habe ich doch eine Vermutung, warum fmincon und ode45 nicht als C-Code vorliegen: beide brauchen ein Function Handle als Input, müssen also intern letztlich MATLAB-Code ausführen. Nicht zuletzt würde ich erwarten, dass bei zeitintensiven Problemen die meiste Zeit in den vom Nutzer zur Verfügung gestellten Funktionen verbracht wird.
Sofern du MATLAB Coder zur Verfügung hast, dürfte die Erstellung eines MEX-Files aus dem MATLAB Code deutlich einfacher sein. Immer vorausgesetzt natürlich, der MATLAB Code verwendet unterstützte Funktionalität.
Ich würde zunächst mal versuchen, aus der Zielfunktion ein MEX-File zu generieren (
codegen
/
coder
).
Grüße,
Harald
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 03.05.2017, 21:02
Titel:
|
|
Hallo,
vielleicht etwas ausführlicher: ich würde versuchen, ein MEX-File auf der höchstmöglichen Ebene zu generieren (hier: Zielfunktion).
Es sollte aber eigentlich kein Problem sein, ein MEX-File aus einem anderen heraus aufzurufen.
Grüße,
Harald
|
|
|
Friidayy |
Forum-Century
|
|
Beiträge: 225
|
|
|
|
Anmeldedatum: 17.12.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2012b
|
|
|
|
|
|
Verfasst am: 04.05.2017, 07:35
Titel:
|
|
Hallo Harald,
ich habe eben mal meine Matlab-Funktions (inkl. ode45) in MEX-Files überführt und konnte damit Faktor 10 an Zeitersparnis rausholen, danke für den Tipp! Mir war nicht klar, dass er die Compilierung des ODE45-Solvers mitmacht. Es wäre jetzt schön, wenn man nicht nur die Zielfunktion; sondern auch fmincon als MEX ausführen könnte
Gruß
|
|
|
|
Gehe zu Seite 1, 2 Weiter
|
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 - 2024
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.
|
|