总结一些自己遇到过的使人抓狂的报错,往往是自己粗心大意造成的:
disp('jafjjaja')
??? Index exceeds matrix dimensions
原因:前面把disp定义为变量了,编程的时候千万要注意噢!已存在的函数名不能用作变量名
find(a==b)
ans =
Empty matrix: 1-by-0
或者
>> format long
>> a
a =
0.793000000000000
>> b
b =
0.793000000000000
>> a == b
ans =
0
原因:这里牵扯到eps
eps(a)是|a|与大于|a|的最小的浮点数之间的距离,距离越小表示精度越高。浮点数其实是离散的,有限的,而且间隔是不均匀的。越靠近0,数和数之间就越密集,精度就越高。
默认a=1。eps=eps(1),是1的精度。也就是说matlab无法表示介于1和1+eps之间的数,这些数将被四舍五入到1或1+eps。比如1+0.3*eps被舍入到1,而1+0.7*eps被舍入到1+eps。2的精度就比1的精度要低。事实上,matlab无法区分介于2和2+2*eps之间的数。也就是说eps(2)=2*eps,0的精度是最高的,也就是说eps(0)才是matlab所能表示的最小的正数。它和eps(1)相比相差了300多个数量级:
>> eps(0)
ans =
4.940656458412465e-324
>> eps(1)
ans =
2.220446049250313e-16
正确的比较方法如下:
>>a-b
ans =
1.110223024625157e-16
>> eps
ans =
2.220446049250313e-16
>> (a-b)<eps
ans =
1
total = h*w; img = fread(fid,total,'float'); img = reshape(img,w,h);
To RESHAPE the number of elements must not change.
解决:
开头我以为是元素个数超出了matlab限制,查了一下:
[str,maxsize] = computer
str = PCWIN64 maxsize = 2.8147e+14
it depends on the memory of your computer,including virtul mem provided by your operating system.
天文数字不可能超的啊。后来发现是自己fopen的文件本身就只有9240576个float数据,粗心而已~
(TO BE CONTINUE)