function [fitness]=PSO_fun(x) %目标函数
global elementpattern lambda D theta M  %把全局变量传递进来
amp=x(1:M/2);%对称分布
pha=pi*double(x(M/2+1:M)>0.5);%根据经验相位要那么是180°要么是0°
amp=[amp fliplr(amp)];
pha=[pha fliplr(pha)];
pattern=zeros(length(theta),M);
%此处求解可以调用CST的后处理模块中的方向图合成功能，速度会较慢。对于简单问题最好能用公式近似的描述优化好后再微调
for i=1:M
    pattern(:,i)=elementpattern.*(amp(i)*exp(1j*(2*pi/lambda*D(i)*sin(theta/180*pi)+pha(i))));%方向图乘积原理
end
arraypattern=abs(sum(pattern,2));%求得合成的方向图
arraypattern=arraypattern/max(arraypattern);%归一化
mask=[zeros(135,1);ones(91,1); zeros(134,1)];%理想情况是在-45°~45°的范围内幅度是1，-180°~-46°和46°~179°幅度为0。
%在比较方向图和MASK时-49°~-31°和31°~49°之间的幅度可以不用管。求出最大的误差值，然后经过优化到最小
fitness=max([(arraypattern(1:130)-mask(1:130)).^2;(arraypattern(145:215)-mask(145:215)).^2;(arraypattern(230:360)-mask(230:360)).^2])
end