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

>> Folgeglieder eines Vektors "mitteln" ...

 

stoxxii

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.07.2012, 08:23     Titel: >> Folgeglieder eines Vektors "mitteln" ...
  Antworten mit Zitat      
Hallo User-Gemeinde,
Hi Folks,

ich habe einen Vektor :
y = [24 27 31 35 32 28 25 20];

und da versuchte ich ein Mittelwerte zw.
jeweils 2 benachbarten Folge-Gliedern , Elementen
zu berechnen ... Rolling Eyes
Leider kann ich nix in meinem bisherigen Archiv finden,
womit ich jewweils 2 Folge-Glieder operativ auswerten kann ...
sei Mean , Diff.... oder etwas anderes ... Crying or Very sad

Könntet ihr mir ein Programmier-Tip geben ...???
Eventuell ohne For-Loop ... ???

Vielen Dank für eure Zeit & Müh ...vorab ...
Beste Grüße
stoxxii


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 16.07.2012, 08:26     Titel:
  Antworten mit Zitat      
Hallo,

so?
Code:
(y(1:end-1) + y(2:end))/2


Falls das nicht das gewünschte Ergebnis ist, bitte verdeutlichen, was eigentlich berechnet werden soll.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
stoxxii

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.07.2012, 13:59     Titel: > danke ... verstehe aber das "plus" nicht
  Antworten mit Zitat      
Halloo Forum-Meister,

danke , soweit ... ich kann es erst zu hause prüfen ... Laughing
ob dein Index-Tip mir soo weiterhilft ...

Ich Habe schon andere ähnliche Indexierung gesehn ...
aber leider verstehe ich das mit dem "+" nicht , was da Matlab genau
herausliest .. also welche Elemente in welcher Richtung ...

ich melde mich später nochmal ...
schönen tag
grüße
stoxxii
 
Seer
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 23.04.12
Wohnort: ---
Version: 7.14.0.739
     Beitrag Verfasst am: 16.07.2012, 15:05     Titel:
  Antworten mit Zitat      
Code:
y(1:end-1)
Bedeutet: Betrachte den Vektor y von der Stelle 1 (dafür steht die 1 Wink ) bis zur (dafür steht der Doppelpunkt) vorletzten Stelle (dafür steht das end-1).
Im zweiten Fall betrachtest du dann nur den Teil des Vektors, der vom zweiten bis zum letzen Element geht. Diese beiden Teilvektoren addierst du dann und teilst den Ergebnisvektor durch 2.

Als Ergebnis bekommst du einen Vektor der eine Stelle kleiner ist als y und an dessen erster Stelle der Durchschnitt der ersten beiden Stellen von y steht.

Beispiel:
Code:
testvektor = [1 2 3 4 5 6 7 8 9];
ergebnis= (testvektor(1:end-1)+testvektor(2:end))/2


Ausgabe:
ergebnis =
1.5000 2.5000 3.5000 4.5000 5.5000 6.5000 7.5000 8.5000


Bzw. wenn man deinen Vektor einsetzt:

ergebnis =
25.5000 29.0000 33.0000 33.5000 30.0000 26.5000 22.5000
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 16.07.2012, 15:54     Titel:
  Antworten mit Zitat      
eine weitere möglichkeit bietet glaub ich
Code:
da sollte auch ein beispiel stehn zum thema gleitender mittelwert.
Private Nachricht senden Benutzer-Profile anzeigen
 
stoxxii

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.07.2012, 18:17     Titel: >> habs gefunden ... Forum-meister... danke
  Antworten mit Zitat      
Halloo Forum-Meister,

danke für den Tip ... es war nicht ganz sooo richtig ... aber es hat mir die Richtung gegeben ... also helpful Wink

Ich suchte den Mittelwert benachbarter Elemente ... "gemittelt" sagte ich oben ...

unzwar sooo:
yMi = mean ([y(2:end) ; y(1:end-1)]) ... cool ...

Aber trotzdem nochmal Danke für eure Mühe und Anreggn.
beste grüße
stoxxii
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 16.07.2012, 18:29     Titel:
  Antworten mit Zitat      
Hallo stoxxii,

wenn du mir jetzt noch sagst, inwiefern sich die Resultate bei deinem Code von dem von uns vorgeschlagenen Code unterscheiden? Im Ergebnis zumindest bei deinem Testvektor meines Erachtens gar nicht.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 16.07.2012, 21:58     Titel: Re: >> habs gefunden ... Forum-meister... danke
  Antworten mit Zitat      
