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)<eps


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数据,粗心而已~


4、文件名命名错误

??? 1test
    |
Error: Unexpected MATLAB operator.


文件名不能以数字开头


(TO BE CONTINUE)

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值