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

Matrizenpunkte bei if Bedingung von festem Wert subtrahieren

 

Stefan360

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.06.2019, 14:29     Titel: Matrizenpunkte bei if Bedingung von festem Wert subtrahieren
  Antworten mit Zitat      
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.:

5.0000 7.7500 16.7500
5.0000 8.2500 17.2500
6.0000 8.7500 17.7500
5.0000 7.5000 17.0000
5.0000 8.0000 17.5000
5.0000 8.5000 18.0000

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.

Viele Grüße
Stefan


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 04.06.2019, 16:54     Titel: Re: Matrizenpunkte bei if Bedingung von festem Wert subtrahi
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Stefan360

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.06.2019, 17:48     Titel:
  Antworten mit Zitat      
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.

Viele Grüße
Stefan

[EDITED, Jan, Bitte Code-Umgebung verwenden - Danke!]
 
Astropeter
Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 16.10.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.06.2019, 13:35     Titel:
  Antworten mit Zitat      
habs jetzt nur überflogen, aber musst du nicht in der schleife y(i) ansprechen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Stefan360

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.06.2019, 14:03     Titel:
  Antworten mit Zitat      
Hi Astropeter,

das habe ich mittlerweile schon versucht, aber daran alleine liegt es nicht.

Gruß
Stefan
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 07.06.2019, 16:13     Titel:
  Antworten mit Zitat      
Hallo Stefan360,
Code:
if X(:,2)<=i<=X(:,3)

Das macht nicht, was du erwartest. Matlab wertet das von links nach rechts aus. Zunächst also:
Code:

Das ist TRUE oder FALSE, was als 1 oder 0 angesehen wird. Dann folgt:
Code:
1 < X(:,3)  bzw 0 < X(:, 3)

Du meinst wahrscheinlich:
Code:
if X(:,2) <= i & i <= X(:,3)

Das nächste Problem ist, dass if eine skalare Bedingung benötigt. Matlab fügt deswegen implizit ein all() ein. Also:
Code:
if all(X(:,2) <= i & i <= X(:,3))

Das wird aber kaum das sein, was du möchtest, oder?

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);

Meinst du etwas in der Art?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Stefan360

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.06.2019, 12:55     Titel:
  Antworten mit Zitat      
Hallo Jan,

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.

Verstehst du was ich meine?

Viele Grüße
Stefan
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 11.06.2019, 21:47     Titel:
  Antworten mit Zitat      
Hallo Stefan360,

Zitat:
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Stefan360

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.06.2019, 10:05     Titel:
  Antworten mit Zitat      
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.


Die einzige Lösung die mir dazu einfällt, wäre die Indexschritte von 0.25 auf 1 zu vergrößern, also die vierte Zeile dann ungefähr so zu schreiben:

Code:


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