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

Zeit für Weg mit veränderlicher Geschwindigkeit?

 

RoyalFlush
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 82
Anmeldedatum: 27.10.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.03.2011, 11:16     Titel: Zeit für Weg mit veränderlicher Geschwindigkeit?
  Antworten mit Zitat      
Hallo,

sorry für den etwas umständlichen Titel.

Ich habe folgendes Problem. Sagen wir ich habe eine Strecke AB. Ich fahre diese Strecke mit meinem Auto, aber mit einer nicht konstanten Geschwindigkeit. Die Funktion der Geschwindigkeit ist mir bekannt.

Wie kann ich berechnen wie lange ich für die Strecke mit der bekannten Funktion der Geschwindigkeit brauche?

Und wie kann ich das so schnell (effizient) wie möglich in Matlab berechnen?

Bitte um Eure Hilfe,
Danke sehr!
Private Nachricht senden Benutzer-Profile anzeigen


aj.geissler
Forum-Guru

Forum-Guru



Beiträge: 251
Anmeldedatum: 26.11.07
Wohnort: Seeheim-Jugenheim
Version: ---
     Beitrag Verfasst am: 08.03.2011, 11:29     Titel:
  Antworten mit Zitat      
Hi,

für die zurückgelegte Strecke gilt:

s(t)= Integral (v(µ) dµ ) von µ=0 bis µ=t.

Für einen ganz einfachen Ansatz in Matlab könnte man folgendes machen:
Annahme: Die Geschwindigkeitswerte liegen in einem Vektor V vor. Jedes Vektorelement wurde nach einer definierten Zeitdifferenz erfasst (Bsp. Samplerate = 1 Hz, d.h. 1 Wert / Sekunde).

Die Integration kann durch eine einfache Kumulation aproximiert werden (z.B. mit Hilfe von cumsum).

S=cumsum(V) .*dt % dt ist hier in diesem Fall 1 Sekunde

Nun bestimmen wir den Index des Wegvektors S, der der gesuchten Wegstrecke AB (=: Sx) entspricht.

deltaS = abs ( S - Sx);
ki=find(deltaS == min(deltaS));

Die gesuchte Zeit tx berechnet sich dann zu:
tx=ki * dt %(dt ist hier wie gesagt 1 Sekunde)

Die numerische Integration kann anstelle von cumsum auch mit genaueren Berechnungsmethoden approximiert werden.
Das Prinzip sollte aber gleich bleiben.

Grüße
Andreas
Private Nachricht senden Benutzer-Profile anzeigen
 
RoyalFlush
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 82
Anmeldedatum: 27.10.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.03.2011, 11:53     Titel:
  Antworten mit Zitat      
Vielen Dank für Deine Antwort.

Leider ist mir das zu ungenau, ich würde die Zeit so genau wie möglich brauchen. Zumindest mal auf 2 oder 3 Nachkommastellen.

Ich habe mal eine Skizze angefügt wie mein Problem aussieht.

Danke!

variableSpeed.png
 Beschreibung:

Download
 Dateiname:  variableSpeed.png
 Dateigröße:  91.83 KB
 Heruntergeladen:  823 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas84
Forum-Meister

Forum-Meister


Beiträge: 546
Anmeldedatum: 10.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.03.2011, 15:30     Titel:
  Antworten mit Zitat      
Code:

s_ab = 7.4;
t = linspace(0,10,1000);
v = 1 + sin(2*pi*0.1*t);

dt = diff(t);
v = v(2:end);
s = [0,cumsum(v.*dt)];
t_ab = interp1(s,t,s_ab);
 


ich würde interpolieren statt nur den passenden Index raus zu suchen. Das dürfte noch ein klein wenig genauer sein (je nachdem wie die Diskretisierung ist)

viele Grüße
Thomas
Private Nachricht senden Benutzer-Profile anzeigen
 
aj.geissler
Forum-Guru

Forum-Guru



Beiträge: 251
Anmeldedatum: 26.11.07
Wohnort: Seeheim-Jugenheim
Version: ---
     Beitrag Verfasst am: 08.03.2011, 18:19     Titel:
  Antworten mit Zitat      
Hi,

hinsichtlich Genauigkeit bieten sich viele weitere Lösungsmöglichkeiten.
So könnte man auch eine Simpson-Integration oder andere verwenden.

Aber ansonsten ist das Prinzip der rein numerischen Lösung perfekt verwirklicht.

Grüße
Andreas

Falls die Abtastzeitpunkte nicht äquidistant sind, muss man halt noch einen Vektor dt bilden und in die Berechnung einbeziehen.
Private Nachricht senden Benutzer-Profile anzeigen
 
