Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 下标赋值维度不匹配(大小[1 x 1]~=大小[1 x:?])_Matlab_Dimensions - Fatal编程技术网

Matlab 下标赋值维度不匹配(大小[1 x 1]~=大小[1 x:?])

Matlab 下标赋值维度不匹配(大小[1 x 1]~=大小[1 x:?]),matlab,dimensions,Matlab,Dimensions,我想成为: arr(2,1) = arr(2,1) + abs(5.0 minus 5.1);% where I(1,a) is 5.0 and I(1,a+1)is 5.1 为什么我不能把下面两个加在一起?我收到了以下错误消息: 下标赋值维度不匹配(大小[1 x 1]~=大小[1 x:?]) 函数“MATLAB函数”(#620.435.485),第23行第2列: “arr(count,1)=arr(count,1)+abs(I(1,a)-I(1,a+1))” 启动诊断报告 “I”在worsk

我想成为:

arr(2,1) = arr(2,1) + abs(5.0 minus 5.1);% where I(1,a) is 5.0 and I(1,a+1)is 5.1
为什么我不能把下面两个加在一起?我收到了以下错误消息:

下标赋值维度不匹配(大小[1 x 1]~=大小[1 x:?])

函数“MATLAB函数”(#620.435.485),第23行第2列: “arr(count,1)=arr(count,1)+abs(I(1,a)-I(1,a+1))” 启动诊断报告

“I”在worskspace中声明为:

I =

 5.0000    5.1000    5.2000    5.2000
90.0000   85.0000   80.0000   20.0000


integ_signal=zeros(5,4);
a=zeros(10);
arr=zeros(5,4);
count=2;
a=1;
integ_signal(count,1)=  integ_signal(count-1,1);
 arr(count,1) = integ_signal(count,1); 
arr(count,1) = arr(count,1) + abs(I(1,a)-I(1,a+1));
系统如图所示。完整代码如下:

 function integ_signal= fcn(I,V,count,oldval)

 integ_signal=zeros(5,1);
 a=zeros(10);
 arr=zeros(2,4);
 %b=zeros(10);
 integ_signal=oldval; 
 coder.extrinsic('load');
 load('data.mat','I');
 a=1;
 %b=1;
 if count==1
     integ_signal(count,1) = 10; % Initial Condition
 end

 if count>1

  integ_signal(count,1)=  integ_signal(count-1,1);
  arr(count,1) = integ_signal(count,1);
  arr(count,1) = arr(count,1) + abs(I(1,a)-I(1,a+1));

  end
 a=a+1;
 % b++;
 end

亲爱的先生,我一直得到这个错误,我想要的输出是得到abs(I(2,ii(a))-I(2,ii(a)-1,所以当ii(a)=2时,我想要I(2,2)减去I(2,1),即5.1减去5.0:索引表达式超出范围。试图访问元素2。有效范围是1-1。 "2" .在这一行: arr(1,ii(a))=arr(1,ii(a))+abs(I(2,ii(a))-I(2,ii(a)-1))

我在.mat文件中将I定义为以下内容:

保存数据-v7.3“I” 加载('data.mat','I'); 我=

第1列至第6列

     0    1.0000    2.0000    3.0000    4.0000    5.0000
5.0000    5.1000    5.2000    5.2000    5.5000    5.9000
第7栏

6.0000
6.0000

我猜你用
count
作为一个向量来调用你的代码。而且,你似乎缺少了一个循环。(如果没有,为什么
a=a+1
?)

a = 1;
没有多大意义。您的输入变量
I
是什么?您希望
加载('data.mat','I')
做什么

如果我是对的,请尝试以下方法:

for ii = 1:length(count)
    if count(ii) == 1
       integ_signal(count(ii),1) = 10; % Initial Condition
    end

    if count(ii) > 1
       integ_signal(count(ii),1)=  integ_signal(count(ii)-1,1); % Or, (count(ii-1),1)
       arr(count(ii),1) = integ_signal(count(ii),1);
       arr(count(ii),1) = arr(count(ii),1) + abs(I(1,a)-I(1,a+1));
    end
    a = a + 1;
end

您可能需要以某种方式对此进行调整,但我认为这可能会对您有所帮助。

我在复制粘贴您的代码时没有遇到任何错误。您的示例代码与真实代码有何不同?亲爱的先生,感谢您的回复,它在这一行指出错误arr(count,1)=arr(count,1)+abs(I(1,a)-I(1,a+1))我的原始代码是用Matlab函数块编写的,你的意思是把这两个加起来没有什么错吗?arr(count,1)=arr(count,1)+abs(I(1,a)-I(1,a+1));如果你复制粘贴你的示例代码会发生什么?它有效吗?如果有效,尝试创建一个失败的新示例。如果无效,我不知道会出什么问题。是的,如果我把它放在Matlab工作区,它运行得很好,但是,当它在Matlab功能块中时,我得到了上面的错误。我将把完整的代码和系统放在这里,不Don’我想得太久了亲爱的先生,谢谢你的回复。是的,这是我的错误,不应该有a=0(10);后面是a=1;。对于您答案的第二部分,它确实解决了下标赋值维度不匹配的问题,我可以知道背后的原因吗?但是,我收到了另一条错误消息,我还没有再次弄清楚:模拟因越界错误而停止。我相信此函数中有几个错误。取决于
I
a
的大小可能没有正确使用。如果
I
的列数小于
count
,则将超出范围。我不知道什么是正确的,您必须尝试。此外,我想如果ii=1,您应该使用
等,而不是
如果count(ii)==1
,如上所述。假设您希望您的索引为
1
2
,…在这种情况下,对于ii=1:count
,以及所有
count(ii)
,只需
ii
。亲爱的先生,我一直得到这个错误,我想要的输出是得到abs(I(2,ii(a))-I(2,ii(a)-1),所以当ii(a)=2时,我想要I(2,2)减I(2,1),即5.1减5.0:索引表达式超出范围。尝试访问元素2。有效范围为1-1。“2”。此行:arr(1,ii(a))=arr(1,ii(a))+abs(I(2,ii(a))-I(2,ii(a)-1));我在.mat文件中定义I如下:保存数据-v7.3“I”加载('data.mat','I'));I=第1列至第6列0 1.0000 2.0000 3.0000 4.0000 5.0000 5.0000 5.1000 5.2000 5.2000 5.5000 5。9000@user2563812:评论中的信息太多了。我建议你问一个新问题,解释你的新问题。
for ii = 1:length(count)
    if count(ii) == 1
       integ_signal(count(ii),1) = 10; % Initial Condition
    end

    if count(ii) > 1
       integ_signal(count(ii),1)=  integ_signal(count(ii)-1,1); % Or, (count(ii-1),1)
       arr(count(ii),1) = integ_signal(count(ii),1);
       arr(count(ii),1) = arr(count(ii),1) + abs(I(1,a)-I(1,a+1));
    end
    a = a + 1;
end