Matrizenpunkte bei if Bedingung von festem Wert subtrahieren
Stefan360
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 04.06.2019, 13:29
Titel: Matrizenpunkte bei if Bedingung von festem Wert subtrahieren
Hallo zusammen,
mein Problem ist folgendes:
Ich möchte einen Plot erstellen über einen Tagesverlauf mit t=0:0.25:24. Mein y soll generell immer gleich sein: y=100, außer eine bestimmte Bedingung tritt ein. Für diese Bedingung habe ich eine Matrix mit drei Spalten: Wert, Anfangszeitpunkt, Endzeitpunkt
z.B.:
Befindet sich t nun zwischen dem Anfangs- und dem Endzeitpunkt würde ich gerne jeweils den entsprechenden Wert von 100 abziehen.
Ich hab nun schon verschiedene for-Schleifen mit if-Bedingungen ausprobiert, aber es scheitert u.a. immer daran, dass nur ein Wert von 100 subtrahiert wird und nie alle zusammen.
Ich bin für jede Idee dankbar und hoffe, dass ihr mir weiterhelfen könnt.
Verfasst am: 04.06.2019, 15:54
Titel: Re: Matrizenpunkte bei if Bedingung von festem Wert subtrahi
Hallo Stefan360,
Ich denke die Frage wird klarer, wenn du deinen bisherigen Code postest.
Bisher ist nicht klar, was "Dein y" eigentlich ist und was genau "für diese Bedingung habe ich eine Matrix" bedeutet.
Zitat:
Befindet sich t nun zwischen dem Anfangs- und dem Endzeitpunkt ...
Welches sind die "Anfangspunkte" und "Endpunkte"?
Zitat:
...würde ich gerne jeweils den entsprechenden Wert von 100 abziehen.
Und wie ist "entsprechend" hie definiert?
Gruß, Jan
Stefan360
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 04.06.2019, 16:48
Titel:
Hallo Jan,
danke für deine Antwort. Tut mir leid, dass ich die Frage etwas unklar formuliert habe.
hier ist eine von den Versionen, die ich probiert habe. Ich verstehe auch warum das so nicht funktioniert, aber bisher hatte ich noch keine zielführende Idee.
Code:
X = [5, 7.75, 16.75; 5, 8.25, 17.25; 6, 8.75, 17.75; 5, 7.5, 17; 5, 8, 17.5; 5, 8.5, 18;];
t= 0:0.25:24;
y=100*ones(1,97);
for i=0:0.25:24 if X(:,2)<=i<=X(:,3)
y=y-X(:,1);
end end plot(t,y);
Vielleicht hilft zum besseren Verständnis der Kontext: Ich würde gerne einen Plot anfertigen, der zeigt wie viele Elektroautos sich gleichzeitig zuhause an der Ladesäule befinden. Dabei habe ich verschiedene Fahrprofile angefertigt, von denen ich zum Test nur ein paar in die Matrix eingefügt habe. z.B. erste Zeile: 5% der Autos sind von 7.45Uhr bis 16.45Uhr nicht an der Ladesäule usw.
Ich hoffe, dass mein Problem nun verständlicher ist.
erst einmal vielen Dank für deine ausführliche Antwort.
Die ersten Punkte, die du ansprichst waren mir leider nicht mehr bewusst, obwohl ich schon einmal davon gehört habe.
Der Aspekt, dass if eine skalare Bedingung benötigt, war vermutlich einer meiner Hauptdenkfehler.
Zu deiner Idee:
Zunächst bedanke ich mich für den Vorschlag, aber ich hätte noch ein paar Fragen dazu.
Wie kann ich die Fehlermeldung "Subscript indices must either be real positive integers or logicals." umgehen, ohne dass ich meine Indexschritte vergrößern muss?
Außerdem wird hier ja die erste Spalte von X nicht beachtet soweit ich das richtig verstanden habe.
Mein Ziel ist es aber, die erste Spalte von X von y zu subtrahieren, solange sich der Wert von t zwischen den Werten der zweiten und dritten Spalte von X bewegt.
Wie kann ich die Fehlermeldung "Subscript indices must either be real positive integers or logicals." umgehen, ohne dass ich meine Indexschritte vergrößern muss?
Bitte poste den entsprechenden Code und eine vollständige Kopie der Fehlermeldung. Dann kann man konkrete Lösungsvorschläge geben.
Die Meldung bedeutet, dass Indizes entweder nicht positiv oder nicht ganzzahlig sind.
Zitat:
Außerdem wird hier ja die erste Spalte von X nicht beachtet soweit ich das richtig verstanden habe.
Was genau ist "hier"? Ich hatte nur eine Lösungsidee gepostet.
Zitat:
Mein Ziel ist es aber, die erste Spalte von X von y zu subtrahieren, solange sich der Wert von t zwischen den Werten der zweiten und dritten Spalte von X bewegt.
Dann probiere das. Füge mal die bisherigen Verbesserungsvorschläge ein und poste dann wieder den neuen Code.
Gruß, Jan
Stefan360
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 12.06.2019, 09:05
Titel:
Hallo Jan,
ich entschuldige mich nochmals für meine unklare Ausdrucksweise.
Was die Fehlermeldung bedeutet, weiß ich und sie tritt auf, wenn ich deine Lösungsidee umsetzen möchte, da hier die Indizes nicht ganzzahlig sind.
Code:
X = [5, 7.75, 16.75; 5, 8.25, 17.25; 6, 8.75, 17.75; 5, 7.5, 17; 5, 8, 17.5; 5, 8.5, 18;];
t = 0:0.25:24;
y = repmat(100, 1, 97);
for i = 0:0.25:24
match = (X(:,2) <= i & i <= X(:,3));
y(i) = y(i) - sum(match);
end plot(t,y);
Subscript indices must either be real positive integers or logicals.
Dies würde aber die Genauigkeit meines gewünschten Ergebnisses bedeutend vermindern und wäre somit nicht zielführend.
Daher wollte ich fragen, ob es auch eine andere Alternative gibt.
Auf die anderen Aspekte, komme ich wahrscheinlich besser erst nach Lösung dieses Problems zurück, um nicht zu viel Verwirrung zu stiften.
Danke und viele Grüße
Stefan
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.