声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2298|回复: 8

[编程技巧] Matrix dimensions must agree 出错

[复制链接]
发表于 2007-10-25 13:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
正在编一个遗传算法的小程序,运行出来这东东
??? Error using ==> times
Matrix dimensions must agree.

Error in ==> GA at 7
pop(:,stringlength+1)=sum(2.^(size(pop(:,1:stringlength2),2)-1:-1:0).*pop(:,1:stringlength2))*(b-a)/(2.^stringlength2-1)+a;
可我没觉得有错呀, 请教大家,谢谢

[ 本帖最后由 eight 于 2007-10-25 16:49 编辑 ]
回复
分享到:

使用道具 举报

发表于 2007-10-25 14:09 | 显示全部楼层
不要你觉得没错,维数不匹配。仔细检查下等号2端
 楼主| 发表于 2007-10-25 16:08 | 显示全部楼层
还是没能看出来, 貌似退化到学前班了
发表于 2007-10-25 16:37 | 显示全部楼层

回复 #3 sun1993 的帖子

后边的表达式太长,看起来当然比较困难。我的意思是让你把等号右边的结果计算出来,看一下它的size。然后保证pop(:,stringlength+1)的size和刚才的相等,这样问题自然就解决了。

如果计算后便的表达式也出现同样的警告,那就检查表达式中参与运算的元素,直到找出问题所在。表达式写得长,虽然程序看起来会简短一些。但是对排查错误不利,所以如果是自己写程序。要先繁后简,先保证没有错误,然后再对一些语句进行合并。

[ 本帖最后由 eight 于 2007-10-25 17:36 编辑 ]

评分

1

查看全部评分

 楼主| 发表于 2007-10-26 23:47 | 显示全部楼层
改成 pop(:,stringlength+1)=2.^(size(pop(:,1:stringlength2),2)-1:-1:0)*pop(:,1:stringlength2)';就可以了
果然是自己错了,遇到问题得多动动手.
谢谢花如月版主:@)

不过有点不明白, 令
popsize=10;stringlength=33;stringlength2=18;
pop=round(rand(popsize,stringlength+3));
A=2.^(size(pop(:,1:stringlength2),2)-1:-1:0)怎么维数是1*18而不是10*18?
不明白,请教大家,谢谢

[ 本帖最后由 sun1993 于 2007-10-27 00:00 编辑 ]
 楼主| 发表于 2007-10-28 00:13 | 显示全部楼层
不好意思,又犯了个低级错误了, 哈. 
size只是返回一个数,而不是矩阵.
应该是如何改,使A=2.^(size(pop(:,1:stringlength2),2)-1:-1:0)变成10*18维呢?

[ 本帖最后由 sun1993 于 2007-10-28 00:16 编辑 ]
发表于 2007-10-28 09:05 | 显示全部楼层

回复 #6 sun1993 的帖子

你程序写的让别人不容易看懂:@L

程序有时候并不是单给自己看的,良好的编程习惯也很重要
 楼主| 发表于 2007-10-28 12:25 | 显示全部楼层
维数的问题貌似已经解决,但是程序还是有问题,大家帮忙看一下,哈

目标函数: (用了内点惩罚函数法)
function z=myfun5(x1,x2)
z=21.5+x1.*sin(4*pi*x1)+x2.*sin(20*pi*x2);
g=[-x1-3.0 x1-12.1 -x2+4.1 x2-5.8];B=sum(1./g);
global k;
z=-(z+0.5^k*B);
遗传算法:
%Simple Genetic Algorithm
clear;clc;tic;
%initialise
popsize=10;stringlength=33;stringlength2=18;pc=0.9;pm=0.01;
a=-3.0;b=12.1;c=4.1;d=5.8;
pop=round(rand(popsize,stringlength+3));
pop(:,stringlength+1)=2.^(size(pop(:,1:stringlength2),2)-1:-1:0)*pop(:,1:stringlength2)'*(b-a)/(2.^stringlength2-1)+a;
pop(:,stringlength+2)=2.^(size(pop(:,stringlength2+1:stringlength),2)-1:-1:0)*pop(:,stringlength2+1:stringlength)'*(d-c)/(2.^(stringlength-stringlength2)-1)+c;
pop(:,stringlength+3)=myfun5(pop(:,stringlength+1:stringlength+2));

for T=1:100
%roulette selection
totalfit=sum(pop(:,stringlength+3));
prob=pop(:,stringlength+3)./totalfit;
prob=cumsum(prob);
rns=sort(rand(popsize,1));
fitin=1;newin=1;
while newin<=popsize
    if rns(newin)<prob(fitin)
        pop(newin,:)=pop(fitin,:);
        newin=newin+1;
    else
        fitin=fitin+1;
    end
end

%crossover
for i=1:2:popsize-1
    if rand<pc
        cpoint=round(rand*(stringlength-2))+1;
        pop(i,:)=[pop(i,1:cpoint) pop(i+1,cpoint+1:stringlength)];
        pop(i+1,:)=[pop(i+1,1:cpoint) pop(i,cpoint+1:stringlength)];
    end
end
  
%mutation
for i=1:popsize
    if rand<pm
        mpoint=round(rand*(stringlength-1))+1;
        pop(i,mpoint)=1-pop(i,mpoint);
    end
end

%new pop
pop(:,stringlength+1)=2.^(size(pop(:,1:stringlength2),2)-1:-1:0)*pop(:,1:stringlength2)'*(b-a)/(2.^stringlength2-1)+a;
pop(:,stringlength+2)=2.^(size(pop(:,stringlength2+1:stringlength),2)-1:-1:0)*pop(:,stringlength2+1:stringlength)'*(d-c)/(2.^(stringlength-stringlength2)-1)+c;
pop(:,stringlength+3)=myfun5(pop(:,stringlength+1:stringlength+2));

end

%result
[mm,h]=max(pop(:,stringlength+3));
x1=2.^(size(pop(h,1:stringlength2),2)-1:-1:0)*pop(h,1:stringlength2)'*(b-a)/(2.^stringlength2-1)+a;
x2=2.^(size(pop(:,stringlength2+1:stringlength),2)-1:-1:0)*pop(:,stringlength2+1:stringlength)'*(d-c)/(2.^(stringlength-stringlength2)-1)+c;
toc;
x=[x1,x2]

??? Input argument "x2" is undefined.
Error in ==> myfun5 at 2
z=21.5+x1.*sin(4*pi*x1)+x2.*sin(20*pi*x2);
Error in ==> GA at 9
pop(:,stringlength+3)=myfun5(pop(:,stringlength+1:stringlength+2));

唉,为什么自己觉得对的总是出错呢:@L

[ 本帖最后由 sun1993 于 2007-10-28 12:28 编辑 ]
发表于 2007-10-28 13:13 | 显示全部楼层

回复 #8 sun1993 的帖子

先弄明白程序的思路,然后读懂每句的作用。

不是自己写的程序就更要费些功夫,所有的错误提示在常见错误及解决办法帖子里都有。

如果实在觉得费力,还不如自己从头写起,有时候读懂别人的程序似乎比自己写更费劲

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-9-23 21:22 , Processed in 0.059830 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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