matlab 带有下标的赋值维度不匹配。 该如何解决??

供稿:hz-xin.com     日期:2024-05-14
matlab带有下标的赋值维度不匹配怎么解决啊

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);只返回找到的第一个最大值的位置