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

Erweiterung von Matrix Dimensionen

 

Berrystudent
Forum-Anfänger

Forum-Anfänger


Beiträge: 23
Anmeldedatum: 16.05.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.09.2018, 15:17     Titel: Erweiterung von Matrix Dimensionen
  Antworten mit Zitat      
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([1 1],[0 0.05],'Color','cyan');
         break
        else
        a100=cat(1,a100,a98);
        dist3=[];
         end
         end
Private Nachricht senden Benutzer-Profile anzeigen


J0nas
Forum-Century

Forum-Century


Beiträge: 208
Anmeldedatum: 10.09.15
Wohnort: ---
Version: ab 2016a
     Beitrag Verfasst am: 20.09.2018, 05:40     Titel:
  Antworten mit Zitat      
Hallo Dominik,

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 Wink

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
Private Nachricht senden Benutzer-Profile anzeigen
 
Berrystudent
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 23
Anmeldedatum: 16.05.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.09.2018, 09:48     Titel:
  Antworten mit Zitat      
Hi Jonas,

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 Smile.

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 Smile. 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.

Code:
     
        figure(10)
         dist3=[];
         a100=[1];

  for e=1:numel(mue2)-99
      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 a99==a98 && a99==0
         a2=(numel(a100)-1)/a1(8,1);
         line([a2 a2],[0 0.05],'Color','black');
 
         break
      else
         a100=cat(1,a100,a98);
         dist3=[];
      end
 end
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 - 2024 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.