Verfasst am: 19.09.2018, 14:17
Titel: Erweiterung von Matrix Dimensionen
Hey Leute,
ich bin beim schreiben leider gleich auf mehrere Probleme gestoßen.
Vorab erstmal ein paar Infos:
Die folgenden Code Zeilen sollen den x-Wert eines Punktes betrachten und mit den nachfolgenden 99 Punkten vergleichen, sollte sich mind 1 weiterer Punkt innerhalb von 0.015m Abstand befinden so folgt ans=1 und schreibt mir dies in einen Vektor.
Nun betrachte ich den nächsten Punkte (in meinem Fall Punkt 10,20,30 usw) und überprüfe wieder ob innerhalb der nächsten 99 Punkte ein mind 1 weiterer Punkt innerhalb von 0.015m befindet. Sollte das der Fall sein läuft das system weiter (schreibt mir den jeweiligen ans=wert, also 1 oder 0, in einem bestehenden vektor) bis in zwei aufeinanderfolgenden Durchläufen kein Punkt innerhalb des Abstandes liegt.
mue2 = Spaltenvektor mit 36278 Werten
a1(8,1) = 10
Konkret ist mein problem dass entweder die Anzahl der werte in mue2 sich nicht durch meine Schrittweite a1(8,1)-1 ganzzahlig teilen lässt oder aber da in meiner zweiten schleife mue2(e2,1) benutzt wird, was e+99 enstprechen kann und somit am Ende der Berechnung die Matrix dimensionen von mue2 sprengt.
Was genau davon der Fehler ist kann ich nicht sagen, die Fehlermeldung lautet nur "Index exceeds matrix dimensions".
Des weiterern würde ich gerne wissen ob es möglich ist das ganze so zu schreiben das es weniger Rechenaufwand darstellt für Matlab, da später die zu Prüfenden werte weit über 1 mio betragen.
Danke schon mal
Grüße
Dominik
Code:
figure(1)
dist3=[];
a100=[];
for e=1:a1(8,1)-1:numel(mue2) for e2=e+1:e+99
dist=abs(mue2(e,1)-mue2(e2,1));
dist3=cat(1,dist3,dist);
end any(dist3>0.015);
a98=ans;
a99=a100(end);
if(a98==a99) && (a98==1)
a100=cat(1,a100,a98);
dist3=[];
elseif(a99==a98) && (a98==0) line([11],[00.05],'Color','cyan');
break else
a100=cat(1,a100,a98);
dist3=[];
end end
Beispieldaten würden die Lösung deines Problems deutlich vereinfachen. Auch wenn du gleich angibst in welcher Zeile dein Fehler auftritt.
Außerdem verstehe ich folgendes noch nicht ganz:
1.) Deine Punkte stehen in mue2, oder? Sollen nur die Abstände in x-Richtung oder in alle Richtungen (x-, y- und z-Richtung) betrachtet werden?
2.)
Zitat:
Nun betrachte ich den nächsten Punkte (in meinem Fall Punkt 10,20,30 usw)
Willst du nur jeden 10. Punkt betrachten, oder warum Punkt 10, 20, 30?
3.) Was genau steht in a1 und a100? Wollte mir das ganze vereinfachen und habe mir Beispieldaten erstellt: Vor der Schleife löscht nämlich a100 und willst dann in der Schleife drauf zugreifen. Das ist der erste Fehler der bei mir erscheint.
4.) Was passiert mit den letzten Punkten in deinem Array/Vektor? Also wenn dein Punktevektor/-Array zum Beispiel 1000 Werte enthält und du jetzt bei Punkt 910 bist -> sollen dann nur noch die nächsten 90 Punkte angeschaut werden, nämlich 910-1000 oder soll dieser Punkt nicht mehr betrachtet werden?
Generell kann ich dir aber schon einmal sagen, dass man das sehr sicher deutlich schneller machen kann
Außerdem solltest du deinen Code bisschen schöner formatieren. Macht es dir und anderen einfacher das ganze zu lesen und Fehler zu finden.
Grüße
Jonas
_________________
1.) Ask Google & Matlab Documentation
2.) Ask gomatlab.de & Technical Support of MathWorks
3.) Go mad, your problem is unsolvable
ich weiß leider nicht wie ich dir die Daten zugänglich machen kann da ich nur einen kleinen teil meines codes hier reingeschrieben hab, kurz gesagt ich hab ca. 36280 Punktwolken aus denen ich mir Datenauslese diese werden aber nur in Matlab variablen gespeichert .
1.) jap meine Punkte stehen in mue2 und es sollen nur die x die Abstände in x-Richtung betrachtet werden, wobei ich den vektor mue2 schon so transformiert habe das er nur meine x-Werte enthält.
2.) Ich würde ganz gern nur jeden 10ten Punkt betrachten da es sonst sehr unübersichtlich wird später
3.) a1 ist eine Rückgabe aus einer gui, im normalfall steht dort einfach der wert 10.
a100 ist ein leerer vektor, hab den fehler aber mittlerweile auch in der aktuellen version korrigiert, das Problem ist das ich einen start Wert in a100 brauch um nach dem ersten Schleifendurchlauf die if abfrage schon machen zu können.
4.) wenn ich bei punkt 910 bin würde ich gern die nächsten 90 Punkte betrachten usw. dafür habe ich allerdings noch gar keine lösung gefunden
Danke für die Tipps, bin leider noch kompletter Anfänger und schreibe das alles noch sehr umständlich . Wie könnte man den sowas besser schreiben und vorallem hab ich öfter gehört das if-Abfragen eigentlich kein guter programmierstil ist.
Das ist jetzt mal die aktuelle Version die auch soweit funktioniert, allerdings musste ich dazu die Schrittweite der for schleife ändern.
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.