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