如何使用割线方法计算角度b(正x轴和负y轴之间)我必须抛出一个球才能让它落在x轴上,具有以下条件:
球从原点抛出,高度为z = 1.4 m,角度为a(水平面)为30°,速度为25 m / s。空气阻力系数c = 0.070,地面风力为7 m / s,随着高度的增加而增加:a(z)= 7 + 0.35z。
球的运动描述如下: x' = - qx',y'' = - q(y' -a(z)),z'' = - 9.81- qz',q = c * sqrt(x' ^ 2 +(y' -a(z))^ 2 + z' ^ 2)
我做了一个变量替换(u)然后使用RK4来计算球的运动,但我无法弄清楚如何使用割线方法来找到角度b。问题在于,当我用这些开始和猜测值绘制时,球不会落在x轴上:
clear all, close all, clc
a = pi/3; %start angle
c = 0.07; % air resistance coeff.
v0 = 25; %start velocity, 25 m/s
t = 0; %start time
h = 0.1; % 0.1 second step
b = 0
x0 = 0; xPrim = v0*sin(a)*cosd(b);
y0 = 0; yPrim = v0*sin(a)*sind(b);
z0 = 1.4; zPrim = v0*cos(a);
u = [x0 xPrim y0 yPrim z0 zPrim]';
uVek = u';
% Secant method
b0 = 270; % Start guess nr 1
b1 = 360; % Start guess nr 2
f0 = funk (b0);
db = 1;
while abs(db) > 0.5e-8
f1 = funk (b1);
db = f1 * (b1 - b0) / (f1 - f0);
b0 = b1; % Updates b0
f0 = f1; % Updates f0
b1 = b1 - db % new b
end
while u(5) >= 0 && u(3)<=0
f1 = FRK4(t,u);
f2 = FRK4(t+h/2,u+(h/2)*f1);
f3 = FRK4(t+h/2,u+(h/2)*f2);
f4 = FRK4(t+h,u+h*f3);
f = (f1 + 2*f2 + 2*f3 + f4)/6;
u = u + h*f;
uVek = [uVek; u'];
t = t+h;
end
x = uVek(:,1)'; y = uVek(:,3)'; z = uVek(:,5)';
plot3(x,y,z)
xlabel('X');
ylabel('Y');
zlabel('Z');
grid on
其中FRK4是一个函数:
function uPrim = FRK4(t,u)
c = 0.07;
az = 7+0.35*(u(5));
q = c*sqrt(u(2)^2 +(u(4)- az)^2 + u(6)^2);
uPrim = [u(2) -q*u(2) u(4) -q*(u(4) - az) u(6) -9.81-q*u(6)]';
end
其中funk是一个函数:
function f = funk(b)
a = pi/3
v0 = 25
x0 = 0; xPrim = v0*sin(a)*cosd(b);
y0 = 0; yPrim = v0*sin(a)*sind(b);
z0 = 1.4; zPrim = v0*cos(a);
f = [x0 xPrim y0 yPrim z0 zPrim]';
end