總結一些自己遇到過的使人抓狂的報錯,往往是自己粗心大意造成的:
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)
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資料,粗心而已~
??? 1test
|error: unexpected matlab operator.
檔名不能以數字開頭
(to be continue)
Swift學習筆記 錯誤處理
錯誤分為可恢復的錯誤和不可恢復的錯誤,可恢復的錯誤指的是能預見並處理的錯誤,例如檔案不存在,網路連線失敗等 不可恢復的錯誤指的是一類特殊的bug,例如強制展開值為nil的可空例項,陣列越界訪問等 如果發生錯誤沒有處理,程式就會停止執行。遺憾的是swift中似乎只能處理可恢復的錯誤。swift中使用a...
python學習筆記 錯誤處理
程式中的錯誤處理有多種方式,一類是約定好錯誤碼,然後根據返回的錯誤碼來判斷是否發生錯誤,以及錯誤的原因。但是這麼做容易將正確的返回值和錯誤碼混在一起,必須要寫很多 來區分,非常不方便。另外一旦出錯,還需要一級一級往上報,知道有一級可以處理它。比較成熟的做法是try.except.finally.這一...
rust學習筆記 錯誤處理
rust的錯誤分兩種 rust提供了可恢復錯誤的型別result t,e 與不可恢復錯誤時終止執行的panic!巨集。程式會在panic!巨集執行時列印出一段錯誤提示資訊,展開並清理當前的呼叫棧,然後退出程式,這種情況大部分都發生在某個錯誤被檢測到,但程式設計師卻不知道該如何處理的時候。panic的...