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

Dynamische Variablennamenzuweisung

 

KaiS
Forum-Century

Forum-Century


Beiträge: 102
Anmeldedatum: 19.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.05.2011, 15:30     Titel: Dynamische Variablennamenzuweisung
  Antworten mit Zitat      
Hallo zusammen,

ich habe eine Simulinkstruktur vorliegen, in der ich den Input durch einen "To Workspace"-Block im Workspace speichere, sodass ich darauf zugreifen kann.

Nun möchte ich automatisiert 4 Parametervariationen durchführen, bei denen ich in meinem .m-File nur die Parameter eingebe und mir Matlab dann automatisch die 4 Simulationen durchfährt.
Nun habe ich das Problem, dass ja mein Input, den ich mir im Workspace extra herausgeben lasse (wird im Code auch nur input genannt), sich mit jeder Variation ändert. Jede dieser Änderungen möchte ich allerdings mitverfolgen können, sodass ich am liebsten mit jeder Simulation/Schleife meinem Input einen neuen Namen geben will.

Allerdings stehe ich gerade absolut auf dem Schlauch, wie und ob das überhaupt geht.

Im Folgenden mein Code:

Code:

disp('**************** Parametervariation ****************')

sprintf('Anzahl der Variationsschleifen: %d', n_simrun)
run = 0;
tic_var = tic;


path(path,pwd)

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Schleife: Test1
    for a = 1:length(var.test1)
        par.test1 = var.test1(a);
       
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Schleife: Test2
        for b = 1:length(var.test2)
            par.test2 = var.test2(b);
           
           
            run = run + 1;
            sprintf('Aktueller Durchlauf: %d von %d', run, n_simrun)


                           
            %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Festlegung desTestdurchlaufs
            if looptest % 1 = Teste saubere Abarbeitung der Variationsschleife
            cycle.time = 0.5;
            set_param(ModelName,'SimulationMode','normal')
            end
                                     
            %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Simulation

            sim(ModelName);
            % Position, an der I_pack > ILad --> weitere Matrixeinträge
            % löschen
            pos = (find(input(:,1)>=-ILad_max)); %I_pack = input(:,1)
            min_pos = min(pos);
            input_cor_i =  input_cor_i(1:min_pos,:);
           
            figure(2)
            hold on;
            for i = 1:n_simrun  
            switch i
                case 1
                    plot( input_cor_i(:,1), input_cor_i(:,2),'b-');
                case 2
                    plot( input_cor_i(:,1), input_cor_i(:,2),'m-');
                case 3
                    plot( input_cor_i(:,1), input_cor_i(:,2),'g-');
                case 4
                    plot( input_cor_i, input_cor_i,'c-');
            end
           
            xlabel('I [A]')
            ylabel('U_{cell} [V]')a
            grid on
            box on
            ylim([0 5]);
                           
            %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Speichern
            SaveFileName = sprintf('test1_%d__test2_%d',par.test1,par.test2);
            save([PathName '\' SimName '\' SaveFileName '.mat'],'LogData','par','ini');
            FileName{run} = SaveFileName;
                           
            parvar.test1{run} = par.test1;
            parvar.test2{run} = par.test2;
         end
                     
      end
end
legend('I','II','III','IV')


    % Speichern
        save([PathName '\' SimName '\' 'var_temp_SOC.mat'], 'n_simrun','FileName','parvar');

        clear Postprocessing_Time Simulation_Time tic_sim c j f k SaveFileName n_runs FileName run SimName ModelName;

   
 
Gesamtzeit = toc(tic_var)
 


Mit diesem Code kann ich einen Plot generieren, der auch richtig sein müsste. Problem ist aber, dass alle 4 Plots in der selben Farbe (cyan) sind, obwohl die ja eig jeweils farblich unterschieden werden sollten. Deswegen bin ich auf die Idee gekommen, meinen Input nach dem Motto Input_1, Input_2 usw. zu benennen, damit ich die Farben fehlerlos zuweisen kann.
Falls jmd noch einen anderen Weg kennt, nur zu =)

Der Ort, an dem
Code:

            for i = 1:n_simrun  
            switch i
                case 1
                    plot( input_cor_i(:,1), input_cor_i(:,2),'b-');
                case 2
                    plot( input_cor_i(:,1), input_cor_i(:,2),'m-');
                case 3
                    plot( input_cor_i(:,1), input_cor_i(:,2),'g-');
                case 4
                    plot( input_cor_i, input_cor_i,'c-');
            end
 

steht, müsste denke ich auch geändert werden. Ziel ist halt, dass ich eben nach jeder einzelnen Simulation einen Plot rausgebe. Damit könnte ich auch das Problem umgehen, 4 verschiedene Inputs zu haben, die ich am Schluss alle zusammen plotte.

Würde mich über Vorschläge freuen! Hauptsache am Ende habe ich die 4 Plots mit den 4 verschiedenen Farben!

Danke!

LG
kai

P.S.: Kann sein, dass ich mich ein bisl kompliziert ausgedrückt habe.. Bei Unklarheiten also bitte einfach nochmal nachfragen!
Private Nachricht senden Benutzer-Profile anzeigen


Baumann
Forum-Anfänger

Forum-Anfänger



Beiträge: 14
Anmeldedatum: 25.09.08
Wohnort: Braunschweig
Version: 7.12.0.635 (2011a)
     Beitrag Verfasst am: 25.05.2011, 16:15     Titel:
  Antworten mit Zitat      
Ich glaube da hatte jemand schon einmal ein ähnliches Problem.

http://www.gomatlab.de/dynamischer-.....-for-schleife-t15465.html

Vielleicht hilft Dir das weiter.
Private Nachricht senden Benutzer-Profile anzeigen
 
KaiS
Themenstarter

Forum-Century

Forum-Century


Beiträge: 102
Anmeldedatum: 19.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.05.2011, 16:39     Titel:
  Antworten mit Zitat      
Danke für den Tipp! Ich habe den Code von Ajax eingefügt:
Code:


for i = 1:5

     str = num2str(i);

     B = load(['B' str '.mat']);

     struktur.(genvarname(str)) = B;

end

 


Nun habe ich auch die Aufteilung in 4 Matrizen. Allerdings sind alle 4 Matrizen gleich, d.h. eine Matrix überschreibt wohl die anderen 3 zusätzlich. Weiß jmd, woran das liegen könnte?

Danke!
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.