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

Eine Matrix erstellen, die automatisch einen Namen erhält

 

Aurelie
Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 13.02.09
Wohnort: Bonn
Version: ---
     Beitrag Verfasst am: 13.02.2009, 10:44     Titel: Eine Matrix erstellen, die automatisch einen Namen erhält
  Antworten mit Zitat      
Da bin ich nochmal.
Ich automatisiere gerade mein Programm und dabei fallen mir so Kleinigkeiten auf die man noch verbessern kann (ich aber nicht weiß wie):

Ich möchte eine Matrix erstellen, die automatisch einen Namen erhält. Also wenn ich die Hauptfunktion aufrufe und nur sigma übergebe soll in der Funktion selber eine Matrix mit dem Namen: matrix_sigma erstellt werden.

Also sowas wie:

Code:

%Aufrufen
Funktionsname(sigma)

%Funktion selber
matrix_sigma=zeros(10,43);


Danke fürs helfen,
Aurelie
Private Nachricht senden Benutzer-Profile anzeigen


leonidas
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 52
Anmeldedatum: 22.12.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.02.2009, 11:02     Titel:
  Antworten mit Zitat      
hallo! ich denke das Problem ist dabei, daß Du den gewünschten Namen der Funktion zusätzlich übergeben müsstest:
Code:
Funktionsname(sigma, 'sigma')

dann allerdings ist das ganz leicht möglich:
Code:
%in der Fkt mit in1 und in2 als Eingabeparameter
str = sprintf(['matrix_', in2, '=in1']);                %erzeugen des Bezeichners als String, und Zuweisung als String
eval(str);                                    %dieser Befehl führt den String als Matlab-Befehl aus


hoffe das hilft;-)
mfg
leonidas
Private Nachricht senden Benutzer-Profile anzeigen
 
Aurelie
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 13.02.09
Wohnort: Bonn
Version: ---
     Beitrag Verfasst am: 13.02.2009, 11:27     Titel:
  Antworten mit Zitat      
Hallo Leonidas,

Das Problem ist (habe ich wohl nicht direkt gesagt), dass sigma eine Zahl ist, also die Matrix soll dann zum Beispiel mit
Code:
sigma=0.25
matrix_0.25

heißen.

Ich kann ja zum Beispiel dann den Namen folgendermaßen erzeugen:

Code:
str = sprintf(['matrix_', '0.25'])


Aber wie befülle ich dann die Matrix mit dem neuen Namen?

LG
Private Nachricht senden Benutzer-Profile anzeigen
 
leonidas
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 52
Anmeldedatum: 22.12.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.02.2009, 11:46     Titel:
  Antworten mit Zitat      
hallo Aurelie!

ja dann ist es einfacher:

Code:
% Funktionsaufruf
Funktionsname(sigma)

% in der Fkt, mit in1 als Parameter
str1 = sprintf(['matrix_', num2str(in1)])                % damit hast Du jetzt den Namen
str2 = sprintf([str1, '= zeros(10,43)'])                   % jetzt sieht der String wie eine Zuweisung aus: matrix_0,25 = zeros(10,43)
eval(str2);


die Funktion eval() überprüft den übergebenen String, ob er eine gültige Matlab-Anweisung ist; wenn ja dann führt sie diese Befehle aus.
wenn Du zB in er Kommandozeile
Code:
ist das das gleiche wie wenn Du
Code:
eingibst.

so hoffe ich habs diesmal besser verstanden...
mfg
leonidas
Private Nachricht senden Benutzer-Profile anzeigen
 
holyunpiler
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 12.02.09
Wohnort: ---
Version: R2009a
     Beitrag Verfasst am: 13.02.2009, 11:48     Titel:
  Antworten mit Zitat      
Hallo, die Lösung steht eigentlich schon fast da... den Dezimalpunkt der durch 0.25 in den Variablennamen übernommen wird muss man aber noch irgendwie behandeln. Der ist für Strukturen / Objekte resverviert. Versuch doch mal:

Code:

sigma=0.25;
value=12345;
str=['matrix_' strrep(num2str(sigma),'.','dot') '=value'];
eval(str);
 


gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Aurelie
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 13.02.09
Wohnort: Bonn
Version: ---
     Beitrag Verfasst am: 13.02.2009, 11:56     Titel:
  Antworten mit Zitat      
