%-- bounds checking
ym1(ym1<1) = 1; xm1(xm1<1) = 1;
yp1(yp1>dimy)=dimy; xp1(xp1>dimx) = dimx;
请高手解释,以上函数什么意思?
------解决方案--------------------------------------------------------
matlab的向量化操作在你这短短几句中表现的淋漓尽致
例如:一个x(可以是一维向量,也可以是矩阵,二维,三维,多维均可),其值域为[0,2],现在想要将x中小于1的值全部置1,
其他语言的解法是循环,前提是你要知道x到底是几维,因为几个维度,你需要写几层循环,简单的,以2维矩阵为例:
// 其他类c语言
for(int i=0;i<row;++i)
for(int j=0;j<col;++j)
if(x(i,j)<1) x(i,j) = 1;
如果是多维,那循环的层数更多,在matlab中,这样写完全没错,也可以运行,但是不能体现matlab矩阵操作的优势,
因此,matlab引入了向量化来简化对于矩阵的操作(你这里的操作只是向量化最简单的一个例子),matlab的find函数可以一次找到所有满足条件的下标,然后用下标一次完成操作,例如
// matlab code
idx = find(x<1);
x(idx) = 1;
在后来的版本中,matlab更是直接提供了简便方法,由于直接比较可以返回boolean矩阵,matlab也开始支持boolean矩阵作为下标来赋值,因此,将x中所有小于1的元素赋值为1可以进一步简化为:
// matlab code2
x(x<1) = 1;
是不是很简单?现在回头来看你的4个语句:
ym1(ym1<1) = 1; // ym1中所有小于1的元素置1
xm1(xm1<1) = 1; // xm1中所有小于1的元素置1
yp1(yp1>dimy)=dimy; // yp1中所有大于dimy的元素赋值为dimy
xp1(xp1>dimx) = dimx; //xp1中所有大于dimx的元素赋值为dimx
探讨matlab,写matlab程序,可以加我q: 790404545