204
2
2
,
,
mx
cvx
my
mg
cvy
v
x
y
= −
= −
−
=
+
ɺɺ
ɺ
ɺɺ
ɺ
ɺ
ɺ
Biết rằng vận tốc của viên ñạn khi thoát khỏi miệng là nòng
0
v
. Hãy xác ñịnh góc
nghiêng
θ ñể viên ñạn ñạt mục tiêu ở khoảng cách 8 km. Sử dụng các số liệu
20 kg,
m
=
4
3.2 10 kg/m
c
−
=
×
,
0
500 m/s
v
=
, và
2
9.80665 m/s
g
=
.
Phương pháp giải bài toán như sau, trước hết ta bắn thử với góc bắn
θ nào ñó giải
phương trình vi phân chuyển ñộng ta nhận ñược ñiểm tiếp ñất với tầm xa
( )
L
L
θ
=
, so sánh ñiểm rơi này mục tiêu ta ñược một sai lệch
( )
( )
mt
r
L
L
θ
θ
=
−
Từ phương trình sai số này cho ta xác ñịnh ñược góc bắn cần thiết.
Trong matlab ta cần xây dựng các m-file sau:
function F = dEqs(t,y) % First-order differential equations.
m = 20; c = 3.2e-4; g = 9.80665;
x_ = y(1); vx = y(2); y_ = y(3); vy = y(4);
v = sqrt(vx^2+vy^2);
xdot = vx; vxdot = 1/m*(-c*v*vx);
ydot = vy; vydot = 1/m*(-m*g-c*v*vy);
F = [xdot, vxdot, ydot, vydot]';
function y = inCond(v0, theta)
y = [0 v0*cosd(theta) 0 v0*sind(theta)]';
function r = residual(theta)
global tSTART tSTOP h k v0
k=k+1
[tSol,ySol] = ode45(@dEqs,[tSTART:h:tSTOP],inCond(v0, theta));
% tim thoi gian chuyen dong
for j = 50:length(tSol)
if ySol(j,3)>=0 && ySol(j+1,3)<0
t_ground(j) = tSol(j); ki = j+1;
end
end
% Tam xa L(theta)
tamxa = ySol(ki, 1); r = tamxa-8000;
function root = newtonRaphson2(func,x,tol)
if nargin == 2; tol = 1.0e-8; end
if size(x,1) == 1; x = x'; end % x must be column vector
for i = 1:30
[jac,f0] = jacobian(func,x);
if sqrt(dot(f0,f0)/length(x)) < tol root = x; return end