標籤:

matlab內部函數的語法為什麼如此詭異?

今天在使用matlab的內部函數freqz畫多個幅頻特性與相頻特性時,本想將多個幅頻特性圖與相頻特性圖分別畫在同一個圖裡,就像這樣:

(這幅圖是老師給的)

我自己畫圖的時候卻畫成了下面這個熊樣:

(幅頻特性圖能hold 住,相頻特性圖hold不住)

關於這部分的matlab代碼如下:

於是我打開了freqz的內部代碼,驚訝地發現:看...看不懂!!!

內部代碼有點詭異,例如for循環加逗號,end後面加分號,還有%#這些操作,百度未果,轉詢各位知乎大佬,freqz內部代碼我個人覺得比較詭異的地方如下如下:

很奇怪的是有些地方的if後面加了逗號,有些地方沒加,有的end後面加了分號,有的沒加~~~

煩請各位大佬指教。


不要直接用freqz畫圖,用[h,f]=freqz(...)把freqz的輸出h,f導出來,然後分別用plot(f,abs(h)),和plot(f,angle(h))就可以比較好操作了。詳情見這裡的第一個例子https://www.mathworks.com/help/signal/ref/freqz.html

至於逗號分號的問題,那是程序員的習慣問題。其實都可以去掉。

你說的%#不知道是不是函數開頭的%# codegen。這是讓ide來檢查代碼里有沒有不支持c code generation的函數。如果是%#ok的話看這裡的詳細解釋https://www.mathworks.com/help/matlab/matlab_prog/check-code-for-errors-and-warnings.html


你還是用fvtool函數吧.


因為matlab只是一堆命令的集合(心裡舒服點兒了吧),要不也不會有這個問題吧 matlab算編程語言嗎? 本來就不是嚴謹的程序設計語言。

%# %% 等等都是特殊的注釋。你就把它當簡單的注釋也是不影響的啊。注釋這個,在java C# 等等里都是類似原理啊,最開始要有注釋,後來覺得有些注釋好像是特殊的注釋,要略有不同,所以他們有 /** */ 等等形式。

始終明白一點,任何東西都不是一下子duang地一聲就完美地出現在我們眼前的,都是一個特性一個特性添加進來的。有的語言能嚴謹地控制語言走向,而有的就不能,甚至在走向了分裂。


逗號那個是多了 應該不影響用。Matlab內部代碼是挺多人罵的 語法不統一 後來還不讓看啥的


我為什麼會被邀請回答這個問題?

我連題目都沒有看懂,恕我無能為力……


推薦閱讀:

matlab的UDP通信的丟包問題如何解決?
Matlab如何製作GUI
為什麼工程上的模擬模擬都用matlab 而不是mathematica?

TAG:MATLAB |