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

alle möglichen Kombinationen in einem Ergebnis darstellen

 

Flow135

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.07.2018, 10:13     Titel: alle möglichen Kombinationen in einem Ergebnis darstellen
  Antworten mit Zitat      
Hallo liebes Forum,

Ich plage mich seit gestern mit einem eigentlich trivialen Problem (zumindest dachte ich das).
Ich habe zwei Vektoren (Intervalle) mit jeweils 26 Einträgen. Nun wird nach einem relativ langen Algorithmus ein Ergebnis berechnet auf Basis dieser Vektoren. Ich möchte, dass dieses Ergebnis alle 26x26 (also 676) Möglichkeiten beinhaltet. Dieses soll dann in einer Heatmap dargestellt werden (das sollte aber funktionieren, sobald das Ergebnis einer 26x26 Matrix entspricht)

Wenn ich nur die Intervalle angebe und dann rechnen lasse, bekomme ich einen 1x26 Ergebnisvektor, sprich er rechnet mir nur jeden Schritt in den Intervallen einmal. Ich will aber, dass er für jeden Einzelschritt in Vektor A jeden der 26 Schritte in Vektor B verwendet und diese dann im Ergebnis als 26x26 Matrix anzeigt.

Ich habs schon mit For-Schleifen versucht, allerdings bin ich noch auf kein Ergebnis gekommen.

Hier noch ein Auszug des Codes:

Unter Punkt 2 lege ich die Intervalle fest, unter Punkt 3 wird dann der Algorithmus aufgerufen, mit dem die Ergebnisse berechnet werden.


Code:

%% 2. Parametrisierung des PV-Speichersystems

% Folgende Größen können angepasst werden

P_year=146; % Jahresstrombedarf in MWh

P_stc=[0*P_year:0.1*P_year:2.5*P_year]; % Nennleistung des PV-Generators in kWp
C_bu=[0*P_year:0.1*P_year:2.5*P_year]; % nutzbare Speicherkapazität des Batteriespeichers in kWh
P_bwr=[0*P_year:0.05*P_year:1.25*P_year]; % Nennleistung des Batteriewechselrichters in kW
p_gfl=0.5; % spezifische Einspeisegrenze in kW/kWp (z.B. 50%-Einspeisebegrenzung des KfW-Programms)

%% 3. Simulation eines PV-Speichersystems mit frühzeitiger und prognosebasierter Batterieladung

% Wahl der Betriebsstrategie
for bs=1:2 % (1: frühzeitig, 2: prognosebasiert)
                   
        [a,e,v,pf,eb,soc]=pvprog(time,p_pv,P_ld,bs,P_stc,C_bu,P_bwr,p_gfl);
   
        % Beschreibung der Ergebnis-Variablen: siehe pvprog.m
   
        % Autarkiegrad (a), Abregelungsverluste (v), Leistungsflüsse (pf),
        % Energiebilanzen (eb) und Ladezustand (soc) je nach Betriebsstrategie
        % speichern
        if bs==1 % frühzeitig
            a_fz=a;
            e_fz=e;
            v_fz=v;
            pf_fz=pf;
            eb_fz=eb;
            soc_fz=soc;
       
        else % prognosebasiert
            a_pb=a;
            e_pb=e;
            v_pb=v;
            pf_pb=pf;
            eb_pb=eb;
            soc_pb=soc;
                   
        end
end



Danke schonmal für eure Zeit und Hilfe.

LG Flow135

[EDITED, Jan, Bitte Code-Umgebung verwenden - Danke!]


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 17.07.2018, 10:40     Titel:
  Antworten mit Zitat      
Hallo,

das ganze ist schwer nachvollziehbar, da einige Parameter sowie pv_prog fehlen.

Im Zweifelsfall kannst du eine for-Schleife für einen der Parameter machen. Je nach den in pv_prog verwendeten Operationen kann es auch funktionieren, wenn du einen der Parametervektoren transponierst und so implicit expansion nutzt.

Mini-Beispiel:
Code:
res = P_stc .* C_bu'


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
 
Flow135

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.07.2018, 10:50     Titel: Antwort an Harald
  Antworten mit Zitat      
Hallo Harald,

