matlab报错集锦,matlab编程笔记:错误集锦

总结一些自己遇到过的使人抓狂的报错,往往是自己粗心大意造成的:

1、变量名与函数名混用

disp('jafjjaja')

??? Index exceeds matrix dimensions

原因:前面把disp定义为变量了,编程的时候千万要注意噢!已存在的函数名不能用作变量名

2、浮点数的大小比较问题

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)

ans =

1

3、fread读取数据

total = h*w;

img = fread(fid,total,'float');

img = reshape(img,w,h);

total是9325892,而img只有9240576,导致报错

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)

你可能感兴趣的:(matlab报错集锦)