nein ich denke mit
diff
und
spline
bist du bei dem was du vor hast schon ganz gut dran! Was du noch machen kannst ist, dass du in deiner function den ersten Wert für den Weg auf Null setzt - da er ja bei null beginnt und nach der ersten Berechnung mit
diff
seinen zurückgelegten Weg erreicht!
Ist aber nur eine Spielerei - du kannst aber gerne nochmal deinen gesamten Code posten - dann schau ich gerne drüber ob noch was interessantes zum erwähnen wäre!
function[ weg ] = s_rand( x , y )
%s_rand Berechnet kummulativ einen Vektor der die Strecke für die
%Randpunkte der Strecke ausgibt.
%weg = zeros(size(x),1) ; % Erstellung des Vektors in geeigneter Größe % Belegung des Vektors
for k = 1:size(x) if(k>1)
weg(k) = weg(k-1) + sqrt((x(k)-x(k-1))^2+(y(k)-y(k-1))^2);
end if(k==1)
weg(k) = sqrt((x(k))^2+(y(k))^2);
end
Es spart erheblich Rechenzeit wenn Ergebnisvektoren, welche in einer Schleife verwendet werden, schon vor der Schleife pre-allociert sind. Dadurch wird ständiges Umspeichern vermieden. Vorraussetzung ist natürlich das du die Dimensionen des Ergebnisvektors kennst/abschätzen kannst.
noch ein kleiner Anreiz von mir - du kannst im Prinzip in diesem Fall die for-Schleife komplett weglassen, da alles nötige bekannt ist - ich habs mal so gelöst:
Code:
weg(1) = sqrt(x(1)^2+y(1)^2); %1.Weg ist jeweils von 0 bis x(1) bzw. y(1)
Soll das gleiche Ergebnis bringen - ich finds persönlich ohne Schleifen besser! MatLab ist auch dafür gemacht mit Matrizen zu rechnen ohne die Verwendung von Schleifen
x und y werden mir später als eine (n,2), aber die kann ich dann ja auslesen und anders abspeichern. ich hab mir nur mal selbst etwas schreiben wollen, um mich in das thema hinein zu arbeiten.
Wow das geht? Heißt das das
diff
zuerst dann x(1)-0 berechnet und dann eben x(2)-x(1)? Also er setzt im Prinzip einfach eine 0 vor meinen Zeilenvektor x?
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.