alle möglichen Kombinationen in einem Ergebnis darstellen
Flow135
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 17.07.2018, 10:13
Titel: alle möglichen Kombinationen in einem Ergebnis darstellen
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)
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.
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 ;)
Flow135
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 17.07.2018, 10:50
Titel: Antwort an Harald
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.
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 ;)
flow135
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 17.07.2018, 17:00
Titel:
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").
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
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 ;)
Vielen vielen Dank für deine Hilfe. Das Plotten funktioniert schon super
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.
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 ;)
flow135
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 18.07.2018, 14:29
Titel:
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: ---
Verfasst am: 18.07.2018, 14:48
Titel: Update
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)
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 ;)
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)
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 ;)
Echt jetzt? Das wars? Die eine Zeile?
Tja, so einfach könnte es gehen, wenn man etwas mehr Ahnung hat
Vielen vielen Dank! Es funktioniert jetzt. Zumindest für die Anwendung, die ich momentan benötige.
LG,
Florian
Einstellungen und Berechtigungen
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
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.