WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Quelltext von voreingespeicherten Matlab-Funktionen?

 

daviderz
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 27.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.10.2015, 17:06     Titel: Quelltext von voreingespeicherten Matlab-Funktionen?
  Antworten mit Zitat      
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 Smile

LG
David
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 27.10.2015, 17:20     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
daviderz
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 27.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.10.2015, 17:34     Titel:
  Antworten mit Zitat      
Okay, bei den Befehlen ist es also nicht möglich, an den Quelltext der Funktion zu kommen?
Private Nachricht senden Benutzer-Profile anzeigen
 
daviderz
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 27.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.10.2015, 17:39     Titel:
  Antworten mit Zitat      
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?
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 27.10.2015, 17:44     Titel:
  Antworten mit Zitat      
realmax ist ja auch build in und kein matlab script

als beispiel is meshgrid zb noch nicht buildin
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
daviderz
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 27.10.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.10.2015, 17:54     Titel:
  Antworten mit Zitat      
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? Confused
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 27.10.2015, 18:11     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 27.10.2015, 23:40     Titel:
  Antworten mit Zitat      
Hallo daviderz,

In Matlab 2011b war realmax jedenfall ein M-File und man konnte es einfach per
Code:

ö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
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.10.2015, 00:05     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Friidayy
Forum-Century

Forum-Century


Beiträge: 225
Anmeldedatum: 17.12.13
Wohnort: ---
Version: R2012b
     Beitrag Verfasst am: 03.05.2017, 10:43     Titel:
  Antworten mit Zitat      
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ß
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.05.2017, 13:42     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Friidayy
Forum-Century

Forum-Century


Beiträge: 225
Anmeldedatum: 17.12.13
Wohnort: ---
Version: R2012b
     Beitrag Verfasst am: 03.05.2017, 16:59     Titel:
  Antworten mit Zitat      
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ß
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.05.2017, 18:26     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.05.2017, 21:02     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Friidayy
Forum-Century

Forum-Century


Beiträge: 225
Anmeldedatum: 17.12.13
Wohnort: ---
Version: R2012b
     Beitrag Verfasst am: 04.05.2017, 07:35     Titel:
  Antworten mit Zitat      
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 Smile

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.