根据侦察,发现离我军大炮阵地水平距离10km的前方有一敌军的坦克群,现欲发射炮弹摧
毁敌军坦克群。问题可简化为单门大炮对移动坦克的精确射击问题.假设炮弹发射速度可控
制在0.2km/s至0.6km/s之间.在上述假设下,研究下列问题:
假定坦克在大炮前方10km处以每小时50km向大炮方向前进,此时应如何选择发射速度和角度,能够在最短时间内摧毁敌军坦克?
你好同学这是一个规划问题,即时间t是目标函数,规划变量有射出速度v和仰角theta
约束条件为
0.2<=v<=0.6;
t = 2*v*sin(theta)/g;
vp*t+v*cos(theta)*t=S;%S是水平距离,vp是坦克速度
所以最后我们不妨令时间t、速度v和仰角theta三个为规划变量,那么分别令其为x(1),x(2)和x(3)
有如下代码,仅供参考(注释都有):
function main
objfun = @(x) x(1);%目标函数,即时间t的大小,这里是t = x(1)
g = 9.8e-3;%km/s^2
vp = 50/3.6/1000;%km/s
S = 10;%初始距离
flag = 0;
while(flag<=0)
% [0,1,0; 0,-1,0]*x<=[0.6;-0.2] 即保证 0.2<=x(2)<=0.6
% rand(1)*[0.1; 0.4; pi/6]为x初始值
% nlinfun 为非线性函数
[x, tmin, flag] = fmincon(objfun, rand(1)*[0.1; 0.4; pi/6], [0,1,0; 0,-1,0],[0.6;-0.2],...
[],[],[],[],@(x)nlinfun(x, vp, S, g));
end
% 输出结果
fprintf('速度:%.8f km/s ; \n角度:%.8f °(度)\n最短时间:%.8f s\n', x(2), x(3)*180/pi, x(1))
end
function [c,ceq] = nlinfun(x, vp, S, g)
ceq = [x(1) - 2*x(2)*sin(x(3))/g;
vp*x(1)+x(2)*cos(x(3))*x(1)-S];%等式约束两个,一个是竖直方向耗时,一个是水平方向耗时
c = [];%不等式约束为空
end
最后得到的结果为:
速度:0.60000000 km/s ;
角度:7.71344025 °(度)
最短时间:16.43493589 s
有帮助还请题主给个采纳,深夜答题不易,先行感谢
请问楼主怎么运行呢