Im Anschluss möchte ich kontrollieren ob in der ersten Spalte Werte doppelt sind und diese rausschmeisen. Das habe ich mit unique gemacht. Da ich aber auch die Werte der anderen Spalten brauche habe ich mir dann das Array entsprechend der sich aus unique ergebenden sortierung umsortiert und überschüssige Werte abgeschnitten.
Code:
f = 1
[a1 b1] = unique(normalkraft(:,1));
for i = 1:length(b1)
normalkraft(f,:) = normalkraft(b1(i),:);
f= f+1;
end
normalkraft(f+1:end,:) = []; %Werte abschneiden
Und jetzt passiert das was ich mir nicht erklären kann. Aus irgendeinem Grund dupliziert er Reihen und das Ergebnis sieht so aus.
6 5 6 4
5 1 2 3
5 1 2 3
4 2 3 6
Grundsätzlich zwar richtig sortiert aber mit doppelt vorkommenden Zeilen.
Noch viel spannender finde ich dass, wenn ich auf das bereits mit unique sortierte und zurechtgeschnittene array noch mal sortrows anwende erwarte ich das sich absolut nichts tut da ja die erste Zeile bereits der Größe nach sortiert ist. Doch auch hier werden Zeilen dupliziert.
Kann mir das wer erklären? Ich verstehs einfach nicht.
Vielen Dank!
f = 1;
%3.97081 for i = 1:length(Schnittgeschw) for ii = 1:length(Vorschub) for iii = 1:length(Zustellung)
normalkraft(f,1) = 0*Schnittgeschw(i) + 12.0114*Vorschub(ii) + 30.8964*Zustellung(iii);
normalkraft(f,2) = Schnittgeschw(i);
normalkraft(f,3) = Vorschub(ii);
normalkraft(f,4) = Zustellung(iii);
f = f+1;
end end end
%% Sortierung mit dem Befel unique
normalkraft_sortiert = zeros(anzahl,4);
g = 1;
[a1 b1] = unique(normalkraft(:,1)); %Zugriff auf die erste Spalte und suche nach doppelten Einträgen. Gleichzeitig wird der Größe nach sortiert
for i = 1:length(b1) %Zugriff auf die in b1 enthaltenen Indize um die Spalten 2-4 der Sortierung der in a1 enthaltenen Werte anzupassen
normalkraft_sortiert(g,:) = normalkraft(b1(i),:);
g = g+1;
end
normalkraft_sortiert(g+1:end,:) = []; %Sollten werte doppelt gewesen sein würde hiermit die die überschüssigen Zeilen abgeschnitten werden
% Auf das Ergebnis noch mal sortrows anwenden (Das Ergebnis sollte das % gleiche wie bei ergebnis_2 sein
normalkraft_sortiert_1 = sortrows(normalkraft_sortiert);
f = 1;
%3.97081 for i = 1:length(Schnittgeschw) for ii = 1:length(Vorschub) for iii = 1:length(Zustellung)
normalkraft(f,1) = 3.97081*Schnittgeschw(i) + 12.0114*Vorschub(ii) + 30.8964*Zustellung(iii);
normalkraft(f,2) = Schnittgeschw(i);
normalkraft(f,3) = Vorschub(ii);
normalkraft(f,4) = Zustellung(iii);
f = f+1;
end end end
%% Sortierung mit dem Befel unique % normalkraft_sortiert = zeros(anzahl,4);
g = 1;
[a1 b1] = unique(normalkraft(:,1)); %Zugriff auf die erste Spalte und suche nach doppelten Einträgen. Gleichzeitig wird der Größe nach sortiert
for i = 1:length(b1) %Zugriff auf die in b1 enthaltenen Indize um die Spalten 2-4 der Sortierung der in a1 enthaltenen Werte anzupassen
normalkraft(g,:) = normalkraft(b1(i),:);
g = g+1;
end
normalkraft(g+1:end,:) = []; %Sollten werte doppelt gewesen sein würde hiermit die die überschüssigen Zeilen abgeschnitten werden
% Auf das Ergebnis noch mal sortrows anwenden (Das Ergebnis sollte das % gleiche wie bei ergebnis_2 sein
normalkraft_sortiert_1 = sortrows(normalkraft);
Der Unterschied zwischen Code 1 und 2 besteht darin, dass ich in Code 1 bei der Anwendung von unique eine neue Variable deklariert habe während ich in Code 2 die gleiche einfach noch mal verwendet habe.
Code 1: normalkraft wird zu normalkraft_sortiert
Code 2: normalkraft wird weiter verwendet
Wenn ihr jeweils die Variable "ergebnis_3" mit einander vergleicht erkennt ihr was ich meine mit doppelten Einträgen.
Bedeutet also, ich könnte das Problem lösen, indem ich einfach jeweils eine neue Variable verwende für den Eintrag bei unique. Da das Skript aber ein bißchen länger ist würde das bedeuten, dass ich 120 neue Variablen deklarieren müsste und an einer anderen Stelle im Skript den jeweiligen Zugriff für sortrows ädern müsste.
Ich würde gerne erst mal verstehen wie es zu diesem Fehler kommen kann und ob ich ihn anderweitig umgehen kann bevor ich mir diesen Aufwand mache.
Ich würde mcih freun, wenn sich jemand die beiden Codes mal anschauen könnte.
LG
djanski
PS:
Bei dem so gewähltem Beispiel kann es natürlich keine doppelten Einträge geben womit eine Sortierung über sortrows völlig ausreichend wäre. Allerdings gibt es Variablen für deren Berechnung einer der Koeffizienten 0 ist, das Ergebnis der Berechnung also von eienr Größe unabhängig ist und inder Folge auch dopplte Einträge auftauchen. Um für diesen Fall nicht extra ein neues Skript schreiben zu müssen wäre es schön wenn es auf diesem Wege hinzubekommen ist.
Verstehe ich das richtig, dass Matlab im ersten Teil dieser Zeile die jeweiligen Koeffizienten auf die jeweilige Kombination von Schnittgeschw, Vorschub und Zustellung anwendet und der zweite Teil dazu dient die Spalten 2-4 mit der für die Berechnugn verwendeten Schnittgeschw, Vorschub und Zustellung zu füllen?
Ist es dann noch nötig die Variable "normalkraft" vorzudefinieren um die Laufzeit zu minimieren oder ergibt sich das mit dem Befehl ndgrid?
Einstellungen und Berechtigungen
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.