Skrått kast
I fysikkbøkene i videregående skole finner man formlene
g
der f.eks. er begynnelsesfarten for et prosjektil som skytes ut, og som danner vinkelen med bakken ( ).
Vi kan også finne disse ligningene ved å løse differensialligningene
,
der er gitt ved
,
Her viser jeg først hvordan det kan gjøres " manuelt ", omtrent som man gjør på tavla.
> lign1:=diff(x(t),t) = v[0]*cos(theta);
> map(Int,lign1,t=0..T); #% betyr siste kommenado
> value(%); #% betyr siste kommando. value beregner integralet
> subs(x(0)=0,T=t,%); #putter inn x(0)=0 og T=t inn i utrykket over
Direkte beregning
> dsolve({lign1,x(0)=0},x(t)); #dsolve løser differensialligninger
Så tar vi for oss beregning av .
> lign2:=diff(v[y](t),t) = -g;
> map(Int,lign2,t=0..T);
> value(%);
> subs(v[y](0)=v[0]*sin(theta),T=t,%);
> lign3:=v[y](t)=solve(%,v[y](t));
Så finner vi ved:
> lign4:=diff(y(t),t) = v[y](t);
> subs(lign3,lign4);
Integrasjon gir:
> map(Int,%,t=0..T);
> value(%);
> subs(y(0)=0,T=t,%);
Direkte beregning
> dsolve({lign2,v[y](0)=v[0]*sin(theta)},v[y](t));
> dsolve({diff(y(t),t)=v[0]*sin(theta)-g*t,y(0)=0},y(t));
Vi kunne også ha løst hele systemet av differensialliginger
> sys:=lign1, lign2,lign4;
i en operasjon.
NB! Siden er en variabel og vi også har brukt som en indeks i , vil Maple få problemer med å skille disse -ene fra hverandre. Derfor bytter jeg ut med .
> sys := diff(x(t),t) = v[0]*cos(theta), diff(vy(t),t) = -g, diff(y(t),t) = vy(t);
> dsolve({sys,x(0)=0,y(0)=0,vy(0)=v[0]*sin(theta)},{x(t),y(t),vy(t)});
Plotting
Vi plotter og som funksjoner av i samme koordinatsytem. La oss anta at , og .
> xt:=25*cos(Pi/4)*t: yt:=25*sin(Pi/4)*t-1/2*9.8*t^2: # : hindrer utskrift
>
plot([xt,yt],t=0..4,color=[red,blue],title=`Skrått kast, x=x(t): rød; y=y(t): blå`);
Vi kan også eliminere og fremstille grafisk.
> tk:=solve(x=xt,t);
> subs(t=tk,y=yt);
> plot(x-0.01568*x^2,x=0..70,labels=[`x`,`y(x)`],title=`Skrått kast`);
Kast under forskjellige vinkler kan animeres.
Da finner vi først
av ligningene
og
. For å slippe den
manuelle
elimineringen, lar jeg Maple gjøre jobben direkte.
> readlib(eliminate):
> eliminate({x = 25*cos(theta)*t,y = 25*sin(theta)*t-9.8*t^2/2 },{y,t});
Her er gitt i radianer. Med input i grader definerer vi yk = y ved:
> yk:=-.1600000000e-3*x*(-6250.*sin(theta/180*Pi)*cos(theta/180*Pi)+49.*x)/(cos(theta/180*Pi)^2);
> with(plots):
>
animate(yk,x=0..65,theta=0..70, color=red,view=[0..70,0..40],frames=20,scaling=constrained, title=`Prosjektilbaner`);
Her varierer i intervallet og i intervallet .