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

Freiwurf

 

Held
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 31.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.08.2012, 15:44     Titel: Freiwurf
  Antworten mit Zitat      
Hey Leute,

ich bin auch gerade neu hier und ich brauche eure Hilfe bezüglich Matlab.

Ich habe die Aufgabe einen Basketballwurf zu simulieren. Dazu habe ich mir einfach einen Freiwurf ausgesucht. Das Thema habe ich auch schon hier im Forum gefunden aber so wirklich schlau bin ich nicht raus geworden.

Ich stehe noch am Anfang mit dem Programm aber es scheitert einfach an Matlab. Physikalisch und auch rein logisch habe ich alles denke ich verstanden nur weiß nicht nicht so recht wie ich das Programm schreiben soll.

Also ich möchte das ganze nummerisch lösen. Also mithilfe von ode45 oder so. Spin und Luftwiederstand sollen vernachlässigt werden und erstmal möchte ich auch nur durch das zentrum des Korbes werfen.

Code:

function x=freiwurf

hs=2; % Größe des Spielers
l  = 4.225;          
h  = 3.05-5/4*hs;      
g  = 9.81;


theta0Grad = 60; theta0 = theta0Grad*pi/180;

v0 = (l/cos(theta0))*sqrt(g/( 2*(l*tan(theta0) - h)));
vx = v0 * cos(theta0);
vy = v0 * sin(theta0);
axis([0 5 0 3]);
T = l/vx; nt = 500;
t = linspace(0,T,nt);

x = vx*t;
y = vy*t - g*t.*t/2;


xkorb = 4:0.001:4.5;
ykorb = 3.05-5/4*hs;

hold on
plot(xkorb,ykorb)
plot(x,y)
hold off


end


ich habe das hier erstmal ohne z.b. ode45 gelöst...es sind ja die gleichen Gleichungen wie beim schiefen Wurf und über v0 habe ich die abwurfgeschwindigkeit in abhängigkeit vom Winkel berechnet...ich denke das ganze müsste erstmal halbwegs so passen.
Die Frage ist jetzt wie löse ich es numerisch..
..ich habe die DGL vom schiefen wurf genommen muss aber irgendwie meinen abwurfwinkel da mit reinbringen...weiß jetzt nicht ob ich das hier schon machen muss oder im anderen mfile.
Code:

function dz=dgl(t,z)

g=9.81;
dz(1,1)=z(2);
dz(2,1)=0;
dz(3,1)=z(4);
dz(4,1)=-g;

end


function x=basketball

g=9.81;
l=4.225;
h=3.05;
alphagrad=60;
alpha=alphagrad*pi/180;

v0=(l/cos(alpha))*sqrt(g/2*(l*tan(alpha)-h));

x0 =0; z0 = 0;
tspan = [0:0.1:6];
y0 = [x0 v0*cos(alpha) z0 v0*sin(alpha)];
options = odeset('RelTol',1.0e-6);
[t,y] = ode45(@dgl, tspan, y0, options);


plot(y(:,1),y(:,3))



ja es funktioniert nicht so richtig..und weiß auch gerade nicht weiter. Muss sagen das ich mit Matlab echt noch nicht so klar komme.

Wäre super wenn Ihr mir helfen könntet und tipps bzw. Verbesserungen habt für mich. Oder vielleicht hat das einer von euch schonmal programmiert und kann es mir schicken.

grüße
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 01.09.2012, 13:26     Titel: Re: Freiwurf
  Antworten mit Zitat      
Hallo Held,

Herzlich willkommen im Forum und bei Matlab.

In Deiner numerischen Lösung gehst Du davon aus, dass der Ball auf der Höhe 0 startet. Bei der geschlossenen Lösung nimmst Du aber 2m dafür an.

Zitat:
ja es funktioniert nicht so richtig.

Es ist immer gut, eine konkrete Frage zu stellen. Du scheinst ja bereits Schwierigkeiten entdeckt zu haben. Wenn Du diese dann genau erklärst, müssen wir keine Zeit investieren um zu erraten, was denn nun genau nicht so läuft wie Du wünschst, oder ob es vielleicht Fehlermeldungen gibt, da der Code Bugs enthält.

Das Zuschicken von Code ist im Forum nicht gerne gesehen. Einerseits müsste dann dein Lehrer davon ausgehen, dass du schummelst. Andererseits ist es der Zweck des Forums, dass auch andere von Lösungen profitieren können.
Wenn Du woanders im Forum schon Threads zu dem Thema gefunden hast, kannst Du auch konkrete Fragen zu diesen Threads stellen.

Vorschlag: Bitte poste die relevanten Details.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Held
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 31.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.09.2012, 15:39     Titel:
  Antworten mit Zitat      
hey jan,

danke für deine Antwort. Ich habe in der Zwischenzeit das Problem entdeckt und mit meinem Prof gesprochen. So wie ich es eig haben wollte, geht es nicht bzw. sowas hatten wir im Studium noch nicht.

Jetzt soll ich neben einem Treffer noch einen anderen Fall simulieren.

Es soll simuliert werden das ich den vorderen Rand des Rings treffe und der Ball von dort aus wegspringt. Also nicht in den Korb.

Ich möchte das ganze mit einer eventfunktion lösen.

Diese habe ich erstmal so geschrieben.

Code:

 function [value,isterminal,direction]=events(t,y)
       
           
        beta= y(3);

        value = sin(beta);  
        isterminal=1;  
        direction=-1 ;  
     
  end[code]

und nun muss ich mein ode45 ja noch in eine schleife packen in der neue Anfangswerte übergeben werden, damit der Ball wieder wegfliegt bzw. wieder beschleunigt wird.

[/code]
tend=1.5;
t0=0;
tspan=[t0 tend];


y0 = [x0,v0*cos(alpha),y0,v0*sin(alpha)];

talle = []; yalle = [];         %hier werden die Ergebnisse gesammelt

options = odeset('Events',@events);

while t0 < tend
[t,y] = ode45(@dgl,tspan,y0,options);
talle = [talle;t];
yalle = [yalle;y];
t0 = t(end);
y0 = [y(end,1),y(end,3)];

end
t = talle; y = yalle;



meine Frage ist wie ich diese while schleife gestalten muss oder was da noch alle rein muss. Am Ring habe ich jetzt mal festgelegt das dort herrscht Einfallswinkel=Ausfallswinkel. Also der Ball fällt auf den Ring und fliegt im gleichen Winkel wieder weg.

Ich hoffe ich habe es halbwegs erklärt. Ich bin echt blutiger Anfänger und hoffe ihr habt ein paar tipps für mich.

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

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 31.08.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.09.2012, 18:42     Titel:
  Antworten mit Zitat      
oder hat einer eine Ahnung wie man die eventfunktion anwendet und quasi ein Objekt in meinem Fall einen Basketball an einer bestimmten Stelle (4.225,3.05) zu stoppen und durch übergabe neuer Anfangswerte den Ball wieder von dort abprallen zu lassen.

Da muss doch einer einen Tipp haben ob das oben schon so halbwegs passt.

derzeit kommt noch die Fehlermeldung wenn der Ball kurz vor dem Korb ist:

??? Attempted to access y(4); index out of bounds because numel(y)=2.

Error in ==> dgl at 7
dy(3,1)=y(4);
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 - 2025 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.