Verfasst am: 18.11.2007, 12:41
Titel: Schiefer Wurf mit Luftwiderstand
Hallo!
Also ich habs geschafft den normalen schiefen Wurf zu programmieren. Aber jetzt möchte ich den Luftwiderstand einbauen und weiß nicht weiter.
Übers internet hab ich herausgefunden dass ich das auf jeden Fall mit einer While Schleife machen muss... Sonst find ich nur seitenlange berechnungen die ich nicht durchschau...
und ich glaub ich bin auch in meiner Überlegung falsch weil ich darf von einer Geschwindigkeit doch keine Kraft einfach abziehen? (ich stelle geschwindigkeit über weg dar)
Danke, aber die Formel war mir eigenlich eh klar.
Es geht nur darum ob ich
v- Fw rechnen darf. und so eine schleife aussschauen sollte?
ich habe eine geschwindigkeit in x und in y richtung (vx,vy), beziehungsweise auch nur v. Soll ich jetzt eine Schleife machen die über die Zeit den Luftwiderstand eifnach abzieht?
War meine erste Überlegung aber da wird die Geschw. sofort negativ.. und das ist ja physikalisch unmöglich...
ps.: die aufgabe ist wie schon der titel: Programmierung von einem schiefen Wurf mit Luftwiderstand. Parameter sind frei wählbar.
Moin,
ich denke du bist gedanklich noch auf dem Holzweg
Wenn du den Luftwiderstand mit ins Spiel bringst, muss dir klar sein, dass er sich in Abhängigkeit von der Geschwindigkeit ändert (wie in der Gleichung von Martin).
Das bedeutet, du musst dir zu jedem Zeitschritt deines Wurfes die Geschwindigkeit errechnen und kannst daraus dann den zugehörigen Luftwiderstand errechnen.
In diesem Moment bist du bei Differentialgleichungen (DGL) und die kann man in MATLAB mit ODE-Solvern lösen. Also nichts mit WHILE-Schleifen (sollten hier nix zu suchen haben )
Grüße
Alex
PS: sonst poste doch deine bisherige Lösung - vllt. hab ich die Aufgabenstellung an sich doch noch nicht richtig verstanden...
_________________
Das bedeutet, du musst dir zu jedem Zeitschritt deines Wurfes die Geschwindigkeit errechnen und kannst daraus dann den zugehörigen Luftwiderstand errechnen.
mit FL = Luftwiderstandsbeiwert (cw) * Fläche Fallschirm (A) * Luftdichte/2 * Fallgeschwindigkeit² dieser Formel bekomme ich als Ergebnis eine Kraft, Die Luftwiderstandskraft.
Aber keine Geschwindigkeit...
ich verstehs nicht...
steve hat Folgendes geschrieben:
In diesem Moment bist du bei Differentialgleichungen (DGL) und die kann man in MATLAB mit ODE-Solvern lösen. Also nichts mit WHILE-Schleifen (sollten hier nix zu suchen haben )
ODE... damit kann ich überhuapt nicht umgehen...
und das mit der while-Schleife hab ich aus dem Internet....
Vielleicht hat ja jemand die Geduld mir das nochmal zu erklären...
kannst du dir den Widerstand berechnen. Allerdings brauchst du die Geschwindigkeit für diese Berechnung (Fallgeschwindigkeit²).
Ich denke du hast dir bis jetzt ein Programm geschrieben, welches für eine bestimmte Anfangsgeschwindigkeit eine Geschwindigkeit zu einem bestimmten Zeitpunkt berechnet, oder?
Das ist in etwa schon richtig, nur kannst du dann auch nur für diesen Zeitpunkt den Luftwiderstand berechnen - klar soweit?
Was wir jetzt brauchen, sind zwei DGLen. Eine für die Geschwindigkeit und eine für den Luftwiderstand.
Die für den Luftwiderstand (LW) haben wir ja schon (wenn wir diese nehmen können?!):
Die Gleichung für die Geschwindigkeit brauchen wir noch (hast du aber oder?).
Jetzt gehts ans Eingemachte
Mit der LW-Gleichung können wir den LW für den Beginn des Wurfes berechnen, da wir die Anfangsgeschwindigkeit ja schon haben.
Da der LW eine Kraft ist, müssen wir diese noch in eine Beschleunigung umrechnen!
Zitat:
F=m*a
Dann erstellst du die Differentialgleichung für die Geschwindigkeit in der Form dv/dt = ...
zur Programmierung:
du schreibst dir eine Funktion
Code:
function dxdt = geschw(t,x,p) % t ist der Zeitvektor; x ist der Vektor der Geschwindigkeit und p ist eine Structvariable mit den Parametern
v = x; % Übergabe der Anfangsbedingung v0 (wo diese definiert wird, das kommt noch)
% Jetzt folgen die eigentlichen Berechnungen: % 1. für den Luftwiderstand:
LW = p.cw*p.A*p.rho_L/2*v^2;
% 2. für die Geschwindigkeitsänderung:
dvdt = ...; %hier muss dann die Gleichung rein die du erstellt hast
dxdt = dvdt; % Überschreiben der Änderungen in den dxdt-Vektor (mann kann auch gleich mit x und dxdt rechnen - allerdings mach ich das immer so, dann behält man besser den Überblick)
Und jetzt noch das file für den Aufruf der Funktion:
Code:
% definierst du die Parameter und Anfangsbedingungen:
p.A = ...; %m² Fläche
p.cw = ...; %Widerstandsbeiwert
p.rho_L = ...; kg/m³ Luftdichte
p.g = 9.81; % m/s² Fallbeschleunigung
p.v0 = ...; % m/s Anfangsgeschwindigkeit
p.alpha = ...; % Abwurfwinkel
p.tend = ...; % s Simulationsende
%falls weitere Parameter benötigt werden, in der gleichen Art definieren
% Definition des Simulationszeit und der Anfangsbedingungen:
tsp = [0 p.tend];
x0 = p.v0;
% Aufruf des ODEsolvers:
[T,V] = ode45(@geschw,tsp,x0,[],p);
% Diese Zeile gibt die Lösung der DGL in der Funktion geschw() zu den Zeitpunkten T mit den Werten V zurück % Diese kannst du dir nun plotten: figure,
plot(T,V);
Das müsste es gewesen sein!
Ich hab das jetzt so aus dem Kopf rekonstruiert und hoffe das es halbwegs funktioniert!
Falls nicht, dann schreib einfach nochmal hier rein - wo es hakt
Also ich versuch das jetzt schon ewig und kriegs einfach nicht hin. Meine geschwindigkeitsformel stimmt überhaupt nicht. und mir läuft die zeit davon. Ich seh nur mehr rote Fehlermeldungen
Hilfe!
kann nicht funktionieren, da dein Vektor qW nur 4 Spalten hat.
Ansonsten läuft das Programm in der Form bei mir ohne Fehler!
Ich vermute, dass der Vektor q(2) bzw. qW(:,2) die Geschwindigkeit (-änderung) in x-Richtung und analog q(4) bzw. qW(:,4) in y-Richtung ist, richtig?
Wenn dem so ist und du die Gesamtgeschwindigkeit über den Weg x plotten willst, musst du den plot-Befehl folgendermaßen ändern:
Damit wird auf der x-Achse der Weg x aufgetragen und auf der y-Achse die Vektoraddidtion der Einzelgeschwindigkeiten, also die Gesamtgeschwindigkeit.
Analog kannst du für die Einzelgeschwindigkeiten ebenfalls Plots anfertigen:
Code:
hold on,
plot(qW(:,1),qW(:,2),'b','LineWidth',2), % für v_x über x plot(qW(:,1),qW(:,4),'r','LineWidth',2), % für v_y über x plot(qW(:,3),qW(:,4),'k','LineWidth',2), % für v_y über y hold off,
alles klar !! ich weiß schon was mein problem war! und zwar hab ich ganze zeit erwartet dass eine schöne wurfkurve kommt. aber ich hab vergessen die Absprungbeschleunigung beim ersten Mal dazuzuzählen. DAmit würd ja eine kurzzeitige Geschwindigkeitserhöhung kommen. Wisst ihr was ich meine?
also ich programmiere ja eigentlich einen sprung mit anlauf. aber da der sprung ja eigentlich ein schiefer wurf ist hab ich hier einfach wurf geschrieben.
Naja, dann halt die Absprungkraft in x- und y-Anteil zerlegen und mit der Masse mutliplizieren, dann hast du die Beschleunigung in x- und y-Richtung. (Für alle die, die sich auch mal an einer solchen Aufgabe versuchen wollen/müssen )
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.