这是关于比较两个矩阵的第二个问题。我试图比较两个矩阵,(3x3)和(4x6)。下面的代码工作正常,但如果我想用注释行替换矩阵z,matlab不喜欢我的代码了:(你能否表明我的错误! 我会很高兴, MGM
clear
x=[0 4 8 ;3 2 5 ;2 1 5 ]';
y=[0 1.1 2 2.1 3.6 7.3;1 3 2.2 2 3 2.4 ;2 1 3.3 3.4 6.7 5.8;3 3.4 5 6.6 6.5 7.8]';
z=zeros(6,3);
for i=1:3
for j=1:3
for p=1:6
for r=1:4
if x(i,1)==y(p,1)
z(p,j)=x(i,j);
elseif (x(i,1)<y(p,1))&&(y(p,1)<x(i+1,1))
z(p,j)=(x(i,j)+x(i+1,j))./2;%(x(i,j)+x(i+1,j)+x(i,j+1)+x(i+1,j+1))./4
end
end
end
end
end
端
答案 0 :(得分:0)
你发布的代码并不完美 - 你选择的数字组合很幸运;)。
只是比较你发布的elseif语句中的值,你会发现这段代码没有按预期工作。
切换此行:
elseif (x(i,1)<y(p,1))&&(y(p,1)<x(i+1,1))
为:
elseif ((y(p,1)<x(i+1,1)&&x(i,1)<y(p,1)))
这是因为matlab评估了语句中的第一个表达式,如果它是false,则它不会检查第二个语句 - 因此你不会收到错误,因为你的代码中最后一个元素的第一个statemaent是假8&lt; 7.3
您得到的错误是,因为您尝试访问矩阵索引之外的元素。
你有一个3x3矩阵并尝试在for循环的最后一次运行中访问元素(4,1)。与y矩阵相同的问题。