%飞行管理问题
clear;clc
format long g
date=[150 140 243; % 绘制飞机的初始位置
8 85 236;
150 155 220.5;
145 50 159;
130 150 230;
0 0 52];
plot(date(:,1),date(:,2),'.r')
axis([0 160 0 160]);
box on;
hold on;
for i=1:6
text(date(i,1)+2,date(i,2)+2,['飞机', num2str(i)],'FontSize',8);%更改字号大小为8
end
x0=zeros(6,1);
lb=-ones(6,1)*pi/6;
ub=ones(6,1)*pi/6;
[x,fval]=fmincon(@fun3,x0,[],[],[],[],lb,ub,@nonlfun3)
function f=fun3(x) %决策变量x为六架飞机调整的角度
f=sum(abs(x))*180/pi; % 目标函数第一种定义:绝对值的和(将弧度转换为度数)
end
function [c,ceq]=nonlfun3(x)
xx= [150 85 150 145 130 0]; % 飞机初始位置的横坐标
yy= [140 85 155 50 150 0]; % 飞机初始位置的纵坐标
theta = [243 236 220.5 159 230 52] * pi / 180; % 飞机初始的飞行方向角
v = 800; % 飞机速度
co=cos(theta+x);
si=sin(theta+x);
d=zeros(6);
for i=2:6
for j=1:i-1
fenzi=(yy(j)-yy(i))*(si(j)-si(i))+(xx(j)-xx(i))*(co(j)-co(i));
fenmu=v*((si(j)-si(i))^2+(co(j)-co(i))^2);
t(i,j)=-fenzi/fenmu;
if t(i,j)<0
d(i,j)=1000;% 此时最初的位置就是相距最近的点,因为最初的时候所有飞机两两之间的距离就大于8,因此未来绝不会相撞,我们令它们的距离为一个特别大的数
else
d(i,j)=sqrt((xx(j)-xx(i)+v*t(i,j)*(co(j)-co(i)))^2+(yy(j)-yy(i)+v*t(i,j)*(si(j)-si(i)))^2);
end
end
end
c=ones(15,1)*8.000001 - [d(2,1); d(3,1:2)'; d(4,1:3)'; d(5,1:4)'; d(6,1:5)'];
% 12个非线性不等式约束: “最短距离>8” 等价于 “8 - 最短距离<0”
% 注意: 由于Matlab标准型中取的是小于等于号,因此这里取一个比8略大的数:8.000001-最短距离<=0 ]
ceq=[];
end
为什么运行的时候报错,哪里有问题?