在运行matlab为什么会出现?In an assignment A(I) = B,the number of elements in B and I must be程序如下:clear allI = imread('circles.png'); I2 = imcrop(I,[75 75 26 24]); imshow(I),figure,imshow(I2);[txr,txc]=size(I)[mbr,mbc]=size(I2)NIND=

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/17 20:03:29

在运行matlab为什么会出现?In an assignment A(I) = B,the number of elements in B and I must be程序如下:clear allI = imread('circles.png'); I2 = imcrop(I,[75 75 26 24]); imshow(I),figure,imshow(I2);[txr,txc]=size(I)[mbr,mbc]=size(I2)NIND=
在运行matlab为什么会出现?In an assignment A(I) = B,the number of elements in B and I must be
程序如下:
clear all
I = imread('circles.png');
I2 = imcrop(I,[75 75 26 24]);
imshow(I),figure,imshow(I2);
[txr,txc]=size(I)
[mbr,mbc]=size(I2)
NIND=25; %个体数目
MAXGEN=40; %最大遗传代数
PRECI1=9; %变量的二进制位数,PRICE1表示行坐标,PRICE2表示列坐标,PRICE3表示角度
PRECI2=9;
PRECI3=9;
GGAP=0.9; %代沟
NVNR=3; %变量个数
FieldD=[rep([PRECI1 PRECI2 PRECI3],[1 1]);rep([0 0 -180;txr-mbr txc-mbc 180],[1 1]);rep([1;0;1;1],[1,NVNR])];%区域描述
Chrom=crtbp(NIND,(PRECI1+PRECI2+PRECI3)); %群体初始化,生成5×NIND个个体
[x,y]=size(Chrom)
Pc=0.8; %交叉率
Pm=0.05; %变异率
gen=0; %初始代数为0
for i=1:NIND
ObjV(i)=normxcorr2(Chrom(i,:),I2(i,:));
end

在运行matlab为什么会出现?In an assignment A(I) = B,the number of elements in B and I must be程序如下:clear allI = imread('circles.png'); I2 = imcrop(I,[75 75 26 24]); imshow(I),figure,imshow(I2);[txr,txc]=size(I)[mbr,mbc]=size(I2)NIND=
粘贴了你的代码运行了一下,未出现你所说的情况.
但对于你所出现的问题:向量运算时如果等式两边向量结构不同就会出现.比如下面的语句:
a(3:6)=1:5
本句表示要对a矩阵中3~6号元素进行赋值,共需四个数,但等式右边是个1行5列的矩阵,有五个输入元素,两边不匹配,出错.如改正如下形式可避免此错误:
a(3:7)=1:5 或 a(3:6)=1:4

yuir ney

如果把一个数值赋给一个矩阵(当然是矩阵里的连续值,eg:
b=0;
for i=1:5
a(i)=b;
b=b+1;
end),尽管理论上正确的,也可能报错!
倘若我们在之前初始化a矩阵就可以避免这样的报错可能!(即之前定义a=ones(1,5);)
再例如我刚编的改进粒子群算法程序就遇到了这个问题:
%% 变...

全部展开

如果把一个数值赋给一个矩阵(当然是矩阵里的连续值,eg:
b=0;
for i=1:5
a(i)=b;
b=b+1;
end),尽管理论上正确的,也可能报错!
倘若我们在之前初始化a矩阵就可以避免这样的报错可能!(即之前定义a=ones(1,5);)
再例如我刚编的改进粒子群算法程序就遇到了这个问题:
%% 变量初始化
Dim=2;%粒子的维数
Size=100;%种群数
MaxIt=300;%最大迭代次数
c1=2;
c2=2;%定义加速因子
Wmax=0.9;Wmin=0.4;%定义最大/最小惯性因子
w=0.7;
%粒子个体的最大值与最小值
popmax=5;
popmin=-5;
%定义步长因子的最大/最小值
umax=1;
umin=0;
%% 种群初始化
%初始化粒子群的位置向量
x=5*rands(Size,Dim);
%粒子的初始速度
v=rands(Size,Dim);
xbest=zeros(Size,Dim);%单个粒子的初始最佳位置
fxbest=ones(Size,1);%xbest的适应度
gbest=zeros(1,Dim);%粒子群的初始最佳位置
%fgbest_2=ones(1,MaxIt);%gbest的适应度
fgbest=1;%初始化gbest的适应度
%计算每个粒子的适应度值及种群的最优适应度值
for i=1:Size
fbest(i,:)=fun(x(i,:));
end
%每个粒子所处的位置就是每个粒子的最佳位置
xbest=x;
%计算种群的最优适应度值,及此时粒子所处的位置
[fgbest_1 index]=min(fbest);
if fgbest>fgbest_1
fgbest=fgbest_1;
gbest=x(index,:);
end
%% 自适应调节步长因子
%计算每一维上的评价值
avg=sum(x,1)/Size;
%计算粒子i在d维上的评价值性能差
for i=1:Dim
deta(:,i)=x(:,i)-avg(:,i);
end
%找到粒子所在位置每一维上的最小值
xmin=min(x,[],1);
%计算步长因子,以便更新粒子速度
for m=1:Size
for n=1:Dim
if deta(m,n)<0
u(m,n)=umin+(x(m,n)-xmin(n))*(umax-umin)/(avg(n)-xmin(n));
else
u(m,n)=umax;
end
end
end
%% 更新粒子
R1=rand(Size,Dim);
R2=rand(Size,Dim);
v=v*w+c1*R1.*(xbest-x)+c2*R2.*(repmat(gbest,Size,1)-x);%用速度迭代公式产生新的速度
x=x+u.*v;%更新粒子群的位置
%% 迭代
for m=1:MaxIt
%计算每个粒子的适应度值及种群的最优适应度值
for i=1:Size
fbest(i,:)=fun(x(i,:));
end
%每个粒子所处的位置就是每个粒子的最佳位置
xbest=x;
%计算种群的最优适应度值,及此时粒子所处的位置
[fgbest_1 index]=min(fbest);
if fgbest>fgbest_1
fgbest=fgbest_1;
gbest=x(index,:);
end
fgbest_2(m)=fgbest;
%% 自适应调节步长因子
%计算每一维上的评价值
avg=sum(x,1)/Size;
%计算粒子i在d维上的评价值性能差
for i=1:Dim
deta(:,i)=x(:,i)-avg(:,i);
end
%找到粒子所在位置每一维上的最小值
xmin=min(x,[],1);
%计算步长因子,以便更新粒子速度
for m=1:Size
for n=1:Dim
if deta(m,n)<0
u(m,n)=umin+(x(m,n)-xmin(n))*(umax-umin)/(avg(n)-xmin(n));
else
u(m,n)=umax;
end
end
end
%% 更新粒子
R1=rand(Size,Dim);
R2=rand(Size,Dim);
v=v*w+c1*R1.*(xbest-x)+c2*R2.*(repmat(gbest,Size,1)-x);%用速度迭代公式产生新的速度
x=x+u.*v;%更新粒子群的位置
end
plot(fgbest_2,'r*-')
xlabel('迭代次数','FontSize',12);
ylabel('优化结果','FontSize',12);
title('函数收敛特性曲线','FontSize',12);
disp(['最优位置为:',num2str(gbest)]);
disp(['最优解为:',num2str(fgbest_2(MaxIt))]);
但是预定义fgbest_2后就不会报错了!(fun函数是function y=fun(x)
y=-20*exp(-0.2*sqrt((x(1)^2+x(2)^2)/2))-exp((cos(2*pi*x(1))+cos(2*pi*x(2)))...
/2)+20+exp(1);
)

收起