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

Schleifenvariable in Variablennamen integrieren

 

Noc
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 01.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.09.2010, 17:02     Titel: Schleifenvariable in Variablennamen integrieren
  Antworten mit Zitat      
Hallo zusammen.
Mein Problem ist, dass ich die Laufvariable einer for-Schleife gerne in den Namen einer darin definierten Variablen einbauen will.
Leider komm ich da mit meinen sehr rudimentären Matlab Kenntnissen nicht mehr weiter.
Vom Prinzip her soll das folgenderma0en aussehen:
Code:
%
A=1:2;

for m=A ;
   
    k_endung(inklusive m) = m*....

end;    
 

Ein weiteres Problem ist, dass ich eine andere Variable gerne in den Dateinamen mit einbauen will. Auch daran scheiter ich leider.
Beides sind mit Sicherheit lösbare Probleme, nur komme ich momentan mit Google und Forensuche nicht weiter.

Danke schonmal für eure Mühen.

Grüße Noc
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.09.2010, 18:07     Titel:
  Antworten mit Zitat      
Hallo,

ich würde davon abraten und lieber ein Cell Array verwenden. Das ist deutlich übersichtlicher. Wenns doch sein muss, dann mit EVAL.

Zum Dateinamen: etwas konkreter müsstest du schon werden. Grundsätzlich so:
Code:
dateiname = ['Teil 1' variable 'Teil 2']


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

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 01.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.09.2010, 20:12     Titel:
  Antworten mit Zitat      
Ok nach bisschen hilfen lesen, glaube ich zumindest das Prinzip verstanden zu haben. Ich erstelle vor der Schleife eine Cell(M N)
schreibe in der Schleife die einzelnen Einträge, ist mir noch nicht ganz klar wie... und kann danach auf die einzelnen Variabeln als Einträge der Cell abrufen.
Mein Beispiel vorher war etwas stark vereinfacht.
Genauer brauche ich 2 for Schleifen würde nachher gerne Variablen(Matrizen)
k00,k01 ..... kmn haben.
Also sowas wie :
Code:
%
A=1:2;
B=1:2;
for m=A ;
   for n=B
    k_mn= Funktion von m,n
 end;
end;  

Cell(1,1) = ...
 


Zu den Dateinamen in einfacher Form bekomme ich das nun hin.
Code:

Dateiname = ['Kante_1µm_' phi_str]; print( gcf, '-dpng', Dateiname );

 


Hätte aber gerne etwas wie


Code:

Dateiname = ['Kante_' , lambda_str , 'µm_' , phi_str , '°']; print( gcf, '-dpng', Dateiname );

 


Nur endet das bei mir in Unexpected MATLAB expression.

Danke für die prompte Antwort !

Gruß Noc
Private Nachricht senden Benutzer-Profile anzeigen
 
eupho
Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 01.09.2010, 20:30     Titel:
  Antworten mit Zitat      
Code:
Dateiname = ['Kante_' lambda_str 'µm_' phi_str '°'];


Ohne Kommata dazwischen..

Eine Cell sprichst du mit geschweiften Klammern an, beispielsweise:

Code:
for m=A
  for n=B
    k{m,n} = Die Funktion %, die dann in die Zeile m und Spalte n der Cell geschrieben wird
  end
end
Private Nachricht senden Benutzer-Profile anzeigen
 
Noc
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 01.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.09.2010, 21:28     Titel:
  Antworten mit Zitat      
Code:
A=1:2;
B=1:2;
k=1;
Periode_x=1;
Periode_y=1;
x=0.1:pi/100:1;
y=0.1:pi/100:1;
x_ones=ones(1,length(y));
y_ones=ones(1,length(x));
x_arr=x_ones'*x;
y_arr=y'*y_ones;
for m=A ;
   for n=B
    k{m,n}= sin(k*sqrt((x_arr-m*Periode_x).^2+(y_arr-n*Periode_y).^2))./sqrt((x_arr-m*Periode_x).^2+(y_arr-n*Periode_y).^2);
 end;
end;  
 


??? Cell contents assignment to a non-cell array object.