erstmal danke für deine schnelle Antwort. Daran hab ich mich auch schon versucht, allerdings hänge ich dann fest, wenn es um den restlichen Code geht.

Ich stelle mal die beiden m-Files hier rein, vielleicht wird es dann klarer. Allerdings ist der Algorithmus an sich relativ lange. Ich hoffe trotzdem, dass das hilft.

LG,
Flo

pvprog.m
 Beschreibung:
Algorithmus zur Ergebnisberechnung

Download
 Dateiname:  pvprog.m
 Dateigröße:  27.3 KB
 Heruntergeladen:  191 mal
Simonsfeld_Simulation1_mit_array.m
 Beschreibung:
Initialisierung der Parameter und Ausgabe der Ergebnisse aus pv_prog

Download
 Dateiname:  Simonsfeld_Simulation1_mit_array.m
 Dateigröße:  11.21 KB
 Heruntergeladen:  222 mal
 
Flow135

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.07.2018, 10:52     Titel: weitere Parameter
  Antworten mit Zitat      
Ich habe noch eine wichtige Inputdatei vergessen.

LG,
Flo

Simonsfeld_EB&Autarkie_20170816.mat
 Beschreibung:
weitere wichtige Inputparameter für pv_prog

Download
 Dateiname:  Simonsfeld_EB&Autarkie_20170816.mat
 Dateigröße:  462.88 KB
 Heruntergeladen:  230 mal
 
Harald
Forum-Meister

Forum-Meister


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

bitte zumindest noch angeben, welche beiden Vektoren denn parametriert werden sollen (im ersten Abschnitt werden drei solcher Vektoren angelegt) und welche der vielen Variablen du als den Ergebnisvektor ansiehst.

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
 
flow135

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.07.2018, 17:00     Titel:
  Antworten mit Zitat      
Hallo,

Tut mir leid, das stimmt natürlich.

Die Vektoren "P_stc" und "C_bu". Der dritte Vektor "P_bwr" wird später von "C_bu" abhängig sein, aber das ist schnell erledigt.

Die Ergebnisvektoren, die ich dann für die Heatmaps benötige, sind "e" ("Eigenverbrauchsrate") und "a" ("Autarkiegrad").

MfG,
Flo
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.07.2018, 09:43     Titel:
  Antworten mit Zitat      
Hallo,

ich habe mal einen Versuch angehängt. Die entscheidenden Zeilen:
36-37: über repmat und reshape werden Vektoren mit allen Kombinationen erzeugt
38: muss dazu passen
58-59: Umwandlung in Matrix
295-296: Wechsel zurück auf Originalvektoren

Grüße,
Harald

Simonsfeld_Simulation1_mit_array.m
 Beschreibung:

Download
 Dateiname:  Simonsfeld_Simulation1_mit_array.m
 Dateigröße:  11.58 KB
 Heruntergeladen:  204 mal

_________________

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
 
flow135

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.07.2018, 11:29     Titel: DankeDankeDanke
  Antworten mit Zitat      
Hallo Harald,

Vielen vielen Dank für deine Hilfe. Das Plotten funktioniert schon super Smile

Ein Problem habe ich aber noch, wobei ich noch nicht sicher weiß, ob das nicht eher ein Problem des Algorithmus ist. Denn was die Inputvektoren angeht, sollten mit deiner Lösung alle Varianten schrittweise berechnet werden können => Die Ergebnisse sind in jeder Zeile der Ergebnismatrizen dieselben, theoretisch sollte das aber nicht so sein.
Wenn ich die Werte einzeln berechne, erhalte ich auch andere Ergebnisse. Hast du eine Idee, woran das liegen könnte?

Desweiteren bringe ich die prognosebasierte Rechnung noch nicht hin.
Wenn ich unter pvprog.m die Zeilen 359 und 365 wieder einschalte, dann passen die Matrixdimensionen nicht. Ich schätze mal, dass in der Unterfunktion "prog4pv(time, p_pv, tf_past, tf_prog) dann etwas verändert werden muss, aber das seh ich mir später mal an.

Tausend Dank nochmal für deine Zeit und Hilfe.

LG,
Flo
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.07.2018, 12:14     Titel:
  Antworten mit Zitat      
