1. fopen / textscan / fclose
2. m = mean(...)
3. mit 0.7*m und 1.3*m arbeiten. Soll, wenn x oder y-Wert ausserhalb des Bereichs liegen, das komplette Paar gelöscht werden, oder wie ist das gedacht?
4. fopen / fprintf / fclose
ich habe mir Deine Textdatei mal angeschaut.
Die Daten konnte ich schnell in MatLab mit Hilfe des load-Befehls laden, nachdem ich die erste Zeile löschte.
Wenn die Datendatei nicht verändert werden soll, musst Du mit fopen und anderen File-Handling-Befehlen arbeiten.
Weiterhin fiel mir auf, daß einige Datenpunkte exakt 0 waren. Diese Daten habe ich eliminiert.
Insgesamt habe ich folgenden Code ausgeführt:
Code:
load("c:/arbeiten/data.txt"); % Deine Datei habe ich unter diesem Namen abgespeichert
A=data;
ki=find(A(:,2)!=0 | A(:,3)!=0); % Datensätze, bei denen x und y exakt Null sind, werden entfernt
B=A(ki,:); % Die Matrix B enthält jetzt nur "relevante" Werte
MA=mean(mean(B(:,2:3))); % Der Mittelwert der Gesamtheit aller x- und y-Werte wird berechnet.
ki=find(B(:,2)>=MA*0.7 & B(:,3)>=0.7); % Die Zeilenindices der Matrix werden bestimmt, bei denen sowohl die x- als auch y-Werte größer als Mittelwert - 30% sind.
C=B(ki,:); % Die relevanten Werte werden extrahiert
C und ki sind hier rot unterstrichen/werden nicht erkannt
ansonsten
die Datendatei kann ruhig verändert werden
funktioniert das Ganze dann so:
im Matlab-Command-Window gebe ich
jede einzelne Zeile des Codes ein,
oder könnte ich die Code-Datei z.B. durchschnitt nennen,
im Command-Window dann nur diesen Namen eingeben
und den ganzen Code damit starten?
AJ scheint nicht MATLAB, sondern eine MATLAB-ähnliche (?) Sprache zu verwenden.
!= muss in MATLAB ~= sein.
Das mit ' statt " hast du ja selbst schon erkannt.
Ansonsten sollte die Syntax richtig sein.
werden die Zeilenindices der Matrix bestimmt,
bei denen sowohl die x- als auch y-Werte grösser als Mittelwert - 30% sind,
die relevanten Werte werden extrahiert
hier wäre es besser wenn nur alle Werte,
(wie oben genannt: separat für X- und Y-Werte),
die -30% unter dem Mittelwert oder +30% über dem Mittelwert liegen
und alle, die genau dem Mittelwert entsprechen,
erhalten bleiben
ki=find(A(:,2)~=0 | A(:,3)~=0); % Datensaetze, bei denen x und y exakt Null sind, werden entfernt
B=A(ki,:); % Die Matrix B enthaelt jetzt nur "relevante" Werte
MA=mean(B(:,2:3)); % Ein Mittelwert der Gesamtheit aller x- Werte und ein Mittelwert der Gesamtwert aller y-Werte werden berechnet.
ki=find(B(:,2)>=MA*0.7 & B(:,3)>=0.7); % Die Zeilenindices der Matrix werden bestimmt, bei denen sowohl die x- als auch y-Werte groesser als Mittelwert - 30% sind.
ki=find(B(:,2)<=MA*1.3 & B(:,3)<=1.3); % Die Zeilenindices der Matrix werden bestimmt, bei denen sowohl die x- als auch y-Werte kleiner als Mittelwert + 30% sind.
ki=find(B(:,2)=MA*1 & B(:,3)=1); % alle die genau dem Mittelwert entsprechen?
C=B(ki,:); % Die relevanten Werte werden extrahiert
1.
gibt ja nun 2 Mittelwerte, einer für die x-Werte (Spalte 2) und einer für die y-Werte (Spalte 3)
x-Werte sollen sich natürlich auf den Mittelwert der x-Werte beziehen
und y-Werte auf den Mittelwert der y-Werte.
Kann man das irgendwie trennen?
Das bedeutet, MA(1) ist der Mittelwert von B(:,2) und MA(2) der von B(:,3).
Code:
ki=find(B(:,2)>=MA*0.7 & B(:,3)>=0.7); % Die Zeilenindices der Matrix werden bestimmt, bei denen sowohl die x- als auch y-Werte groesser als Mittelwert - 30% sind.
herzlichen Dank für die Antwort Harald,
die von dir angesprochenen Punkte habe ich inzwischen weitgehend gelöst
es gibt nur in der 7. Zeile Probleme:
entscheidend ist hier, dass nur eine der 4 Möglichkeiten zutreffen muss,
damit die ganze Zeile extrahiert werden soll
ich müsste hier also doch den Befehl "|" "oder" verwenden?
funtioniert aber nicht
so wie es jetzt geschrieben ist mit "&" wir eine Zeile ja dann extrahiert,
wenn alle 4 Bedingungen zutreffen
ki=find(A(:,2)~=0 | A(:,3)~=0); % Datensaetze, bei denen x und y exakt Null sind, werden entfernt
B=A(ki,:); % Die Matrix B enthaelt jetzt nur "relevante" Werte
MA=mean(B(:,2:3)); % Ein Mittelwert(1) aller x- Werte und ein Mittelwert(2) aller y-Werte wird berechnet. % MA(1) ist der Mittelwert von B(:,2) und MA(2) der von B(:,3)
ki=find(B(:,2)>=MA(1)*0.7 & B(:,2)<=MA(1)*1.3 & B(:,3)>=MA(2)*0.7 & B(:,3)<=MA(2)*1.3);
% Die Zeilenindices der Matrix werden bestimmt, bei denen eine der 4 Möglichkeiten zutrifft: % - x-Wert grösser als 0.7*MA(1) % - x-Wert kleiner als 1.3*MA(1) % - y-Wert grösser als 0.7*MA(2) % - y-Wert kleiner als 1.3*MA(2)
C=B(ki,:); % Die relevanten Werte werden extrahiert
und das mit den ungeräumten Bürgersteigen
frag ich mich auch täglich!
sogar am Potsdamer Platz, wo zur Zeit noch die Berlinale stattfindet,
gibt es riesige Eisflächen.
Naja, mit den Berlinern kann man s ja machen (siehe S-Bahn)
Das Problem ist, dass "," hier als Dezimaltrennzeichen verwendet wird, aber als Spaltentrennzeichen erkannt wird. Hier eine kleine Funktion zur Vorverarbeitung, aufzurufen mit
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.