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

Array mit Variablen an bestimmten Positionen definieren

 

michi342
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 25.02.17
Wohnort: ---
Version: 2016b
     Beitrag Verfasst am: 25.02.2017, 15:42     Titel: Array mit Variablen an bestimmten Positionen definieren
  Antworten mit Zitat      
Hallo zusammen,
ich möchte einen Array erzeugen, der je nach den definierten Zahlen diese entsprechend an die Position schreibt.
Also wenn b_1, b_2, b_5 und b_7 definiert sind, soll am Ende ein Array = [1 2 0 0 3 0 4] erzeugt werden.

Code:

b_1 =1;
b_2= 2;
b_5 = 3;
b_7 = 4;
Array=[0 0 0 0 0 0 0 ];
for i=1:7
Array(i)=  eval(['b_' num2str(i) ]);
end
 


Leider weiß ich nicht mehr weiter, wie ich das Problem lösen soll.
Danke für die Hilfe
Viele Grüße
Michi
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: 25.02.2017, 15:58     Titel:
  Antworten mit Zitat      
Hallo,

die Lösung ist, keine dynamischen Variablennamen zu verwenden.
Erstelle einen Vektor, eine Matrix, oder ein Cell Array von den b-Werten, und du wirst dieses Problem gar nicht erst haben und dich vor allem auch nicht mit eval herumschlagen müssen.

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

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 25.02.17
Wohnort: ---
Version: 2016b
     Beitrag Verfasst am: 25.02.2017, 17:18     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für die Antwort. Die Anzahl der Variablen hängt wiederrum von einem Ursprungsparameter ab. Dieser soll vorgeben, wie fein eine Gruppierung von Messwerten in einem Diagramm sein soll. Wie genau muss ich denn Vektor definieren bzw. so das er von der Aufteilung abhängig ist? Die erste und letzte Zeile würde ja z.B. nur auf die Aufteilung gleich 10 zu treffen.

Code:

syms b_0 b_1 b_2 b_3 b_4 b_5 b_6 b_7 b_8 b_9

        for i=1:Aufteilung
            eval(['A_' num2str(i) ' = find((i*Schrittweite<Area)&((i+1)*Schrittweite>Area))']);
        eval(['b_' num2str(i) ' = size(A_' num2str(i) ',1)']) ;
        end

         Array = [b_0;b_1;b_2;b_3;b_4;b_5;b_6;b_7;b_8;b_9]


Grüße,
Michi
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: 25.02.2017, 18:41     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Die Anzahl der Variablen hängt wiederrum von einem Ursprungsparameter ab.

Noch ein Grund, warum es besser ist, mit einer der genannten Alternativen statt durchgezählten Variablen zu arbeiten.

Zitat:
Wie genau muss ich denn Vektor definieren bzw. so das er von der Aufteilung abhängig ist?

Beispielsweise
Code:


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

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 25.02.17
Wohnort: ---
Version: 2016b
     Beitrag Verfasst am: 26.02.2017, 11:27     Titel:
  Antworten mit Zitat      
Hallo,

und wie müsste ich das machen, das er mir die b Werte aus dem eval Befehl nach und nach in den Vektor schreibt?

Grüße
Michi
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: 26.02.2017, 18:32     Titel:
  Antworten mit Zitat      
Hallo,

warum bestehst du auf eval?
Was auch immer in deinem Beispielcode gemacht wird, es geht ohne eval viel einfacher.

Wenn ich das richtig lese, würde ich sagen:
Code:
b(i) = sum(i*Schrittweite<Area)&((i+1)*Schrittweite>Area))


Das sieht dann auch nochmal so aus, als ob es mit dem discretize-Befehl einfacher ginge.

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

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 25.02.17
Wohnort: ---
Version: 2016b
     Beitrag Verfasst am: 27.02.2017, 11:38     Titel:
  Antworten mit Zitat      
Hallo,

ich habe den eval Befehl verwendet, da ich am Anfang gedacht habe mit dem Ansatz das zu lösen. Mein Ursprünglicher Code hat dabei so gelautet:

Code:
        A1 = find(Area>(9*Schrittweite));
         [A,n1] = size(A1);
         B1 = find((Area>(8*Schrittweite))&(Area<(9*Schrittweite)));
         [B,n2] = size(B1);
         C1 = find((Area>(7*Schrittweite))&(Area<(8*Schrittweite)));
         [C,n3] = size(C1);
            D1 = find((Area>6*Schrittweite)&(Area<(7*Schrittweite)));
           [D,n4] = size(D1);
            E1 = find((Area>5*Schrittweite)&(Area<6*Schrittweite));
           [E,n5] = size(E1);
           F1 = find((Area>4*Schrittweite)&(Area<5*Schrittweite));
           [F,n6] = size(F1);
           G1 = find((Area>3*Schrittweite)&(Area<4*Schrittweite));
          [G,n7] = size(G1);
           H1 = find((Area>2*Schrittweite)&(Area<3*Schrittweite));
          [H,n8] = size(H1);
           I1 = find((Area>Schrittweite)&(Area<2*Schrittweite));
           [I,n9] = size(I1);
           J1 = find((Area>0)&(Area<Schrittweite));
           [J,n10] = size(J1);
           Array = [J;I;H;G;F;E;D;C;B;A];

% neuer ersetzender Code
for i=1:Aufteilung
    eval(['A_' num2str(i) ' = find((i*Schrittweite<Area)&((i+1)*Schrittweite>Area))']);
    eval(['b_' num2str(i) ' = size(A_' num2str(i) ',1)']) ;
end
 


Es sollten die Werte eines Arrays (Area) auf einen bestimmten Wertebereich untersucht werden. Anschließend soll die Anzahl der gefundenen Stellen bei denen die Bedingung zutrifft in einen neuen Array geschrieben werden. Das Ganze soll für unterschiedliche Bereiche nach und nach durchgeführt und am Ende in einem Diagramm geplotet werden.
Wie fein der Bereich unterteilt werden soll, soll von einer weiteren Konstante (Aufteilung) abhängen.
Mir fehlt der letzte Schritt, bei dem die Anzahl der gefundenen Werten von den Bereichen in einem Array geschrieben werden soll.
Ich hoffe es ist jetzt klarer was ich für Probleme habe.
Bei dem Sum Befehl wird ja die Anzahl der gefundenen Stellen verfälscht.

Grüße
Michi
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: 27.02.2017, 17:18     Titel:
  Antworten mit Zitat      
Hallo,

inwiefern weichen die Ergebnisse mit sum denn von den erwarteten ab?
Wenn du mit find die Indizes suchst und sie dann mit size zählst, sollte doch an sich das gleiche herauskommen?

Selbst wenn dem nicht so ist, kannst du immer noch die for-Schleife wie von mir vorgeschlagen umsetzen, nur eben mit find und size.

Direkter dürfte es wie gesagt mit discretize gehen.

Als Problem sehe ich in erster Linie die Verwendung durchnummerierter Variablennamen und die Verwendung von eval.

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

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 25.02.17
Wohnort: ---
Version: 2016b
     Beitrag Verfasst am: 03.03.2017, 18:04     Titel:
  Antworten mit Zitat      
Hallo,

ich hab den Fehler gefunden.

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