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

Modul für Konstanten?

 

Duvodas
Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 26.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.09.2009, 16:13     Titel: Modul für Konstanten?
  Antworten mit Zitat      
Hallo,
ich bin nun schon seit einiger Zeit auf der Suche nach etwas Vergleichbarem zu den Modulen, wie ich sie aus Fortran kenne.

Diese Module enthalten häufig verwendete Konstanten und Initialisierungen von Variablen. Wenn diese in mehreren Funktionen benötigten werden, erspart es nicht nur viel Code, es gibt auch noch weitere Vorteile: Bei einer Änderung müssen die Konstanten z.B. nur noch im Modul geändert werden.

Wie lassen sich solche Module eurer Meinung nach am besten in MatLab realisieren, oder gibt es gar solch Module, die ich bisher übersehen habe?

Bis jetzt habe ich mit globalen Variablen gearbeitet. Das ist mir auf Dauer aber nicht praktisch genug, da stets markiert werden muss, dass die Variablen global sind.

Vor kurzem kam mir noch der Gedanke, dass man mit den "Strukturen" arbeiten könnte, die diesen Punkt enthalten. (Wie nennt man diese eigentlich? Die Variablen mit den geschweiften Klammern sind ja auch Strukturen) Die Berechnung von a*b mit Werten aus einem "Modul" würde dann so aussehen:

Code:
function konstanten=modul()
konstanten.a=a;
konstanten.b=b;
.
.
.
end






konstanten=modul();

c=konstanten.a*konstanten.b;


Kennt jemand von euch noch eine andere Möglichkeit?
Private Nachricht senden Benutzer-Profile anzeigen


Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 16.09.2009, 18:06     Titel:
  Antworten mit Zitat      
Die meisten Nutzer haben ein Initialisierungsskript das üblicher Weise auch so ähnlich wie param_init.m heisst. Alle Variablenzuweisungen sind dann im MATLAB Base-Workspace und können aus anderen M-Skripten genutzt werden.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Duvodas
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 26.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.09.2009, 12:29     Titel:
  Antworten mit Zitat      
Und wie sieht solch ein Initialisierungsskript üblicherweise aus? Wie erreiche ich, dass die Variablen allen Funktionen zur Verfügung stehen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 17.09.2009, 21:44     Titel:
  Antworten mit Zitat      
Ich vermute, dass die Einfachheit von MATLAB hier zu verblüffend ist um drauf zu kommen. Beispiel:

param_int.m:

Code:

EUR2DM=1.955;
 


Dann brot.m

Code:

preis_EUR=3;
preis_DM=EUR2DM*preis_EUR
 


auto.m greift auf den gleichen Parameter zu. Er ist einfach da!

Code:

preis_meinkleinerwagen=10000;
preis_in_mark=EUR2DM*preis_meinkleinerwagen
 


Wenn brot und auto aber nun unbedingt Funktionen sein müssen, sollten etwender die Parameter mit dem Funktionsaufruf übergeben werden, oder (ich mag das nicht so) als GLOBAL definiert werden.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Duvodas
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 26.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.09.2009, 13:24     Titel:
  Antworten mit Zitat      
Ah danke, mir war bisher gar nicht so bewusst, dass man ein Skript auch innerhalb eines Skripts ausführen kann, und dass diesem dann die Variablen zur Verfügung stehen. Bisher habe ich immer nur mit einem Skript und vielen Funktionen gearbeitet. Gibt es etwas, was dagegen spricht, bzw. nicht so optimal ist?
Ich denke, ich werde nicht komplett auf Funktionen verzichten. Um die Parameter beim Funktionsaufruf zu übergeben, sind es einfach zu viele (vor allem bei sehr vielen ineinander verschachtelten Funktionen). Die Paramater als global zu definieren ist wie gesagt zu umständlich.
Gibt es keine andere Möglichkeit?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 20.09.2009, 15:22     Titel:
  Antworten mit Zitat      
Hallo,

Es ist sicher eine gute Idee, mit Funktionen zu arbeiten. Beim Arbeiten mit Skripten besteht die Gefahr, dass man sich (evtl. auch unabsichtlich) Variablen überschreibt.
Zum Übergeben von Parametern würden sich, wie von dir ja auch schon angesprochen, Strukturen eignen (mit . Notation).
Eine weitere Alternative wären .mat - Dateien. Um das ständige Laden zu vermeiden, dann statische ("persistent") Variablen verwenden. Da muss man aber aufpassen, wenn die Parameter später upgedatet werden sollen.
Anmerkung: das mit den geschweiften Klammern sind keine Strukturen, sondern Zellarrays.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Duvodas
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 26.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.09.2009, 12:42     Titel:
  Antworten mit Zitat      
Dann werde ich nun erstmal mit einer Funktion arbeiten, die eine Struktur mit allen in meinem Programm enthaltenen Parametern enthält. Diese Funktion werde ich dann in allen Funktionen meines Programms aufrufen und die Parameter stehen mir dadurch dort zur Verfügung.
Ich mag es einfach nicht, wenn in einem größeren Programm Parameter einfach als Zahlen eingesetzt werden. Ein übersichtliches File mit allen Werten ist viel praktischer.

Vielen Dank für die Hilfe!

Falls dennoch jemand eine andere Möglichkeit kennt, her damit Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



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.