Ja sehr gut Smile

So wollte ich das haben!
Ihr habt mir sehr geholfen!!! Vielen Dank Smile

Aurelie
Private Nachricht senden Benutzer-Profile anzeigen
 
Aurelie
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 13.02.09
Wohnort: Bonn
Version: ---
     Beitrag Verfasst am: 13.02.2009, 12:17     Titel:
  Antworten mit Zitat      
Ich nochmal Smile

Also der Code ist jetzt folgender:
Code:

sigma=0.03;
str=['matrix_' strrep(num2str(sigma),'.','dot') '=zeros(1,2)'];
eval(str)
 


Aber wie kann ich denn jetzt diese Matrix speichern?
Wenn ich
Code:

zum Beispiel nehme, dann hat die Matrix allerdings auch den Namen eval(str),

Aber ich möchte es ja unter diesen Namen den ich unter str gebildet habe die Matrix mit Inhalt abspeichern.

Also in der Funktion passiert dann:

--> Name der Matrix bilden (wie oben zum Beispiel)
-->Mit Werten befüllen (")
-->die Matrix abspeichern, wobei diese den Namen wie unter (1) besitzt. also steht im Workspace: matrix_0dot03 (als Beispiel)

Hoffentlich habt ihr auch hierzu eine Idee Smile

DANKESCHÖN!
Aurelie
Private Nachricht senden Benutzer-Profile anzeigen
 
leonidas
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 52
Anmeldedatum: 22.12.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.02.2009, 13:38     Titel:
  Antworten mit Zitat      
ja, hab ich Wink

schreib den save-Befehl als String in die eval() Fkt rein!

Code:
eval('save(str)')


sollte hinhauen...
lg
leonidas
Private Nachricht senden Benutzer-Profile anzeigen
 
Aurelie
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 13.02.09
Wohnort: Bonn
Version: ---
     Beitrag Verfasst am: 13.02.2009, 14:31     Titel:
  Antworten mit Zitat      
Code:
eval('save(str)')


speichert mir die Variable aber mit dem Namen:

Code:
matrix_0dot03=zeros(1,2).mat


Aber ich möchte ja:

Code:
matrix_0dot03.mat







[/code]
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.02.2009, 14:45     Titel:
  Antworten mit Zitat      
Von hinten durch die Brust ins Auge:
Code:
sigma=0.03;
str=['matrix_' strrep(num2str(sigma),'.','dot') '=zeros(1,2)'];
eval(str)
name = str(1:strfind(str,'=')-1);
save(name, name)
 
leonidas
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 52
Anmeldedatum: 22.12.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.02.2009, 14:46     Titel:
  Antworten mit Zitat      
ja stimmt! Confused
da mußt Du halt nochmal einen String basteln in dem dann nur noch der Name drinsteht und der SaveBefehl...
praktisch wärs wenn Du Dir gleich den Namen in einer Variablen speicherst:

Code:
Variablenname = strrep(num2str(sigma),'.','dot')


dann brauchst nur noch zu schreiben
Code:
eval(['save(', Variablenname, ')'])


mfg Wink
leonidas
Private Nachricht senden Benutzer-Profile anzeigen
 
Aurelie
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 13.02.09
Wohnort: Bonn
Version: ---
     Beitrag Verfasst am: 13.02.2009, 14:55     Titel:
  Antworten mit Zitat      
Super Leute,
jetzt habe ich alles was ich brauche Smile
Leonidas, allerdings funktioniert

Code:
eval(['save(', Variablenname, ')'])


nicht. Aber ist nicht so schlimm ich mache es dann einfach " Von hinten durch die Brust ins Auge" Very Happy


Wünsche euch einen wunderschönen Tag!

Aurelie
Private Nachricht senden Benutzer-Profile anzeigen
 
leonidas
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 52
Anmeldedatum: 22.12.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.02.2009, 16:33     Titel:
  Antworten mit Zitat      
argh, ja da hab ich was vergessen! da fehlen die Apostroph Zeichen um die Variable drum rum, weil ja save einen Sting haben möchte...
schaut dann so aus:

Code:
eval(['save(''', Variablenname, ''')'])


gut, Euch auch schönen Tag, schönes WE!
leonidas
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.