Hallo stoxxii,

MEAN berechnet die Summe und teilt durch die Anzahl der Summanden. Deshalb ist:
Code:
yMi = 0.5 * (y(2:end) + y(1:end-1));

eyxakt das gleiche wie:
Code:
yMi = mean ([y(2:end) ; y(1:end-1)]);

Allerdings ist das obere deutlich effizienter, weil nicht erst ein temporäres Array erstellt werden muss.

Ich kann Harald und Seer also nur bestätigen.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.07.2012, 12:54     Titel: >> keine Panik ... benötige noch Ergänzung
  Antworten mit Zitat      
Halloo Ihr Zwei Harald & Seer ,

ich nicht haben Ahnung von Mathematik ... sorry ... Embarassed
aber ich bemühe mich, wie in der TV Werbung von der V & R-Bank ...
jeden Tag ein bißchen besser machen ... Wink

Vielleicht hatte ich euere Programm-Zeile um eine Klammer falsch eingegeben .. oder soo ...

Jetzt wollte ich euch noch bitten ...
mir diese neu berechneten Mittelwerte zw. die Neighbors einzusetzen ...
also die ursprüngliche Vektor-Reihe durch diese neuen Elemente zu
erweitern ... irgendwie soo :
Code:
y(2:2end-1) = neuVec
... Rolling Eyes

Könnt ihr mir weiterhelfen ???
Danke vorab für's Mühen....
beste grüße
stoxxii
 
Seer
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 23.04.12
Wohnort: ---
Version: 7.14.0.739
     Beitrag Verfasst am: 17.07.2012, 13:37     Titel:
  Antworten mit Zitat      
Probiers mal damit:

Code:
vektor1 = [1 3 5 7 9 11]
vektor2 = [2 4 6 8 10]

ergebnis = zeros(1,length(vektor1)+length(vektor2))
ergebnis(1:2:end) = vektor1
ergebnis(2:2:end-1)=vektor2


Ausgabe im Command Window:
vektor1 =
1 3 5 7 9 11
vektor2 =
2 4 6 8 10
ergebnis =
0 0 0 0 0 0 0 0 0 0 0
ergebnis =
1 0 3 0 5 0 7 0 9 0 11
ergebnis =
1 2 3 4 5 6 7 8 9 10 11

Bei Bedarf kann ich dir auch noch erklären was du damit genau tust . Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 17.07.2012, 13:55     Titel:
  Antworten mit Zitat      
Hallo Seer,

Oder:
Code:
vektor1 = [1 3 5 7 9 11]
vektor2 = [2 4 6 8 10]
ergebnis = reshape([vektor1; vektor2], 1, []);

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.07.2012, 14:07     Titel: >> danke .. habe noch etwas gefunden
  Antworten mit Zitat      
halloo Guys,

danke soweit ... ich habe zwischenzeitlich noch etwas auf "stackoverflow" gefunden : Rolling Eyes
Code:

a = [1 3 5 7 9];
b = [2 4 6 8];
c = zeros(9,1);
c(1:2:9) = a;
c(2:2:8) = b;


naja, immer in englisch die treffenden Fragen zu forumulieren unter google.de ist nichts soo einfach ... Embarassed

beste grüße
uwe koernig
 
Seer
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 23.04.12
Wohnort: ---
Version: 7.14.0.739
     Beitrag Verfasst am: 17.07.2012, 14:27     Titel: Re: >> danke .. habe noch etwas gefunden
  Antworten mit Zitat      
stoxxii hat Folgendes geschrieben:
Code:

a = [1 3 5 7 9];
b = [2 4 6 8];
c = zeros(9,1);
c(1:2:9) = a;
c(2:2:8) = b;



Damit machst du im Prinzip genau das was ich vorgeschlagen hab, nur mit expliziten Werten statt Variablen. Du bekommst außerdem einen Spaltenvektor statt einem Zeilenvektor zurück.

Jans Version ist schöner und läuft vermutlich schneller, allerdings habe ich fünf Minuten gebraucht bis ich verstanden habe wie sie funktioniert. "Reshape" ist mir bisher noch nicht über den Weg gelaufen gewesen.
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 - 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.