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來詢問。
xpbombsfifteeneml_asteroidslife夠你玩一節課了
推薦閱讀:
※正版的matlab以及mathematica比盜版的優勢是什麼?
※為什麼Mathematica中無法Manipulate一個先前定義的變數中的參數?