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

Matrixelemente bearbeiten

 

*maddin*
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 19.03.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.03.2008, 14:29     Titel: Matrixelemente bearbeiten
  Antworten mit Zitat      
Hallo,
erst mal vorweg, ich bin ein zeimlicher Matlab-Newbie. Also bitte nicht schlagen, wenn mein Problem trivial oder wahnsinnig kompliziert ist... Wink

Nun mein Problem. Ich habe eine Messreihe, die vereinfacht folgendermaßen aussieht:

1 10
2 20
5 30
9 40
9 50
9 60
10 70

Meine Ziel-Matrix sollte folgendermaßen aussehen:
1 10
2 20
3 23.333
4 26.666
5 30
6 35
7 40
8 45
9 50
10 70

Mein Ziel ist es also, diese Messreihe so zu verändern, dass ich in der ersten Spalte eine fortlaufende Nummerierung habe, also 1,2,3,4,5,6,... D.h., ich muss als erstes die doppelten, dreifachen usw Einträge der ersten Spalte entfernen und dort die entsprechenden Werte in der 2. Spalte mitteln. Als zweites muss ich dort, wo in der ersten Spalte Werte fehlen, Werte einfügen, an der entsprechenden Stelle der zweiten Spalte soll hier ein Mittelwert von vorhergehendem und darauffolgendem Wert erscheinen.

Ich hoffe, mein Problem ist klar rübergekommen.
Wie kann ich das in Matlab umsetzen?

Ich bin für jede Hilfe und Anregung sehr dankbar!

Viele Grüße
Martin
Private Nachricht senden Benutzer-Profile anzeigen


nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.320
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 19.03.2008, 17:01     Titel:
  Antworten mit Zitat      
Sollte schon machbar sein.
Aber wenn in der 1. Spalte ein Wert mehrmals vorkommt,
welchen Wert aus der 2. Spalte willst Du dann nehmen?
Auch den Mittelwert aller drei?
_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
*maddin*
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 19.03.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.03.2008, 18:30     Titel:
  Antworten mit Zitat      
Danke erst mal für die Antwort!!!

Richtig. Wenn der Wert der 1. Spalte z.B. 3 Mal vorkommt, dann den Mittelwert aus den dreien der 2. Spalte.

Aber wieso "auch den Mittelwert"?

Im dem Fall, wenn mehr als 1 Wert in der 1. Spalte fehlt, will ich nicht mit dem Mittelwert, sondern gleichmäßig "auffüllen", wie im Beispiel bei 6, 7 und 8.

Martin
Private Nachricht senden Benutzer-Profile anzeigen
 
Michaela
Forum-Century

Forum-Century


Beiträge: 239
Anmeldedatum: 12.07.07
Wohnort: ---
Version: bis 2007b
     Beitrag Verfasst am: 19.03.2008, 21:06     Titel:
  Antworten mit Zitat      
solllte kein Problem sein. Ich skizziere dir mal auf die schnelle eine Lösung, auf Rückfrage gerne auch detaillierter.

Die erste Spalte deiner Matrix ist ja die X-Achse, und Du willst nun alle fehlenden Integer-Werte interpolieren. Dafür ist der Befehl interp1 http://www.mathworks.com/access/hel.....p;submitButtonName=Search wie geschaffen:

Du interpolierst einfach die fehlenden Stellen (ich gehe mal davon aus, Du hast als X werte von 1:N), allerdings musst Du dich noch auf eine Interpolationsmethode wie linear, cubic oder spline festlegen.
M ist die von dir angegebene Matrix


Code:

% aus gründen der übersichtlichkeit matrix in x und y zerhacken
X = M(:,1);
Y = M(:,2);
Xi = 1:max(X);   %X-Achse für Interpolation, von 1 bis zum maximal auftretenden Wert

Yi = interp1(X,Y,Yi,'linear') ;   %zB lineare Interpolation

Mi = [Xi Yi]; % die neue Matrix


 

_________________

---------------------------------------------------------------
Leider habe ich daheim zwar Internet aber kein Matlab - daher sind alle Syntaxbeispiele circa Angaben.....
Private Nachricht senden Benutzer-Profile anzeigen
 
*maddin*
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 19.03.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.03.2008, 14:45     Titel:
  Antworten mit Zitat      
Danke Michaela!

Habs grad mal getestet. Für's Auffüllen der fehlenden Werte scheint es zu funktionieren. Hab aber noch ändern müssen, dass Xi ein Spaltenvektor wird, und bei Yi muss es in der Klammer Xi und nicht Yi heißen.
Sonst funktioniert's!

Aber was mach ich mit den doppelten und dreifachen Werten? Wie bekomm ich die weg?

Viele Grüße
Martin
Private Nachricht senden Benutzer-Profile anzeigen
 
Michaela
Forum-Century

Forum-Century


Beiträge: 239
Anmeldedatum: 12.07.07
Wohnort: ---
Version: bis 2007b
     Beitrag Verfasst am: 20.03.2008, 21:28     Titel:
  Antworten mit Zitat      
MhhM... eventuell kannst Du die Daten "vorbearbeiten" und jeweils durch den Mittelwert ersetzen?

Bin mir aber nicht sicher, wie man die doppelten werte schnell findet.

Aber als workaround (evtl. etwas umständlich) könnte ich mir folgendes vorstellen: Die Daten sortieren (notfalls mit sort), falls sie noch nciht sortiert vorliegen.

Doppelte Werte erkennst Du daran, dass der Befehl
Code:
Nullen enthält (Differenz zum Nachfolger Null). Dann mit
Code:
nach den Nullen suchen und die enstprechenden Indizes raussuchen und von Hand mitteln... bzw. eine neue Matrix auffüllen...Kennt jemand eine bessere Lösung?
_________________

---------------------------------------------------------------
Leider habe ich daheim zwar Internet aber kein Matlab - daher sind alle Syntaxbeispiele circa Angaben.....
Private Nachricht senden Benutzer-Profile anzeigen
 
ChrisHA

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.09.2013, 15:03     Titel: Mitteln von Y-Werten gleicher X-Werte eines Vektors
  Antworten mit Zitat      
Code:

function out = meanxva(vec)
avec = unique(vec(:,1));
for eeavec = 1:length(avec)
    newvec(eeavec,:) = [avec(eeavec) mean(vec(find(vec(:,1)==avec(eeavec)),2))];
end
out =sortrows(newvec,1);
end
 


Vielleicht hilft es anderen Wink
Have fun!
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.09.2013, 19:07     Titel:
  Antworten mit Zitat      
interp1 scheint wohl immer den letzten Y-Wert für eine X-Position zu nehmen.
Code:
M=[1 10
2 20
5 30
9 40
9 50
9 60
10 70 ]


X = M(:,1)
Y = M(:,2)
Ymean = sparse(X,1,Y) ./ sparse(X,1,1)
Xunique = find(isfinite(Ymean))
Xi = 1:max(Xunique)
Yi = interp1(Xunique, full(Ymean(Xunique)), Xi, 'linear')

Mi = [Xi' Yi']
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.