概述
clear all;close all;clc
NP=50; %种群数量
Pc=0.8; %交叉率
Pm=0.05; %变异率
d=0.5; %满阵阵元间距,半倍波长
lamda=1; %波长
seta0=0*pi/180; %波束指向
G=200; %最大遗传代数
L=100; %满阵阵元个数
NL=50; %实际阵元个数
NN=1800; %扫描角度间隔,根据阵元数确定
%%%%%%%%%生成初始种群%%%%%%%%%%%%%%
%%%%%%%%%0为没有阵元,1为有阵元%%%%%%%%%
f=randn(L.NP);
[sortff,Index]=sort(f);
f=zeros(L,NP);
for i=1:NP
f(Index(end-NL+1:end,i),i)=1;
end
%%%%%%%%%%遗传算法循环%%%%%%%%%%%%
for k=1:G
k;
%%%%%%%%%计算适应度,即峰值旁瓣比%%%%%%%%
for i=1:NP
Fit(i)=-func_line(d,lamda,NN,seta0,f(:,i));
end
maxFit=max(Fit); %最大值
minFit=min(Fit); %最小值
rr=find(Fit==maxFit); %找出最大值
fBest=f(:,rr(1,1)); %历代最优个体
Fit=(Fit-minFit)/(maxFit-minFit); %归一化适应度值
%%%%%%%%%基于轮盘赌的选择操作%%%%%%%%%%
sum_Fit=sum(Fit);
fitvalue=Fit./sum_Fit;
fitvalue=cumsum(fitvalue);
ms=sort(rand(NP,1));
fiti=1;
newi=1;
while newi<=NP
if(ms(newi))
nf(:,newi)=f(:,fiti);
newi=newi+1;
else
fiti=fiti+1;
end
end
%%%%%%%%%%%%%%基于概率的交叉操作%%%%%%%%%%%%%%%
for i=1:2:NP
p=rand;
if p
q=randint(1,L);
for j=1:L
if q(j)==1
temp=nf(j,j+1);
nf(j,j+1)=nf(j,i);
nf(j,i)=temp;
end
end
end
end
%%%%%%%%%%%%%基于概率的变异操作%%%%%%%%%%%
for m=1:NP
for n=1:l
r=rand(1,1);
if r
nf(n,m)=~nf(n,m);
end
end
end
%%%%%%%%%%%使交叉变异后的实际阵元个数不变%%%%%%%%%%%
for i=1:NP
n_ones=sum(nf(:,i));
while n_ones>(NL)
nn1=find(nf(:,1)==1);
MUT1=randint(1,n_ones-NL,[1,n_ones]);
for m=1:(n_ones-NL)
nf(nn1(MUT1(m)),i)=0;
end
n_ones=sun(nf(:,1));
end
while n_ones
nn2=find(nf(:,i)==0);
MUT2=randint(1,NL-n_ones,[1,l-n_ones]);
for m=1:(NL-n_ones)
nf(nn2(MUT2(m)),i)=1;
end
n_ones=sum(nf(:,i));
end
end
f=nf; %保留最优个体在新种群中
trace(k)=maxFit %历代最优适应度值
end
figure
plot(trace)
xlabel('迭代次数')
ylabel('目标函数值')
title('适应度进化曲线')
grid on
save fBest.mat fBest %存储优化结果
这是一个fBest.mat的文件,我用下面的来调用:
%%%%%%%%%%%优化后方向图%%%%%%%%%%%%%
clc;close all;clear all
save best.mat
d=0.5;
lamda=1;
seta0=0*pi/180;
L=100;
NN=1800;
%%%%%%%%%%%%%%%%%%%%%%
seta=linspace(-pi/2,pi/2,NN);
for m=1:NN
fai=2*pi*d/lamda*(0:(L-1))*(sin(seta(m))-seta0);
F1(m)=abs(sum(exp(sqrt(-1)*fai).*fBest'));
end
FdB=20*log10(F1/max(F1));
figure
plot(seta*180/pi,FdB)
xlabel('theta/(。)')
ylabel('阵列增益/dB')
grid on
axis([-90,90,-60,0])
figure
plot(fBest,'.')
xlabel('阵元位置')
ylabel('阵元标识')
grid on
asis([1,L,0.5,1.2])
一直显示:错误: 文件:fBest.m 行:30 列:5
变量 "fBest" 还是此脚本的名称。
这是非法的,因为它将是调用此脚本的任何上下文中的脚本名称和变量名称。
出错 youhua100_50 (line 13)
F1(m)=abs(sum(exp(sqrt(-1)*fai).*fBest'));
请问这个要怎么解决呢?这个是我在书上的原程序弄出来的,要怎么让其成功运行呢?
最后
以上就是迅速黄豆为你收集整理的matlab基本函数不能调用,matlab函数调用的问题的全部内容,希望文章能够帮你解决matlab基本函数不能调用,matlab函数调用的问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复