显示错误:输入参数太多

来源:matlab  › 交流  › 倒序浏览
  • 回答数

    5

  • 浏览数

    2881

  • 收藏数

    0

作者:雪舞樱飞 发表于 2018-11-20 09:59:43
跳转到指定楼层
function z=Shubert(x)
z=(x(:,1).*cos((1+1)+1))*(x(:,2).*cos((1+1)+1));
end

[x1,x2]=meshgrid(-10:.1:10);
figure(1);
mesh(x1,x2,Shubert(x1,x2));
NIND=40;                              %个体数目(Number of individuals)
MAXGEN=50;                             %最大遗传代数(Maximum number of generations)
NVAR=2;                                %变量个数
PRECI=25;                              %变量的二进制位数(Precision of variables)
GGAP=0.9;                              %代沟(Generation gap)
%建立区域描述器(Build field descriptor)
FieldD=[rep([PRECI],[1,NVAR]);rep([-3;3],[1,NVAR]);rep([1;0;1;1],[1,NVAR])];
Chrom=crtbp(NIND,NVAR*PRECI);          %初始种群
v=bs2rv(Chrom,FieldD);                 %初始种群十进制转换
gen=0;
trace=zeros(MAXGEN,2);%遗传算法性能跟踪
x=bs2rv(Chrom,FieldD);%初始种群十进制转换
ObjV=Shubert(x(:,1),x(:,2));%计算初始种群的目标
while gen<MAXGEN,
    FitnV=ranking(Objv);%分配适应度值
    SelCh=select('sus',Chrom,FitnV,GGAP);%合并
    SelCh=recombin('xovsp',SelCh,0.7); %重组
    SelCh=mut(SelCh);                  %变异
    x=bs2rv(SelCh,FieldD);%子代十进制转换
    [Chrom ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel);
    gen=gen+1;
    [Y,I]=min(ObjV);%输出最优解和序号
    Y.bs2rv(Chrom(I,,FiedldD);
    trace(gen,1)=min(ObjV);%性能跟踪,目标函数最优解
    trace(gen,2)=sum(ObjV)/length(ObjV);%性能跟踪,种群的均值
    if (gen==50)
        figure(2);
        plot(ObjV);hold on;
        plot(ObjV,'b*');grid;
    end
end
figure(3);clf;
plot(trace(:,1));hold on;
plot(trace(:,2),'-.');grid;
legend运行后显示


错误使用 Shubert
输入参数太多。从而导致初始种群的目标无法计算,应该如何修改?

分享:
回复

使用道具

该用户从未签到

新手上路

Rank: 1

积分
31
极客币
97
主题
24
帖子
47
注册时间
2018-10-22
在线时间
4 小时
性别
保密
发表于 2018-11-20 10:00:46 | 显示全部楼层
你的Shubert有问题
z=(x(:,1).*cos((1+1)+1))*(x(:,2).*cos((1+1)+1));
(x(:,1).*cos((1+1)+1))是个列向量
(x(:,2).*cos((1+1)+1))也是个列向量
只要行数不为1,就成了列向量乘以列向量,这是违反矩阵乘法的
回复

使用道具 举报

该用户从未签到

新手上路

Rank: 1

积分
29
极客币
93
主题
23
帖子
43
注册时间
2018-10-22
在线时间
4 小时
性别
保密
发表于 2018-11-20 10:01:04 | 显示全部楼层
你的function z=Shubert(x)函数只有一个变量,你调用的时候用的两个,可不就多了么
回复

使用道具 举报

该用户从未签到

新手上路

Rank: 1

积分
31
极客币
97
主题
24
帖子
47
注册时间
2018-10-22
在线时间
4 小时
性别
保密
发表于 2018-11-20 10:01:20 | 显示全部楼层
久念成瘾 发表于 2018-11-20 10:00
你的Shubert有问题
z=(x(:,1).*cos((1+1)+1))*(x(:,2).*cos((1+1)+1));
(x(:,1).*cos((1+1)+1))是个列向量

????
回复

使用道具 举报

该用户从未签到

新手上路

Rank: 1

积分
29
极客币
93
主题
24
帖子
43
注册时间
2018-10-22
在线时间
4 小时
性别
保密
 楼主| 发表于 2018-11-20 10:02:36 | 显示全部楼层
久念成瘾 发表于 2018-11-20 10:00
你的Shubert有问题
z=(x(:,1).*cos((1+1)+1))*(x(:,2).*cos((1+1)+1));
(x(:,1).*cos((1+1)+1))是个列向量

如果我修改成
function z=Shubert(x,y)
z=(x*1*cos((1+1)+1)*(y*1*cos((1+1)+1)
运行后会出现这个错误:*  内部矩阵维度必须一致
我应该如何修改我的函数呢?
回复

使用道具 举报

该用户从未签到

新手上路

Rank: 1

积分
29
极客币
93
主题
24
帖子
43
注册时间
2018-10-22
在线时间
4 小时
性别
保密
 楼主| 发表于 2018-11-20 10:03:00 | 显示全部楼层
念念不忘 发表于 2018-11-20 10:01
你的function z=Shubert(x)函数只有一个变量,你调用的时候用的两个,可不就多了么 ...

如何进行正确的修改呢?
回复

使用道具 举报

高级模式 评论
您需要登录后才可以回帖 登录 | 立即注册 微信登录
关于作者
雪舞樱飞

用户组:新手上路

  • 主题

    24

  • 帖子

    43

  • 关注者

    1