本人小菜鳥...
今兒上午在matlab中,繪制sin(1/t),其中t∈[-1,1]。這道題里邊我發現了兩個知識點。
我在這里取步長為0.001,一般的話你的代碼會不會是這樣的:
>> t=(-1:0.001:1);
>> plot(t,sin(1/t))
回車,會出現這樣的錯誤提示:
??? Error using ==> mrdivide
Matrix dimensions must agree.
這是矩陣尺寸必須相符的意思,我們知道,matlab是在用矩陣的形式儲存變量,運算變量,這就是matlab的特點,也是它的強大之處。我們都知道,在,matlab中,常用的計算包括:矩陣運算、向量運算。矩陣運算就是符合矩陣性質的運算就是線代里邊我們學習過的那些,我們來說說向量運算,向量運算時matlab要求長度一致,即向量所包含的元素個數相同。乘除乘方時,須在運算符號之前加上“.”,表示對應位置數據運算。例如在matlab中 * (乘)就是用矩陣的乘法(屬於矩陣運算)去求答案,所以要求乘號兩邊的變量要滿足矩陣運算要求,比如c=a*b,a如果是3行2列,那b就必須是2行n列,得出的c就是個3行n列的矩陣。但有時我們要求a乘b矩陣是:a矩陣的每一個元素去乘以b矩陣的對應元素,得出的數做c的對應位置的元素。比如a=[1 2 3] b=[2 3 4] 則c=a.*b。
本題中的sin(1/t),也是這個道理,t是1行好多列(大約是2000,具體的多少我也不確定哈),你用一個1去除一個一行好多列的矩陣當然會出錯,我們的意思是取t中每一個數的倒數,所以我們就必須在“/”后邊加上一個“.”變成“./”從而實現對應位置的數據運算。
好了,明白了吧,嘿嘿。
好,那我們就把代碼改成這樣:
>> t=(-1:0.001:1);
>> plot(t,sin(1./t))
回車,我們發現,matlab並沒有按照plot給出相應的繪圖,還有一條Warning: Divide by zero. %被0區分
這是什么原因呢?
因為我們t的取值范圍是[-1,1]中間包括0這個數值,而我們的sin(1/t)中,t顯然是做了分母的,所以,加入 0/0 會出現divide by zero提示。那么這樣的問題我們怎么處理呢,對於這種情況,我們經常用一種方法來避免,即把分母加上一個很小的值。matlab有一個自帶的變量叫做eps,對於可能出現除0的式子里加上它就可以了,如0/ (0+eps)。
所以我們的代碼應該是這個樣子的:
>> t = (-1:0.001:1);
>> plot(t,sin(1./(t+eps)))
回車,我們的圖線出來啦!

至此,解決!才發現只是這么個小測試就包含這么多的小知識,稍不留心就會犯錯誤呢,所以matlab,馬虎不得哦...
小作業:Matlab 中,怎么描繪y=1/x的圖像啊?
答案:x=linspace(0.01,100,100); y=1./x; plot(x,y)...
