BÀI GIẢNG MATLAB - Trang 206

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