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

"Matrixadressen" zur Übersicht mit Namen ersetzen

 

japamada
Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 17.12.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.12.2018, 16:13     Titel: "Matrixadressen" zur Übersicht mit Namen ersetzen
  Antworten mit Zitat      
Hi,

ich muss für meine Bachelorarbeit Erzeugte Leistung aus Photovoltaik und Verbrauch vergleichen. Da das sehr viele Daten sind, habe ich mir zunächst ein Script gebastelt um das ganze zu testen, da ich Fehler so einfacher finden kann.

In meinem Script habe ich eine Matrix der Größe 24*30 (genannt "Testmatrix"), deren Einträge während einer for Schleife mit Werten gefüllt werden sollen.
Das entspricht in diesem Test 5 Gemeinden die verglichen werden sollen, für jede Gemeinde benötige ich 6 Spalten.

Um nicht jedes mal die einzelnen Einträge der Matrix folgendermaßen zu adressieren (Beispielausschnitt):

Code:
if Testmatrix(k,j+3) >= Entladewirkungsgrad*Entladung_maximal
     vector3 = Entladung_maximal;
     Testmatrix(k,j+4) = Entladewirkungsgrad*vector3;
     Testmatrix(k,j+3) = Testmatrix(k,j+3) - vector3;


möchte ich den einzelnen Spalten der Matrix in meinem Script Namen geben und mit diesen auf die Einträge zugreifen, damit das ganze übersichtlicher wird.

Vorgestellt hatte ich mir das so:

Code:
for j = 1:6:30
    for k = 1:24
        PV_Produktion = Testmatrix(k,j);
        Last = Testmatrix(k,j+1);
        PV_Ueberschuss = Testmatrix(k,j+2);
        Speicherstand = Testmatrix(k,j+3);
        P_aus = Testmatrix(k,j+4);
        P_defizit = Testmatrix(k,j+5);


Auch das ist nur ein Ausschnitt aus dem Script, ich habe beide Scripte (wie es funktioniert, mir aber zu unübersichtlich ist, und wie ich es gerne hätte, aber nicht funktioniert) angehängt, außerdem zwei Matrizen, eine mit den PV-Daten (Wertematrix1) und eine mit den Last-Daten (Wertematrix2) und ein weiteres Script in dem Werte angepasst werden können und die Matrizen geladen werden.

Wenn das zu undurchschaubar ist, kann ich das gut nachvollziehen, mir fällt es allerdings etwas schwer, das ganze zu erklären.
Aber vielleicht kann ja trotzdem einer von euch weiterhelfen, würde mich freuen! Smile

Test_Werte_zur_Berechnung.m
 Beschreibung:
benötigt zum asuführen des scripts

Download
 Dateiname:  Test_Werte_zur_Berechnung.m
 Dateigröße:  130 Bytes
 Heruntergeladen:  324 mal
Wertematrix2.mat
 Beschreibung:
benötigt zum asuführen des scripts

Download
 Dateiname:  Wertematrix2.mat
 Dateigröße:  306 Bytes
 Heruntergeladen:  314 mal
Wertematrix1.mat
 Beschreibung:
benötigt zum asuführen des scripts

Download
 Dateiname:  Wertematrix1.mat
 Dateigröße:  306 Bytes
 Heruntergeladen:  297 mal
Test_Berechnung_als_eine_for_schleife.m
 Beschreibung:
so funktioniert es

Download
 Dateiname:  Test_Berechnung_als_eine_for_schleife.m
 Dateigröße:  3.99 KB
 Heruntergeladen:  302 mal
Test_Berechnung_als_eine_for_schleife2.m
 Beschreibung:
So hätte ich es gerne

Download
 Dateiname:  Test_Berechnung_als_eine_for_schleife2.m
 Dateigröße:  3.89 KB
 Heruntergeladen:  324 mal
Private Nachricht senden Benutzer-Profile anzeigen


japamada
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 17.12.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.12.2018, 11:28     Titel: hier einmal das script so wie es funktioniert
  Antworten mit Zitat      
das ist das script, so wie es funktioniert. Als Änderung wäre es wie oben geschrieben schön, wenn ich alle Testmatrix(x,y) durch Namen ersetzen könnte.

Code:
clear

Testmatrix = zeros(24,30);

P_benoetigt = zeros(1,5);

Test_Werte_zur_Berechnung;

