matlab中的函数调用问题

以下是我的一个粒子群算法的代码: clear all clear all D=12; %维数 popsize=30; %群体规模 cl=1.8; c2=1.8; wmax=1.2; wmin=0.4; vmax=0.4; xmax=10000; xmin=0; kmax=500; runmax=30; for runtime=1:runmax %独立运行run_times_max次 %随机生成m个粒子。在[0,10000]范围内寻优。 x=xmin+(xmax-xmin)*rand(popsize,D); v=-vmax+2*vmax*rand(popsize,D); for i=1:popsize f(i)=eq1_fun(x(i,:),D); %计算适应度值 end pbx=x; %找出个体历史最优位置 pbf=f; %找出个体历史最优极值 [ghf i]=min(pbf); %找出全局历史最优极值 gbx=pbx(i,:); %找出全局历史最优位置 %开始循环迭代 for k=1:knax w=wmax-(wmax-wmin)*k/kmax; for i=1:popsize for j=1:D v(ij)=w*v(i,j)+c1*rand*(pbx(i,j)-x(i,j))+c2*rand*(ghx(j)-x(i,j)); if v(i,j)>vmax v(i,j)=vmax; end if v(i,j)<-vmax v(i,j)=-vmax; end x(i,j)=x(i,j)+v(i,j); if x(i,j)<xmin x(i,j)=x(i,j)-2*v(i,j); end if x(i,j)>xmax x(i,j)=x(i,j)-2*v(i,j); end end f(i)=eq1_fun(x(i,:),D); %计算适应度值 if f(i)<pbf(i) %更新个体极值 pbf(i)=f(i); pbx(i,:)=x(i,:); end end [ghf i]=min(pbf); gbx=pbx(i,:); favg=mean(f); cf=0; fsum=0; fmin=min(f); for i=1:popsize if f(i)<=favg fsum=fsum+f(i); cf=cf+1; end end favg1=fsum/cf; %计算f(i)<=favg的粒子适应值的平均值 lg_gbf(runtime,k)=log10(gbf); lg_favgl(runtime,k)=log10(favgl); gbf_m(runtime,k)=gbf; end figure(1); hold on plot(lg_gbf(runtime,:),'r'); hold on plot(lg_favgl(runtime,:)) format long gbx %最优解 gbf %最优适应度值 end xlabel('Generations');ylabel('log10(F)'); for k=1:kmax gbf_avg(k)=log10(sum(gbf_m(:,k)/runmax)); end figure(2); plot(gbf_avg,'k') xlabel('Generations'):ylabel('log10(F)') function f=eq1_fun(y1,D) y=y1*5; f1=abs((y(1))^2-y(2)+1); f2=abs(y(1)-cos(pi/2*y(2))); f=f1; if f2>f f=f2; end 然后我的自定义函数文件如下: %自定义函数 function f=eq1_fun(y1,D) y=y1*5; f1=abs((y(1))^2-y(2)+1); f2=abs(y(1)-cos(pi/2*y(2))); f=f1; if f2>f f=f2; end 我应该如何调用呢?

第1个回答  2019-05-23
在命令行输入edit
eq1_fun,然后问你文件不存在,是否创建eq1_fun.m文件。
确认之后打开m文件的编辑器,
把function
f=eq1_fun(y1,D)以及后面的函数内容复制到里面,然后保存成文件名eq1_fun.m
(也可以保存成其他文件名,不过调用是就要用这个文件名调用了)。这个m文件就是eq1_fun的函数文件。
然后再在命令行输入一个edit
particles(名字你随便取,我这里就用英文名了),同样打开一个m文件编辑器,
然后把function
f=eq1_fun(y1,D)那行以上的代码部分保存成particles.m。
这个文件是脚本文件,里面的内容就等于你在命令行窗口输入的一系列命令一样,并且不能包括function
...那样的函数定义。函数定义必须用单独的m文件,不能跟脚本混在一个m文件里。
最后你在命令行窗口运行particles就可以了。
总之,调用函数就把函数保存成m文件,再在脚本文件里或者命令行窗口调用。
相似回答