Error in ==> Schleife at 14
k{m,n}= sin(k ....

dürfen in einer Cell nicht beliebige Einträge stehen ?
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 01.09.2010, 23:50     Titel:
  Antworten mit Zitat      
Hallo,

du musst Matlab sagen, dass k eine Cell ist! Ich habe mal dein Beispiel funktionsfähig gemacht und das k in der Schleife durch die Variable "results" ersetzt (weil du k schon mit 1 deklariert hasst). Die Deklaration des Cell Arrays ist in dem Falle results = cell(2,2).



Code:

A=1:2;
B=1:2;
k=1;
Periode_x=1;
Periode_y=1;
x=0.1:pi/100:1;
y=0.1:pi/100:1;
x_ones=ones(1,length(y));
y_ones=ones(1,length(x));
x_arr=x_ones'*x;
y_arr=y'*y_ones;

results = cell(2,2); % mit einer vordefinierten Größe läuft die for Schleife schneller

for m=A
   for n=B
    results{m,n} = sin(k*sqrt((x_arr-m*Periode_x).^2+(y_arr-n*Periode_y).^2))./sqrt((x_arr-m*Periode_x).^2+(y_arr-n*Periode_y).^2);
 end
end
 


ps: Semikolon nach For, If, While, end... sind unnötig.

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
Noc
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 01.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.09.2010, 12:51     Titel:
  Antworten mit Zitat      
Wunderbar damit klappt auch das.
Leider tritt schon das nächste Problem auf.
Ich würde gerne alle Einträge der Cell aufsummieren.
Nur endet das in Function 'sum' is not defined for values of class 'cell'.
Damit ist das hier wohl leider ein Paradebeispiel dafür, dass man von Anfang an der kompletten Code posten sollte.
Aber grundsätzlich sollte das Aufsummieren doch möglich sein oder ?

Grüße Noc
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

du hast nun in jeder Zelle einen Vektor stehen. Wie soll die Summe errechnet werden?

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

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 01.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.09.2010, 13:38     Titel:
  Antworten mit Zitat      
k_11+k_12+k_21+k_22 ... k_mn

Hoffe das reicht dir als Antwort.


Grüße Noc
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 02.09.2010, 14:17     Titel:
  Antworten mit Zitat      
Hallo,

fuer die Summe aus ALLEN Zahlen innerhalb der Cell:

Code:

Summe = sum(sum(cell2mat(results)));
 


Wenn du die Summe in jeder Zelle einzeln moechtest pack es mit in die Schleife:

Code:

Summe(m,n) = sum(sum(results{m,n}));
 


MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
Noc
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 01.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.09.2010, 19:00     Titel:
  Antworten mit Zitat      
So endlich wieder ein wenig Zeit gefunden...
Also beide Varianten machen nicht das was ich gerne hätte. Die results(m,n)
bestehen ja pro Eintrag aus einer Matrix deren Größe durch mein definiertes x,y-Gitter bestimmt ist.
Diese Einträge würde ich gerne aufsummieren. Sprich als Ergebnis der Summation sollte einer Matrix der gleichen Dimension herauskommen.
Mit der einen Variante hier ende ich bei einer mxn Matrix mit der anderen mit einem Skalar.
Hoffe ihr versteht jetzt was ich meine.

Grüße Noc
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 02.09.2010, 19:10     Titel:
  Antworten mit Zitat      
Hallo,

also ich verstehe nicht was du willlst.

Erst schreibst du "Diese Einträge würde ich gerne aufsummieren" --> d.h. du willst in dem Beispiel von oben eine 2x2 Matrix als Ergebnis (das macht mein 2. Beispiel).

Dann schreibst du "Sprich als Ergebnis der Summation sollte einer Matrix der gleichen Dimension herauskommen.", welche gleiche Dimension?

Am besten du erstellt mal eine kleines Beispiel (Matrix) und zeigst daran wie du es gerne haben möchtest bzw. was raus kommen soll.

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
Noc
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 01.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.09.2010, 19:32     Titel:
  Antworten mit Zitat      
Code:
A=1:2;
B=1:2;
k=1;
Periode_x=1;
Periode_y=1;
x= 0.1 :1/10 : 1;
y= 0.1 :1/10 : 1;
x_ones=ones(1,length(y));
y_ones=ones(1,length(x));
x_arr=x_ones'*x;
y_arr=y'*y_ones;

results = cell(2,2); % mit einer vordefinierten Größe läuft die for Schleife schneller

for m=A
   for n=B
    results{m,n} = sin(k*sqrt((x_arr-m*Periode_x).^2+(y_arr-n*Periode_y).^2))./sqrt((x_arr-m*Periode_x).^2+(y_arr-n*Periode_y).^2);
 end
end


Die oben zitierte Schleife produziert für jeden Eintrag der Cell eine 10x10 Matrix. Sowas wie

results(1,1)=[Wert bei x=0.1&y=0.1, Wert bei x=0.2&y=0.1 ..... ;Wert bei x=0.1&y=0.2, Wert bei x=0.2&y=0.2 .... , ...]

für die anderen 3 Einträge der Cell jeweils gleich große Matrizen. Diese 4 Matrizen würde ich gerne elementweise aufsummieren

Gruß Noc
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 02.09.2010, 19:53     Titel:
  Antworten mit Zitat      
Hallo,

ja und genau das macht mein 2. Beispiel!

Code:

Summe(m,n) = sum(sum(results{m,n}));
 


Im kompletten Code wäre es dann folgendermassen:

Code:

A=1:2;
B=1:2;
k=1;
Periode_x=1;
Periode_y=1;
x= 0.1 :1/10 : 1;
y= 0.1 :1/10 : 1;
x_ones=ones(1,length(y));
y_ones=ones(1,length(x));
x_arr=x_ones'*x;
y_arr=y'*y_ones;

results = cell(2,2); % mit einer vordefinierten Größe läuft die for Schleife schneller
Summe = zeros(2,2);

for m=A
   for n=B
    results{m,n} = sin(k*sqrt((x_arr-m*Periode_x).^2+(y_arr-n*Periode_y).^2))./sqrt((x_arr-m*Periode_x).^2+(y_arr-n*Periode_y).^2);
    Summe(m,n) = sum(sum(results{m,n}));
 end
end
 


Summe ist eine 2x2 Matrix mit jeweils der Summe aller Elemente innerhalb einer Zelle.

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
Noc
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 01.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.09.2010, 20:14     Titel:
  Antworten mit Zitat      
Ok ich befürchte ich drücke mich immer noch nicht deutlich genug aus.
Ich will nicht die Elemente innerhalb eines Cell Eintrags summieren.

Sondern die Elemente eines Cell Eintrags mit denen der anderen summiert werden. Wenn meine Cell = [c1 c2;c3 c4] mit den Einträgen

c1=[a11 a12;a21 a22] c2 =[b11 b12;b21 b22]
c3=[d11 d12;d21 d22] c4 =[e11 e12;e21 e22]

ist, sollte die Summe lauten:

Summe = [a11+b11+d11+e11 a12+b12+d12+e12 ; a21+b21+d21+e21 a22+b22+d22+e22 ]

und nicht

Summe = [a11+a12+a21+a22 b11+b12+b21+b22; d11+d12+d21+d22 e11+e12+e21+e22]

Gruß Noc
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 - 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.