查看: 2192|回复: 1|关注: 0

[已答复] 使用遗传算法时,计算适应度函数调用DIFFEQUAT 返回的矢量...

[复制链接]

新手

5 麦片

财富积分


050


1

主题

2

帖子

0

最佳答案
发表于 2018-11-6 19:40:22 | 显示全部楼层 |阅读模式
在使用遗传算法时,计算适应度函数,适应度函数又调用了下列代码
function dy=diffequat(t,y)
global an Fd wn rou g r Bwn Sp rou1 P P1 P2 m m1 Awn
dy=[y(2);(Fd*sin(wn*t+an)-rou*g*pi*r^2*y(1)-(Bwn+Sp*rou1*P1)*y(2)-Sp*rou1*P2*sign(y(2))*y(2)^2)/(m+m1+Awn+Sp*rou1*P)];

运行结果显示:

错误使用 odearguments (line 92)
DIFFEQUAT 返回的矢量的长度为 1,但初始条件矢量的长度为 2。DIFFEQUAT 返回的矢量和初始条件矢量的元素数目必须相同。
出错 ode23tb (line 133)
[neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs, odeFcn, ...
出错 solve1 (line 120)
[t,y]=ode23tb('diffequat',tspan,[0;0]);    %求解活塞位移,调用了子函数
出错 CalFitness (line 15)
fitness(i) =solve1(gama,r,klf,N,B,b,L3,J,Pmhd_max);
出错 yichuan1 (line 20)
fitness = CalFitness(chrom, N, N_chrom); %计算适应度

适应度函数中是这么调用diffequat函数的:
[t,y]=ode23tb('diffequat',tspan,[0;0]);    %求解活塞位移,调用了子函数
    stf1=y(:,1);                                      %活塞位移
    X0=max(stf1(k5*Te/h:end,);
    vf1=y(:,2);
    Af1=[-X0*wn^2*sin(an);diff(vf1)/h];
但是单独运行适应度函数时并没有这个问题。
并且先运行适应度函数时并没有上面的报错,但是遗传算法优化后的几个参数值代入适应度函数后,得到的适应度跟遗传算法的最优适应度数值不相符。
请问有人懂吗?  

回复主题 已获打赏: 0 积分

举报

新手

5 麦片

财富积分


050


1

主题

9

帖子

0

最佳答案
发表于 2019-6-6 15:34:18 | 显示全部楼层
你好!
  因为给出的信息不是很多,所以不好判断。但从给出的适应度函数看,是不是书写格式有问题,换行时要有续行号
回复此楼 已获打赏: 0 积分

举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

快速回复 返回顶部 返回列表