matlab程式設計筆記 錯誤集錦

2021-06-22 01:39:03 字數 1620 閱讀 4328

總結一些自己遇到過的使人抓狂的報錯,往往是自己粗心大意造成的:

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的...