i = 1;
for j = 1:6:30
    Testmatrix(:,j) = Wertematrix1(:,i);
    Testmatrix(:,j+1) = Wertematrix2(:,i);
    if i < 5
       i = i+1;
    end
   
    for k = 1:24
        if Testmatrix(k,j) > Testmatrix(k,j+1)
           vector1 = Testmatrix(k,j) - Testmatrix(k,j+1);
           Testmatrix(k,j+2) = vector1;
        else
           vector1 = 0;
           Testmatrix(k,j+2) = vector1;
        end
       
        if k == 1
          Testmatrix(k,j+3) = Ladewirkungsgrad*Testmatrix(k,j+2);
        else
        vector2 = Ladewirkungsgrad*Testmatrix(k,j+2) + Testmatrix(k-1,j+3);
        Testmatrix(k,j+3) = vector2;
            if Testmatrix(k,j+2) > 0                                                                                                                                                            
               vector3 = 0;                                                                                                                                                                    
               Testmatrix(k,j+3+1) = vector3;                                                                                                                                                    
            elseif Testmatrix(k,j+2) == 0
                if Testmatrix(k,j+1) - Testmatrix(k,j) >= Entladewirkungsgrad*Entladung_maximal
                   if Testmatrix(k,j+3) >= Entladewirkungsgrad*Entladung_maximal
                      vector3 = Entladung_maximal;
                      Testmatrix(k,j+4) = Entladewirkungsgrad*vector3;
                      Testmatrix(k,j+3) = Testmatrix(k,j+3) - vector3;
                   elseif Testmatrix(k,j+3) < Entladewirkungsgrad*Entladung_maximal
                          vector3 = Testmatrix(k,j+3);
                          Testmatrix(k,j+4) = Entladewirkungsgrad*vector3;
                          Testmatrix(k,j+3) = Testmatrix(k,j+3) - vector3;
                   end
                elseif Testmatrix(k,j+1) - Testmatrix(k,j) < Entladewirkungsgrad*Entladung_maximal                    
                   if Testmatrix(k,j+3) >= Entladewirkungsgrad*Entladung_maximal
                      vector3 = (Testmatrix(k,j+1) - Testmatrix(k,j))/Entladewirkungsgrad;
                      Testmatrix(k,j+4) = vector3;
                      Testmatrix(k,j+3) = Testmatrix(k,j+3) - vector3;
                   elseif Testmatrix(k,j+3) < Entladewirkungsgrad*Entladung_maximal
                       if Testmatrix(k,j+3) >= Testmatrix(k,j+1) - Testmatrix(k,j)    
                          vector3 = (Testmatrix(k,j+1) - Testmatrix(k,j))/Entladewirkungsgrad;
                          Testmatrix(k,j+4) = vector3;
                          Testmatrix(k,j+3) = Testmatrix(k,j+3) - vector3;
                       elseif Testmatrix(k,j+3) < Testmatrix(k,j+1) - Testmatrix(k,j)
                              vector3 = Testmatrix(k,j+3);
                              Testmatrix(k,j+4) = Entladewirkungsgrad*vector3;
                              Testmatrix(k,j+3) = Testmatrix(k,j+3) - vector3;
                       end    
                   end                    
                end                
            end          
        end
       
        if Testmatrix(k,j+2) == 0 && Testmatrix(k,j+4) < (Testmatrix(k,j+1) - Testmatrix(k,j))
           Testmatrix(k,j+5) = Testmatrix(k,j+1) - Testmatrix(k,j) - Testmatrix(k,j+4);
        end
       
    end
    vector4 = sum(Testmatrix(:,j+5));
    P_benoetigt(1,(1/6)*(j+5)) = vector4;
end
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

du könntest statt einer Matrix einen Table verwenden.
Dann hättest du folgende Zugriffsmöglichkeiten:
https://www.mathworks.com/help/matl.....cess-data-in-a-table.html
Entscheidender Vorteil ist, dass du die Spaltennamen verwenden kannst.

Alternativ die Spalten in verschiedene Vektoren anlegen.

Es kann auch hilfreich sein, die Daten für verschiedene Gemeinden zu trennen, z.B. ein Cell Array oder ein Struct Array mit Tables als Inhalt.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
japamada
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 17.12.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.12.2018, 11:52     Titel:
  Antworten mit Zitat      
Hi Harald,

vielen Dank für deine Antwort.
Ich habs mittlerweile auch so lösen können, das Problem war, dass ich den Einträgen der Matrix oben die Namen zugewiesen habe, deren Werte wurden dann im script aber verändert und am Ende werden die Werte in der Matrix nicht aktualisiert Very Happy

Ich werde es aber auch nochmal mit einer Tabelle probieren, also vielen Dank für den Tipp!
Aber erst nach Weihnachten Razz

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