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

Variable Name links einer Gleichung

 

MatlabErlerner
Forum-Century

Forum-Century


Beiträge: 104
Anmeldedatum: 26.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.07.2015, 14:39     Titel: Variable Name links einer Gleichung
  Antworten mit Zitat      
Hallo zusammen,

ich habe folgendes Problem:
Ich möchte gerne folgende axes auf einer Gui einfügen:

Code:
h1 = axes(...
'Units','normalized',...
'Position',[.36,.65,.6,.28],...
'PlotBoxAspectRatio',[1 0.207417582417582 0.207417582417582],...
'PlotBoxAspectRatioMode',get(0,'defaultaxesPlotBoxAspectRatioMode'),...
'SortMethod','childorder',...
'Tag','figure1',...
'ParentMode','manual',...
'Visible','off',...
'CreateFcn', {@local_CreateFcn, blanks(0), appdata} );

h2 = axes(...
'Units','normalized',...
'Position',[.36,.25,.6,.28],...
'PlotBoxAspectRatio',[1 0.205761316872428 0.205761316872428],...
'PlotBoxAspectRatioMode',get(0,'defaultaxesPlotBoxAspectRatioMode'),...
'SortMethod','childorder',...
'Tag','figure2',...
'ParentMode','manual',...
'Visible','off',...
'CreateFcn', {@local_CreateFcn, blanks(0), appdata} );


es ändert sich also lediglich der Abstand auf der y-Achse und der Tag der beiden Objekte. Ansonsten sind diese gleich.

Jetzt würde ich das ganze gerne in eine for-Schleife packen. Dazu habe ich mir folgendes überlegt:
Code:
abstand = 0;
for i = 1:1:2
    % Beginn Initialisierung
    handlename = sprintf('h%g',i);
    % Ende Initialisierung
   
    handlename = axes(...
    'Units','normalized',...
    'Position',[.36,.65-abstand,.6,.28],...
    'PlotBoxAspectRatio',[1 0.207417582417582 0.207417582417582],...
    'PlotBoxAspectRatioMode',get(0,'defaultaxesPlotBoxAspectRatioMode'),...
    'SortMethod','childorder',...
    'Tag',sprintf('figure%g',i),...
    'ParentMode','manual',...
    'Visible','off',...
    'CreateFcn', {@local_CreateFcn, blanks(0), appdata} );
   
    abstand = abstand+0.4;
end


Jetzt ist mein Problem, dass sich der handlename, sprich h1 und h2, nicht so einfach zu erstellen sind. Wie bekomme ich es hin, dass LINKS der 'Gleichung' sich der Name ändert, sprich mit der Schleife 'mitläuft'?

Grüße
Max
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: 22.07.2015, 14:46     Titel:
  Antworten mit Zitat      
einen index sollte man als index benutzen und nicht im namen verstecken.
grüße
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
MatlabErlerner
Themenstarter

Forum-Century

Forum-Century


Beiträge: 104
Anmeldedatum: 26.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.07.2015, 14:50     Titel:
  Antworten mit Zitat      
Hallo,
danke für die schnelle Antwort. Wie sieht also deine Lösung aus? Sorry, bin noch relativ neu in Matlab und bekomme es irgendwie nicht hin.

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
MatlabErlerner
Themenstarter

Forum-Century

Forum-Century


Beiträge: 104
Anmeldedatum: 26.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.07.2015, 14:54     Titel:
  Antworten mit Zitat      
h(i) = axes ....

funktioniert z.B. nicht wie gewünscht, denn wenn man sich das ganze dann im Workspace anschaut, sieht man, dass Matlab nicht wie gewünscht :
h1 1x1 Axes
h2 1x1 Axes
erzeugt, sondern:
h 1x2 Axes

Sprich es werden in h so alle axes gespeichert. Genau das will ich ja eben nicht!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

Zitat:
Sprich es werden in h so alle axes gespeichert. Genau das will ich ja eben nicht!

... und was genau spricht dagegen? Du kannst ja per Indizierung trotzdem wieder auf die einzelnen Elemente zugreifen.

Grüße,
Harald
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: 22.07.2015, 16:23     Titel:
  Antworten mit Zitat      
Hallo MatlabErlerner,

Wenn man komplizierte Methoden verwendet, um Variablen-Namen dynamisch während der Laufzeit zu erzeugen, benötigt man noch kompliziertere um später darauf zuzugreifen. Zudem bremsen dynamisch erzeugte Variablen Matlab ganz massiv aus - das kann ein Faktor 100 in der Laufzeit sein.

Bei der Programmierung ist eine geschickte Wahl der Representation der Daten sehr wichtig. Daten gleichen Typs, die gemeinsame Eigenschaften haben, sind in einem Array einfach wirklich gut aufgehoben. Man kann das dann sehr leicht erweitern indem man einfach die Schleife länger laufen lässt. Und später im Programm muss man sich nicht merken, wieviele Objekte erzeugt worden sind, sondern kann dies einfach mit numel herausfinden.

Deshalb findet man diesen Punkt auch in der Matlab-FAQ:
http://matlab.wikia.com/wiki/FAQ#Ho......2C....2CA10_in_a_loop.3F
Das Thema wird jede Woche mehrfach im Forum besprochen und immer wieder darauf hingewiesen, dass das Verstecken von Indices im Namen der Variablen ein schlechter Programmierstil ist. Auch wenn das in den ersten Minuten irgendwelche Vorteile zu haben scheint, werden die Schwierigkeiten nicht lange auf sich warten lassen. Also:

Nicht machen!

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
MatlabErlerner
Themenstarter

Forum-Century

Forum-Century


Beiträge: 104
Anmeldedatum: 26.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.07.2015, 11:25     Titel:
  Antworten mit Zitat      
Vielen Dank für eure sehr hilfreichen Antworten. Ich habe es beherzigt und ihr habt beide absolut Recht. Was ich da vorhatte, war großer Mumpitz.

Grüße
Max
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 - 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.