Matlab问题Subscripted assignment dimension mismatch分析

出现这种问题的情况有很多种,但总的来说一般都是数据传递不当导致的。

问题分析

Matlab问题Subscripted assignment dimension mismatch的意思就是:下标不匹配

问题出现

情况一

问题:

for t=1:length(X0)
	k(1,t)=t-1
end

k

for p=1:3
	for q=1:3
		Y_k_1(p,q)=b*exp(-a(p)*k(q))+c

这串代码的问题是:这里的c是将一个数组,一个数字加上一个数组赋值给一个数字,这是错误的。

解决办法:

更换赋值的内容,不对数组进行赋值。

赋值的注意事项:

例如,给变量a赋值一个数为12,则格式为:a = 12
[注意:变量(即a)只能是一字母,而赋予的值可以是一个式子,当它是式子时,a的值就是这个式子的结果。]

C语言规定,变量要先定义才能使用,也可以将定义和赋值在同一个语句中进行。

情况二

问题:
出错代码

cmd = ['- v',num2str(v),'- c',num2str(2^c(i,j)),'- g',num2str(2^g(i,j))];

解决办法:
错误的原因在于cmd很坑爹的少了个空格,可能是由于书上的印刷不明显。

应改正为: cmd = [' - v ',num2str(v),' - c ',num2str(2^c(i,j)),' - g ',num2str(2^g(i,j))];
在-v , -c, -g 前后加个空格就行

情况三

问题:
出错代码

for i=1:N
    H1 = -5 + 10.*rand(1,5);%随机获得5个【-5,5】之间的数
    h1(i,:)=sort(H1);  %将这5个数从小到大排序
    u= -0.5 + 2.*rand(1,5);%随机获得5个【-0.5,1.5】之间的数
    h2(i,:)=sort(u);%将这5个数从小到大排序
    h3(i,:)=rand(1,5); %随机获得5个0到1之间的数
    for n=0:4         %随机获得25个【0,1】之间的数而且每5个的和为1
        a=0;
    for j=1:5
      r(i,j+n*5)=rand;  
       a=a+r(i,j+n*5);
    end
    for j=1:5
    h4(i,j+n*5)=r(i,j+n*5)/a;
    end
    end  
    h5=[h1';h2';h3';h4'];%将几个向量合成1个
    h(i,:)=h5';
    v1(i,:)=rand(1,40);
    x(i,:)=h(i,:);%得到40维的行向量
    v(i,:)=v1(i,:);
end

总是出现Subscripted assignment dimension mismatch.的错误提示,但是把程序中的i改为具体的数字就可以运行出来。

解决办法:
h5=[h1';h2';h3';h4'];改成
h5(i,:)=[(h1(i,:))';(h2(i,:))';(h3(i,:))';(h4(i,:))']就正确了

情况四

问题:

load AGDP2.mat;
load w1.mat;
T=7; % number of time periods
N=30; % number of regions
% row-normalize W
W=normw(W); % function of LeSage
A= AGDP2;
y=A(:,[1]); % column number in the datamatrix that corresponds to the dependent VAR iable
x=A(:,[2,3]); % column numbers in the datamatrix that correspond to the independent VAR iables
for t=1:T
   t1=(t-1)*N+1;t2=t*N;
   wx(t1:t2,:)=W*x(t1:t2,:);
end
for t=1:T
    t1=(t-1)*N+1;t2=t*N;
    wx(t1:t2,:)=W*x(t1:t2,:);
end

这一段代码出现了 Subscripted assignment dimension mismatch.的报错。

但问题是自变量只有一个的时候,即x=A(:,[2])或x=A(:,[3])是没有问题的,但是自变量变成两个x=A(:,[2,3]),就出错了。

解决办法:

自变量赋值必须写成x=A(:,2:3),不能写成x=A(:,[2,3])

总结

matlab开发的过程中总是有那么一些bug让你发昏,让不不知所措。这个问题困恼了我好多天,网上查了很多资料可是错误的方向都不一样,具体代码是如何错的也不知怎么去改,以上总结了出现过的几种情况,我也上在上面这些情况中抓住了灵感,最终把结果调出来了。

在此记录自己的心得。。。。。希望对你们有帮助。。。。

猜你喜欢

转载自blog.csdn.net/ywsydwsbn/article/details/108717707