matlab 带有下标的赋值维度不匹配。 该如何解决??
供稿:hz-xin.com 日期:2024-05-14
matlab带有下标的赋值维度不匹配怎么解决啊
如果 某个k,j下 Com(k,j,:) 这399个数值中,有两个以上相等的最大值
那么find就会返回多个值
而index(k,j)是一个标量,只有一个值,所以会报错说维度不匹配
find(Com(k,j,:)==max(Com(k,j,:)));
可以用find(Com(k,j,:)==max(Com(k,j,:)),1);只返回找到的第一个最大值的位置
A(1,1)就指示一个值
exp(-1.*la.*t) 算出来有11个值
所以就没法赋值啊
假设A是11*11的矩阵:
A = zeros(11,11);这样就可以赋值了:
A(1,:) = exp(-1.*la.*t);
存在问题:
第一行对x赋值为列向量,而在第三行又对x进行转置并赋值给A的第一列,所以会出错。
改正(两种方法选其一,不可同时改):
1、把第一行改成:
1
x=0:0.25:2.25;
其余不变。
2、把第3、4行改成:
1
2
A(:,1)=x;
A(:,2)=x.^2
其余不变。
另外,如果A在工作区中已有定义,并且行数与x长度不匹配,也会导致错误。建议把第三行改成
1
A=x;
就不会有问题了。或者,另一种做法是在代码前面加上一句
1
clear A
你的f、w、p都是向量,把计算结果赋值给数组B的一个元素B(m,n)肯定是不行的。
猜测题主的本意应该是想要对f、w、p的每个元素分别计算D然后绘图,可以把
for m=1:3;
for n=1:3
if n==m
B(m,n)=w.*u0./(2.*pi).*log((h(m)+p)./h(n));%________________________________
else
B(m,n)=w.*u0./(2*pi).*log(sqrt((2.*p+h(m)+h(n)).^2+d^2)./sqrt((h(m)+h(n)).^2+d.^2));%______________
end
end
end
D=det(B);
改成
D=f*0;
for k=1:length(f)
for m=1:3;
for n=1:3
if n==m
B(m,n)=w(k).*u0./(2.*pi).*log((h(m)+p(k))./h(n));%________________________________
else
B(m,n)=w(k).*u0./(2*pi).*log(sqrt((2.*p(k)+h(m)+h(n)).^2+d^2)./sqrt((h(m)+h(n)).^2+d.^2));%______________
end
end
end
D(k)=det(B);
end
如果 某个k,j下 Com(k,j,:) 这399个数值中,有两个以上相等的最大值
那么find就会返回多个值
而index(k,j)是一个标量,只有一个值,所以会报错说维度不匹配
find(Com(k,j,:)==max(Com(k,j,:)));
可以用find(Com(k,j,:)==max(Com(k,j,:)),1);只返回找到的第一个最大值的位置