Verfasst am: 11.12.2021, 09:39
Titel: Ausgleichsgerade nur in bestimmten Bereich
Hallo zusammen
Folgendes Problem:
Ich möchte eine Ausgleichsgerade über meine Funktion legen, welche aber nur einen gewissen Bereich berücksichtigt (z.B. immer nur 5 Punkte, dann die nächsten 5 usw.)
Die Daten sind im Anhang. Diese ergeben zunächst eine 3D-Punktwolke, aus welcher ich die gewünschte 2D-Funktion ausgelesen habe (sozusagen ein Schnitt durch die Punktwolke)
Ich danke euch für eure Hilfe
Code:
M = readmatrix("Messung_4_effektiv.txt");
x = (M(:,1));
y = (M(:,2));
z = (M(:,3));
ptCloud = pointCloud(M);
ptCloud
pcshow(ptCloud) zlim([-2300-1800])
was hast du versucht, welche Probleme sind dabei aufgetreten?
Mit
polyfit
sollte das recht schnell gehen. Du brauchst nur jeweils die Punkte zu extrahieren, mit denen du arbeiten willst. Was soll mit den letzten Punkten gemacht werden, falls die Anzahl der Punkte nicht durch z.B. 5 teilbar ist?
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Hallo Harald
Ich habe wenig Erfahrung mit Matlab, deshalb habe ich die Funktion Polyfit an einem einfacheren Beispiel ausprobiert. Da funktioniert diese auch, jedoch eben über den gesamten x-Bereich. Wie kann ich diesen Bereich eingrenzen? Beispielsweise nur zwischen x=-500 und x=500.
Was bei den letzten Punkten geschehen soll, falls zu noch zu wenig vorhanden sind, spielt keine grosse Rolle. Es kann auch eine Ausgleichsgerade über die noch verfügbaren Punkte legen.
Vielleicht sollte ich noch anmerken, dass das schlussendliche Ziel ist, die einzelnen Steigungen zu bestimmen. Dies sollte jedoch die Funktion Polyfit ausgeben, wenn ich das richtig verstanden habe?
und z-Werte entsprechend filtern. Entscheidend ist für mich aber, dass das jetzt eine andere Frage ist als die ursprüngliche. Es hilft ungemein, sich im voraus zu überlegen, was man machen möchte.
Vielleicht sollte ich noch anmerken, dass das schlussendliche Ziel ist, die einzelnen Steigungen zu bestimmen. Dies sollte jedoch die Funktion Polyfit ausgeben, wenn ich das richtig verstanden habe?
Ja. Wenn man die Koeffizienten einer Ausgleichsgeraden hat, hat man insbesondere auch ihre Steigung.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Ich habe das ganze nun in einen Loop verpackt, damit es die gesamten Daten abarbeitet. Nun möchte ich aber, dass die Variablen jeweils den jeweiligen Schleifenindex im Namen tragen.
Code:
for i = 1:2:anzahlWerte-2
k = (i:i+2);
rZone = rSelect5_1(k);
zZone = zSelect5_1(k);
t1 = polyfit(rZone, zZone,1)
x1 = rZone
z1 = polyval(t1,x1)
Dieser Code gibt mir jeweils t1, x1 und z1 an, überschreibt jedoch immer den vorherigen. Wie erreiche ich es, dass jeweils x1, x2, x3 usw. ausgegeben und gespeichert wird? Ich sollte anschliessend mit den jeweiligen Werten weiterrechnen.
Damit keine Lücken im Array entstehen, würde ich versuchen, die for-Schleife in der Form
for j = 1:N
und dann i daraus berechnen.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
wahrscheinlich hast du von vorherigen Versuchen noch t, x und z im Speicher. Führe mal
clear
aus.
Das innere sollte keine for-Schleife sein, eher:
for j = 1:anzahlWerte
i = j:2:anzahlWerte-2
wobei i wohl nicht bis "anzahlWerte" gehen sollte.
Langfristig sollte man t, x und z auch als Cell Arrays vorbelegen.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Der Fehler bleibt leider weiterhin bestehen. Ich habe etwas ähnliches mit der Funktion eval gelesen, denkst du dass es allenfalls mit dieser gehen würde?
Um vielleicht zu verdeutlichen was ich genau will, hinterlege ich dir hier den vollständigen Code:
Code:
M = readmatrix("Messung_4_effektiv.txt");
x = (M(:,1));
y = (M(:,2));
z = (M(:,3));
ptCloud = pointCloud(M);
ptCloud
pcshow(ptCloud) zlim([-2300-1800])
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Es funktioniert
Ich danke dir Harald!
Damit kann ich gut weiterarbeiten. Nun muss ich den Code noch so erweitern, dass es dies auf sämtliche Winkel anwendet. Falls ich nicht weiterkomme, melde ich mich wieder.
Danke!
Gruss
IG
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.