RoyalFlush
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 82
Anmeldedatum: 27.10.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.03.2011, 01:50     Titel:
  Antworten mit Zitat      
Hi!

Ich habe meine Problemstellung etwas falsch formuliert. Ich habe eine Strecke AB (z.B. 100m), fahre von A los und werde immer langsamer je naeher ich an B komme. Ich werde aber nicht konstant langsamer sondern nach einer bestimmten Funktion. Ich will wissen wann ich an einem gewissen Punkt vor dem Ziel ankomme (z.B. 30 m vor B).

Kann ich nicht auch eine Differentialgleichung aufstellen und die nach t loesen? Ich habe mal folgendes gemacht:

Die Funktion meiner Geschwindigkeit lautet:
v(x) = -K * x^2
wobei K eine Konstante ist.

Die Differentialgleichung lautet:
dx/dt = -K * x^2

nach Trennung der Variablen und Integration folgt:

-1/x = -K*t + c1

Zum Zeitpunkt t=0 ist x=L, daraus folgt c1 = -1/L.

Das ganze eingesetzt und dann nach t umgewandelt ergibt mir

t = (1/x - 1/L)/K


Kann ich das so machen? Fuer x wuerde ich die 30m einsetzen und fuer L die 100m.

Vielen Dank!
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas84
Forum-Meister

Forum-Meister


Beiträge: 546
Anmeldedatum: 10.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.03.2011, 07:12     Titel:
  Antworten mit Zitat      
Um zur Lösung zu kommen musst du auf jeden Fall

1. x(t) bestimmen
2. die Gleichung x(t') = x' lösen

beides kann man natürlich auch analytisch machen. Deine Lösung für diese spezielle Geschwindigkeitsfunktion ist ja auch richtig. Wenn du analytisch rechenen willst kannst du so vorgehen:

Code:

syms L k s;
x = dsolve('Dx = -k*x^2','x(0) = L');
x = char(x);
sol = solve([x,'=s']);
t = subs(sol,{L,s},{100,30});
 
Private Nachricht senden Benutzer-Profile anzeigen
 
christian964
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 19.04.22
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.04.2022, 07:17     Titel:
  Antworten mit Zitat      
Hallo,

ich bin neu in dem Forum und noch nicht so ganz Sattelfest in MATLBA.

Ich habe ein ähnliches Problem wie RoyalFlush.

Ich habe aus einer Messung einen Vektor erhalten, welcher den zurückgelegten Weg eines Zylinders beinhaltet. Die Darstellung des Weges im Plot wird über den Datenpunkten angezeigt. Die Datenpunkte haben einen konstanten Abstand, ausgehend von der Abtastrate.
Ich möchte gerne den zurückgelegten Weg über der Zeit darstellen. Dafür habe ich auch schon die Geschwindigkeit ermittelt unter Zuhilfenahme der diff-Funktion.

Bei der Berechnung der Zeit läuft allerdings was schief.

Code:
%ich wollte den Weg elementweise durch die Geschwindigkeit teilen.

s=weg %1x499 double
v=Geschwindigkeit %1x499 double

t=s./v
 


Vielleicht hat einer einen Tip wie ich das korrekt hinkriege, so dass die Zeit bei 0 beginnt und dann eben in konstanten abständen zunimmt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.04.2022, 11:13     Titel:
  Antworten mit Zitat      
Hallo,

wenn s der zurückgelegte Weg ist und v die durchschnittliche Geschwindigkeit auf diesem Weg, dann müsste das passen.

Zitat:
Die Datenpunkte haben einen konstanten Abstand, ausgehend von der Abtastrate.

Dann sollte sich der Zeitvektor doch direkt erstellen lassen?
Code:
t = (0:length(s)-1)*dt;


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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
christian964
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 19.04.22
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.04.2022, 13:07     Titel:
  Antworten mit Zitat      
Das Problem ist, dass ich die Abtastrate aktuell nicht weis. Das Elementweise dividieren liefert allerdings für mich nicht plausible Ergebnisse (sie Bild).

Fürs Grundverständnis, ich möchte gerne den zurückgelegten Weg über der Zeit plotten.

untitled.jpg
 Beschreibung:

Download
 Dateiname:  untitled.jpg
 Dateigröße:  21.26 KB
 Heruntergeladen:  112 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.04.2022, 14:09     Titel:
  Antworten mit Zitat      
Hallo,

wenn du die Abtastrate nicht kennst, wie hast du denn dann die Geschwindigkeit berechnet?
Ich weiß ja nicht, was du zu sehen erwartest. Inwiefern sind die Ergebnisse nicht plausibel?

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 ;)
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.