关于matlab中if else end的赋值的问题

for i=1:10
for j=1:10
if 8<=i<=10&&8<=j<=10
DM(i,j)=D(i-7,j-7);
else DM(i,j)=0;
end
end
end
Attempted to access D(-6,-6); index must be a positive integer or logical.
Error in Untitled2 (line 4)
DM(i,j)=D(i-7,j-7);
当if为假的时候不就不执行后面的语句了吗?怎么好像它还要执行。D是一个3*3矩阵
最新回答
红尘烟雨

2024-11-04 04:19:28

不能这么写,“8<=i<=10”会先进行8<=i运算,结果为0,再进行0<=10运算,结果就为1了,“8<=j<=10”同理,因此,当i和j都为1时,整个if条件是成立的,所以就执行了后面的语句,正确的写法要把四个条件分开写“if 8<=i && i<=10 && 8<=j && j<=10”
桃靥

2024-11-04 01:05:15

你好~~这个不是if的问题啊~是你表达式写的有问题啊~~
8<=i<=10&&8<=j<=10 这个表达式这样写是这样执行的:
第一次循环时i=1,j=1,带进去就是8<=1<=10&&8<=1<=10
matlab对这个表达式的理解是:0<=10&&0<=10,进而是1&&1,所以要执行咯~
为什么呢?因为8<=1是要返回0,所以懂了吧~~建议查一查matlab的关系运算符的实现原理~~
Good luck!