为了账号安全,请及时绑定邮箱和手机立即绑定

Matlab程序提示未定义func1?这是什么情况?

Matlab程序提示未定义func1?这是什么情况?

C C++
qq_花开花谢_0 2022-03-24 16:11:24
这是一本书上所给的MATLAB源代码,目的是利用标准遗传算法求函数极值,程序如下NP = 50;L = 20 ;Pc = 0.8 ;Pm = 0.1;G = 100 ;Xs = 10;Xx = 0;f = randi(NP,L);%%%%%%%%%%%%%%%循环%%%%%%%%%%for k = 1:Gfor i = 1 : NPU = f(i,:);m = 0;for j = 1:Lm = U(j)*2^(j-1)+m;endx(i) = Xx + m *(Xs - Xx)/(2^L - 1);Fit(i) = func1(x(i));endmaxFit = max(Fit);minFit = min(Fit);rr = find(Fit == maxFit);fBest = f(rr(1,1),:);xBest = x(rr(1,1));Fit = (Fit - minFit)/(maxFit - minFit);%%%%%%%%Copy%%%%%sum_Fit = sum(Fit);fitvalue = Fit./sum_Fit;fitvalue = cumsum(fitvalue);ms = sort(rand(NP,1));fiti = 1;newi = 1;while newi <= NPif (ms(newi)) < fitvalue(fiti)nf(newi,:) = f(fiti,:);newi = newi + 1;elsefiti = fiti + 1;endend%%%%%%%%%%交叉%%%%%%%for i = 1 : 2 : NPp = rand;if p < Pcq = randin(1,L);for j = 1 : Lif q(j) == 1temp = nf(i+1,j);nf(i+1,j)=nf(i,j);nf(i,j) = temp;endendendend%%%%%%%%%变异%%%%%%i = 1;while i <= round(NP*Pc)h = randi(1,1,[1,NP]);for j = 1 : round(L*Pc)g = randi(1,1,[1,L]);nf(h,g) =~ nf(h,g);endi = i + 1;endf = nf;f(1,:) = fBest;trace(k) = maxFit;endxBEst;figureplot(trace)xlabel('迭代次数')ylabel('目标函数值')title('适应度进化曲线')%%%%%%适应度函数%%%function result = func1(x)fit = x + 10*sin(5*x) + 7 * cos(4*x);result = fit;end问题:func1并没有定义 ,为什么可以在后面直接使用这个代码是要直接写在Command window里 还是建立.m文件写在里面,如何运行?程序源代码就是上面这些 ,应该如何更改才能运行 ,希望大牛们能给初学者一点指导,谢谢~
查看完整描述

3 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

这个问题我也遇到,这本书我也有,解决如下,看代码的最后部分,是一个适应度函数,这个函数需要自己定义下,采用能,报错就是这个问题,

1、首先把

function result =func1(x)

fit=x+10*sin(5*x)+7*cos(4*x);

result=fit;

end

这段代码写入M文件,然后放在你运行代码的工作目录中,注意名字不要改,还用func1

2、再运行代码全部代码,就可以了,还可能存在警告randint函数的问题,不用改成randi,randi是不能产生你需要的二进制染色体编码的。

//img1.sycdn.imooc.com//624178860001ee1a05810515.jpg


查看完整回答
反对 回复 2022-03-28
?
阿晨1998

TA贡献2037条经验 获得超6个赞

将最底下那个函数剪切到另一个.m文件中作为调用函数func1,然后运行主程序,应该就可以了

查看完整回答
反对 回复 2022-03-28
?
森栏

TA贡献1810条经验 获得超5个赞

函数文件一般是在指令窗口或者脚本文件中调用,不可直接运行。 先定义t和y 再调用函数 Lorenz(t,y)

查看完整回答
反对 回复 2022-03-28
  • 3 回答
  • 0 关注
  • 701 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号