解决赋值维度不匹配,元素数目必须相同等问题

事件:

r = 600;
n = 17;% 17paragraph
p = [0 -321.79725039 506.40549922];
allgamma = 2.00943006740867
pera = allgamma/(n-1);
f = 0.566081293090563;
for i = 1:n

    angle(i) = f + pera*(i-1);
    x(i) = p(1);
    y(i) = - r * sin(angle(i));
    z(i) =   r * cos(angle(i));

    pp(i) = [x(i),y(i),z(i)];
    
end

错误:

  • 带有下标的赋值维度不匹配。
  • 在赋值 A( : ) = B 中,A 和 B 中的元素数目必须相同

原因: p p ( i ) pp(i) pp(i)是存储 [ x ( i ) , y ( i ) , z ( i ) ] [x(i),y(i),z(i)] [x(i),y(i),z(i)]的第i个元素,matlab默认 p p ( i ) pp(i) pp(i)为一个数字,长度为1。因为在这段代码里 p p ( i ) pp(i) pp(i)的赋值是一个行向量,且 x , y , z x,y,z x,y,z的组合各有17组,这就会使得等号左右的元素数目不同。因此 p p pp pp应该设置为一个矩阵,矩阵第一行存储 i = 1 i=1 i=1的结果,第 n n n行存储 i = n i=n i=n的结果。

解决方法:
p p ( i ) pp(i) pp(i)这种数字的形式改为矩阵的形式,即 p p ( i , : ) pp(i,:) pp(i,:)

r = 600;
n = 17;% 17paragraph
p = [0 -321.79725039 506.40549922];
allgamma = 2.00943006740867
pera = allgamma/(n-1);
f = 0.566081293090563;
for i = 1:n

    angle(i) = f + pera*(i-1);
    x(i) = p(1);
    y(i) = - r * sin(angle(i));
    z(i) =   r * cos(angle(i));

    pp(i,:) = [x(i),y(i),z(i)];
    
end

你可能感兴趣的:(Matlab小事件总结,线性代数,矩阵,matlab)