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

bedingte Summe über einen Teil eines Vektors

 

professor_matlab

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.01.2014, 11:05     Titel: bedingte Summe über einen Teil eines Vektors
  Antworten mit Zitat      
Hallo Matlab Forum,

ich habe folgendes Problem:
Ich möchte eine Summe über einen Teil eines Vektors bilden, aber nur von bestimmten Elementen.
Zum Beispiel sei der Vektor mal
A = [5;4;3;2;1;1;2;3;4;5];
Ich möchte alle Elemente summieren, die im Bereich von Index 3 bis Index 8 liegen UND die größer als 1 sind.
Die Lösung wäre also 3+2+2+3 = 10.

Ich weiß, wie ich eine bedingte Summe bilden kann.
sum(A(A>1));
Ich weiß, wie ich eine Summe über einen Bereich bilden kann.
sum(A(3:Cool);
Eine Kombination aus beidem ergibt 11.
sum(A(A(3:Cool>1));
ans = 11
Daher ich weiß nicht, wie ich das kombinieren kann (ohne Schleifenkonstrukt).

Danke für eure Hilfe


professor_matlab

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.01.2014, 11:06     Titel:
  Antworten mit Zitat      
smileys.....

Da steht jeweils
Code:
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 24.01.2014, 11:12     Titel:
  Antworten mit Zitat      
professor_matlab hat Folgendes geschrieben:
smileys.....

Da steht jeweils
Code:

deswegen auch die code umgebung benutzen ^^
Code:
A = [5;4;3;2;1;1;2;3;4;5];
sum(A(3:8).*(A(3:8)>1))

_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
jurtsche
Forum-Century

Forum-Century


Beiträge: 123
Anmeldedatum: 26.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.01.2014, 11:14     Titel:
  Antworten mit Zitat      
naja...

du könntest übers logische indizieren, alle die kleiner deines indexes sind auf 0 setzen... quasi

Code:
A(logical([zeros(2,1);(A(3:8)>1)]))

9 und 10 ist eh egal, weils dann sowieso nicht geommen wird.

schön ist es nicht. Wink

PS: winkow hat in der zwischenzeit schon schönere lösung gepostet Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
professor_matlab

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.01.2014, 11:26     Titel:
  Antworten mit Zitat      
Winkow hat Folgendes geschrieben:
professor_matlab hat Folgendes geschrieben:
smileys.....

Da steht jeweils
Code:

deswegen auch die code umgebung benutzen ^^
Code:
A = [5;4;3;2;1;1;2;3;4;5];
sum(A(3:8).*(A(3:8)>1))


Vielen Dank!
Könntest du vielleicht kurz beschreiben, was genau das .* macht und wie sich die Lösung logisch zusammensetzt?
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 24.01.2014, 11:27     Titel:
  Antworten mit Zitat      
.* heist elementweise multiplikation.
Code:
(A(3:8)>1)
erzeugt einen vektor aus 0 und 1 der 1 da hat wo die elemnte größer als 1 sind. bei der multiplikation werden alles alle werte die kleiner als 1 sind auf 0 gesetzt.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
professor_matlab

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.01.2014, 11:37     Titel:
  Antworten mit Zitat      
Winkow hat Folgendes geschrieben:
.* heist elementweise multiplikation.
Code:
(A(3:8)>1)
erzeugt einen vektor aus 0 und 1 der 1 da hat wo die elemnte größer als 1 sind. bei der multiplikation werden alles alle werte die kleiner als 1 sind auf 0 gesetzt.


again, danke!
 
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 - 2025 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.