Hallo,

ich sehe da auf den ersten Blick keinen Grund dafür. Die Abdeckung durch die Gittervektoren sollte an sich passen:
Code:


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
 
flow135

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.07.2018, 14:29     Titel:
  Antworten mit Zitat      
Hallo,

Ja laut diesem scatter-Plot sind alle Möglichkeiten abgedeckt. Und trotzdem kommen in die Ergebnis-Matrizen nur 26 mal die Werte für alle P_stc-Werte, wenn C_bu "Null" ist.

Das ist für mich absolut noch nicht nachvollziehbar, wie das sein kann.

LG,
Florian
 
flow135

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.07.2018, 14:48     Titel: Update
  Antworten mit Zitat      
Update:

Ich hab auch schon versucht, an den initialisierten Variablen zu ändern. Es ist ziemlich egal, was ich ändere, die Ergebnisse bleiben die gleichen. Als würde der Rechner nur die ersten 26 Schritte durchgehen und sie dann einfach 26 mal kopieren (oder weitere 25 mal durchgehen)

LG,
Florian
 
Harald
Forum-Meister

Forum-Meister


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

ich kann da nur empfehlen, die Dokumentation der Funktion anzusehen bzw. sie Schritt für Schritt durchzugehen. Wenn die Funktion für je 26 Werte 26 verschiedene Ergebnisse liefert, würde ich erwarten, dass sie für je 676 Werte auch 676 verschiedene Ergebnisse liefert.

Dem ist aber nicht so:
Aufruf von pv_prog mit bs = 1 -> man kommt in Zeile 317 auf "if C_bu>0". Das ist aber nur wirklich sinnvoll, wenn C_bu skalar ist. Ansonsten bedeutet das, dass alle Elemente von C_bu die Bedingung erfüllen müssen.

Letztlich ist die Frage, ob die Funktion für vektorielle Eingaben gedacht ist. Meine Vermutung ist: nein. Leider wird das weder in der Dokumentation der Funktion geklärt noch überprüft. Falls du einen der Autoren kennst, kannst du ihn ja mal fragen.

Vorschlag: eine for-Schleife, in der die Funktion jeweils für eine Kombination aus P_stc und C_bu aufgerufen wird. Damit solltest du auf der sicheren Seite sein.

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
 
flow135
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 18.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.07.2018, 15:23     Titel:
  Antworten mit Zitat      
Hallo Harald (diesmal bereits als Mitglied) Smile ,

Vielen Dank nochmal für deinen sehr lehrreichen Input. Ich sollte mir definitiv mal wieder ein Buch über Matlab zu Gemüte führen.

Okay, das hat der Autor nicht erwähnt. Ich warte noch auf eine Antwort (habe ihm gestern bereits mal geschrieben)

Ich habe auch schon versucht, dies als for-Schleife darzustellen, aber das hat bis jetzt noch nicht funktioniert. Entweder in den Ergebnissen ist immer nur das zuletzt berechnete Ergebnis gestanden, oder ich habe wieder eine 1x26 Ergebnisvektor bekommen, der in der Heatmap nicht dargestellt werden konnte, weil er einen 26x26 Vektor benötigt.

Ich bin langsam etwas am verzweifeln. Ich dachte zuerst, dass das eigentlich recht einfach darzustellen sei (ist es wahrscheinlich auch, wenn man nicht so wenig Erfahrung hat wie ich) Shocked Laughing

LG,
Florian
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

versuch mal beim Aufruf von pvprog

Code:
for k = 1:numel(P_stc)
  [a(k),e(k),v,pf,eb,soc]=pvprog(time,p_pv,P_ld,bs,P_stc(k),C_bu(k),P_bwr(k),p_gfl);
end


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
 
flow135
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 18.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.07.2018, 16:18     Titel:
  Antworten mit Zitat      
Hallo;

Echt jetzt? Das wars? Die eine Zeile? Rolling Eyes
Tja, so einfach könnte es gehen, wenn man etwas mehr Ahnung hat Smile


Vielen vielen Dank! Es funktioniert jetzt. Zumindest für die Anwendung, die ich momentan benötige. Very Happy

LG,
Florian
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.