MATLAB有哪些隱藏功能?

剛剛看視頻時, 發現了一個隱藏功能.

MATLAB的調參技巧(還有這種操作?!)

因此, 提出這個問題, 希望大家分享一下自己發現的MATLAB隱藏功能.

隱藏功能包括: 大部分人不知道的或者幫助文檔裡面沒有的.


文檔裡面沒說的大家不要用哦,用了出事了可是沒人負責的

寫一個簡單好用的

很多時候大家寫for循環會這麼寫

A = rand(1,10);
for i = 1:size(A,2) %or length(A)
a = A(i);
% do something
disp(a)
end

最近python寫多了就很想寫成

for a in A:
# do something
print(a)

其實如果你不需要用到下標的話,以上的例子MATLAB也是可以這麼寫的

for a = A
% do something
disp(a)
end

MATLAB會以size(A,2),也就是列的數量進行循環,並且每次取A(:,i)

當然前提是你要保證你的A是以列來區分每次循環數據的,最常見的錯誤情況就是

A = rand(10,1);
for a = A
% 其實只運行了一次
disp(a) % A(:,1)
end


1

之前 MATLAB 提供了 pause 功能,可以在不事先設定斷點的情況下暫停程序,不過由於沒有事先設置斷點所以暫停位置是不可控的;但是在 2017b 上發現,在不事先設置斷點的情況下,運行過程中為某一行加入斷點(具體來說是在某一行代碼前點擊滑鼠左鍵),那麼程序會暫停在該行。

沒有測試過之前版本是否有相同的功能,不過想來這個功能可能應用會有點少,因為如果打算指定暫停位置的話通常的做法是事先設置好斷點。

2

另外一個特性是文檔里有,不過可能很多人沒有注意到過的。當定義一個類時,可以限制某些屬性值,例如

classdef ClassA
properties
val double
end
end

這裡顯然是要求屬性 val 是 double 類型,如果不是 double 則會嘗試轉換,例如

&>&> a = ClassA
a =
ClassA with properties:

val: []
&>&> a.val = @find
Error setting property "val" of class "ClassA":
Invalid data type. Value must be double or be convertible to double.
&>&> a.val = "2"
a =
ClassA with properties:

val: 2
&>&> class(a.val)
ans =
"double"

當然可以做更複雜的驗證:

classdef ValidateProps
properties
Location(1,3) double {mustBeReal, mustBeFinite}
Label(1,:) char {mustBeMember(Label,{"High","Medium","Low"})} = "Low"
State(1,1) matlab.lang.OnOffSwitchState
end
end

這裡限制 Location 被限制為大小是 1x3 的,類型為 double,mustBeReal 和 mustBeFinite 為驗證函數,用於驗證該屬性是否滿足某些條件。更具體的,可以參閱文檔:

Validate Property Values

3

另外,Undocumented Matlab 從名字來看就是一個專門介紹各種 MATLAB 隱藏特性的站點,例如其中一篇關於屬性驗證的文章:

Setting class property types

Setting class property types - take 2

裡邊提到了一種不同於上述文檔中介紹的方法

不過其實隱藏特性最好還是謹慎使用,因為 MATLAB 可能會在不加說明的前提下對其做未知的改動,或者該功能本身就是有缺陷的也不一定,至少文檔里沒介紹的話出了問題 Mathworks 大概不會負責哈


不知道程序輸出為什麼錯誤的時候,可以在cmd窗口輸入why來詢問。


xpbombs

fifteen

eml_asteroids

life

夠你玩一節課了


推薦閱讀:

正版的matlab以及mathematica比盜版的優勢是什麼?
為什麼Mathematica中無法Manipulate一個先前定義的變數中的參數?

TAG:編程 | 數學軟體 | MATLAB |