...= B, the number of elements in B and I must be the same._百度...
发布网友
发布时间:2024-10-02 10:03
我来回答
共3个回答
热心网友
时间:2024-11-13 20:28
In an assignment A(I) = B, the number of elements in B and I must be the same
中文解释:在赋值语句 A(I) = B 中,B 和 I 的元素个数必须相同
出错原因:I 和 B 的维数、大小不一样。这正如“把 5 个水果放到 6 个篮子”、或者“把 6 个水果放到 5 个篮子”,均无法实现
解决办法:自己设置断点调试一下,看看 I 和 B 的维数、大小是否相同,不同的话就要修改成两者一致
举例:
【错误代码】:
代码:
b = [1,2];
s(1) = b;
【正确代码】:
代码:
b = [1,2];
for i = 1:2
s(i) = b(i);
end
当然,这样的赋值使用循环是低效的,因此不提倡
热心网友
时间:2024-11-13 20:34
如果把一个数值赋给一个矩阵(当然是矩阵里的连续值,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);
)
热心网友
时间:2024-11-13 20:34
In an assignment A(I) = B, the number of elements in B and I must be the same.
在赋值语句 A(I) = B 中,B中的元素数目必须与I相等。
应该是关于编程的吧。