Verfasst am: 13.08.2018, 15:18
Titel: Berechnen von Differenzen nur dann, wenn Werte vorhanden
Hey,
ich bin Anfännger und stehe vor einem eigentllich einfachen Problem.
Ich habe verschiedene Messwerte in der Form M(i,j)
Das i ist ein laufender Index und durchgehend vergeben.
ich möchte jetzt automatisch den Betrag der Differenzen S(j,j) zwischen allen Messwerten ausrechnen lassen.
Allerdings nur zwischen Messwerten, bei denen i gleich groß ist, und nur dann wenn ein j definiert ist.
Beispiel, ich habe:
M(1,3) M(1,4) M(1,7) M(2,3) M(2,6)
Jetzt möchte ich automatisch meine Strecken S für alle i berechnen lassen, also:
[...] ich möchte jetzt automatisch den Betrag der Differenzen S(j,j) zwischen allen Messwerten ausrechnen lassen. [...]
M(1,3) M(1,4) M(1,7)
Was heißt alle Differenzen? Immer die Differenz zwischen "nebeneinander" stehenden Einträgen? Aso für oben stehendes Beispiel:
S(3,4) und S(4,7) -> Variante 1
Oder tatsächlich alle? Also:
S(3,4), S(4,7) und S(3,7) -> Variante 2
Und was passiert wenn du folgende Einträge hast:
M(1,3) M(1,4) M(1,7)
M(2,3) M(2,4) M(2,7)
Nach deinem genannten Vorgehen würden dann (unter Annahme von Variante 1), für i = 1 die Zellen der Matrix beschrieben:
S(3,4) und S(4,7)
um anschließend von den Einträgen von i = 2 überschrieben zu werden?
Ich vermute mal, dass die wissen musst aus welchen Einträgen genau die Strecken berechnet wurden. Daher müsstest du vermutlich eine cell-Matrix erstellen in der für jedes i die zugehörige S-Matrix abgelegt wird. Alle nicht beschriebenen Felder in der Matrix haben dann allerdings einen 0-Eintrag.
Brauchst du nur die Strecken und es ist nicht wichtig aus welchen Einträgen sich diese ergibt, kann man das deutlich einfacher, in einer Matrix S(i,k) wobei k für die k-te Differenz steht, darstellen.
Und was heißt "nur dann wenn ein j definiert ist"? Gibt es eine Matrix / einen Vektor in dem die definierten Werte stehen oder meinst du damit einfach nur Matrix-Einträge die nicht 0 sind?
Und ist die Summe der j für alle i gleich oder variiert die Anzahl?
Grüße
Jonas
_________________
1.) Ask Google & Matlab Documentation
2.) Ask gomatlab.de & Technical Support of MathWorks
3.) Go mad, your problem is unsolvable
also der praktische Bezug besteht darin, dass ich Messkanäle i habe die durch verschiedene Punkte j gehen. Wenn Kanal 1 durch Punkt 3, 4 und 7 geht, brauche ich die Differenzen 34 47 und 37. Also Varante 2.
Da die Kanäle i nicht übereinander liegen, kommt es nicht vor, dass Messpunkte, wie du beschrieben hast, auftauchen werden.
Also kein
M(1,3) M(1,4)
M(2,3) M(2,4)
Meine Idee war bisher, dass größte i zu bestimmen, um die Anzahl der Kanäle zu kennen, und dann für jeden Kanal alle Differenzen zu bestimmen, Einträge mit 0 oder NAN dann anschließend löschen. Aber da habe ich noch probleme bei der umsetzung :/
Dadurch erhälst du einen Vektor mit allen Differenzen einer Zeile von M. Willst du das jetzt für alle i, also alle Zeilen machen, musst du das in eine Schleife packen.
Ist noch bisschen Bastelarbeit. Probier' mal aus ob du's hinbekommst. Bei Problem einfach melden, dann versuch ich dir zu helfen
Grüße
Jonas
_________________
1.) Ask Google & Matlab Documentation
2.) Ask gomatlab.de & Technical Support of MathWorks
3.) Go mad, your problem is unsolvable
Zuletzt bearbeitet von J0nas am 14.08.2018, 14:39, insgesamt einmal bearbeitet
Okay, ich habs jetzt weniger schön und allgemeingültig, aber für mich als Anfänger übersichtlicher geschrieben
Code:
%Anzahl der Messkanäle MK
MK = length(M(:,1)); %finde die Anzahl der Spalten
MKi=1; %Schleifenzähler
for MKi = 1:MK;
v=find(M(MKi,:)); %finde die Position in M von Werten größer 0 iflength(v)==2 %für Messstrecken mit zwei Stützpunkten;
S(v(1),v(2))=abs(M(MKi,v(1))- M(MKi,v(2)));
elseiflength(v)==3 %für Messstrecken mit drei Stützpunkten;
S(v(1),v(2))=abs(M(MKi,v(1))- M(MKi,v(2)));
S(v(2),v(3))=abs(M(MKi,v(2))- M(MKi,v(3)));
S(v(1),v(3))=abs(M(MKi,v(1))- M(MKi,v(3)));
end
MKi=MKi+1;
end;
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.