首先,自我檢討:我把MATLAB用成了C++。(我剛剛自己編了一個求最大值的循環,突然發現MATLAB有max這個函數,我就有了深深的愧疚。)
我想請對這款軟體熟悉的人列舉一些本科生常用的函數和MATLAB中的名字。讓我少走一些彎路,真誠的感謝你。修改
舉報
• 邀請回答
按投票排序按時間排序
14 個回答11贊同反對,不會顯示你的姓名
白如冰 ,四月到?月在東南大學無線谷
11 人贊同
我剛試了下就試出來max,min,plot,inv,det,zeros等這幾個算是built-in function。
其實MATLAB下更多的函數都是MATLAB自己的語言編寫的,不信你在命令行裡打個open unique,open fit, open nlinfit, open polyfit看看。
我囉嗦了這麼多其實是想說,很多人都喜歡說自己原來把MATLAB當C++用,可是那些驚豔到他們的MATLAB的功能,很多C++標準庫裡就有。而且也沒見過他們用MATLAB裡的函數指針、面向對象等技術。。。
編輯於 2015-01-27 感謝
收藏 • 沒有幫助 • 舉報 • 作者保留權利
12贊同反對,不會顯示你的姓名
古十長
12 人贊同
我知道樓主在這裡肯定要不到想要的答案的,雖然幫不上忙,但是我盡力,所以剛剛花了幾分鐘寫了個py腳本提取了一下自己1900+個m文件的「函數」出現頻率前100的,如下(函數加引號是因為沒法區分出函數和變量來,所以自己人腦區分吧~):
('size', 1147) ('subplot', 1141) ('zeros', 1099) ('ones', 814)
('sym', 670) ('abs', 669) ('title', 652) ('find', 566)
('max', 563) ('figure', 548) ('min', 522) ('subs', 459)
('findsym', 436) ('set', 422) ('fprintf', 381) ('ylabel', 346)
('sqrt', 346) ('exp', 268) ('sin', 250) ('randn', 250)
('imshow', 236) ('cos', 235) ('xlabel', 223) ('reshape', 219)
('floor', 187) ('diag', 176) ('eye', 162) ('wrcoef', 161)
('log', 158) ('num2str', 156) ('rand', 152) ('axis', 149)
('repmat', 147) ('colormap', 144) ('linspace', 136) ('double', 128)
('get', 128) ('norm', 123) ('wcodemat', 120) ('alphaall', 120)
('isempty', 114) ('fftshift', 111) ('imread', 110) ('sort', 109)
('fft', 109) ('log10', 108) ('load', 103) ('uint8', 103)
('isfield', 99) ('strcmp', 99) ('while', 91) ('round', 90)
('inv', 88) ('close', 72) ('transpose', 72) ('real', 71)
('power', 71) ('std', 66) ('elseif', 64) ('fgetl', 64)
('mod', 63) ('contour', 62) ('for', 62) ('sign', 59)
('fft2', 56) ('meshgrid', 56) ('mvnrnd', 53) ('xlim', 50)
('stem', 50) ('sim', 48) ('fopen', 48) ('ceil', 47)
('str2num', 47) ('legend', 46) ('wavedec', 46) ('detcoef2', 43)
('wavefun', 42) ('ifft2', 42) ('uimenu', 40) ('cumsum', 39)
('freqz', 38) ('wavedec2', 38) ('tan', 37) ('wrcoef2', 37)
('text', 34) ('ifft', 34) ('sinh', 32) ('clabel', 32)
('betaall', 32) ('fliplr', 31) ('findobj', 31) ('not', 30)
('imwrite', 30) ('strcat', 30) ('conv', 30) ('randperm', 30)
('fclose', 29) ('intersect', 29) ('setdiff', 29) ('fix', 28)
[Finished in 0.8s]
代碼:
#coding=utf-8import osimport refundict = {}invalidlist = set()for filename in os.listdir("./"): if not filename.endswith("m"): continue # 文件名不是系統函數 invalidlist.add(filename[0:-2]) for line in open(filename): comments = line.find('%') if comments >= 0: line = line[0:comments] # function xxx不是系統函數 result = re.findall(r'function\s([A-Z_a-z0-9]+)\s*\(',line) if len(result): invalidlist.add(result[0]) continue # 被賦過值的是變量不是系統函數 result = re.findall(r'([A-Z_a-z0-9]+)\s=',line) if len(result): invalidlist.add(result[0]) result = re.findall(r'([A-Z_a-z0-9]+)\s*\(',line) if len(result) != 0: for foo in result: # 長度小於3,有大寫或_的不是系統函數 if len(foo) <= 2 or len(re.findall('[A-Z_]',foo)) or foo in invalidlist: continue if fundict.has_key(foo): fundict[foo] += 1 else: fundict[foo] = 1for key in fundict: if key in invalidlist: fundict[key] = -1dict= sorted(fundict.iteritems(), key=lambda d:d[1], reverse = True)for i in range(0,100): if (i+1)%4: print dict[i], else: print dict[i]
編輯於 2015-02-05 感謝
收藏 • 沒有幫助 • 舉報 • 作者保留權利
1贊同反對,不會顯示你的姓名
塵中遠 ,保福寺護院武僧
1 人贊同
我猜你c++求max不是用std::max_element而是用循環
發布於 2015-01-27 感謝
收藏 • 沒有幫助 • 舉報 • 作者保留權利
0贊同反對,不會顯示你的姓名
李龍翔 ,舉報的問題比回答的問題多
lookfor + 關鍵詞
查查不就行了?
發布於 2015-01-27 感謝
收藏 • 沒有幫助 • 舉報 • 作者保留權利
6贊同反對,不會顯示你的姓名
Emily Ma ,juejue||分生。
6 人贊同
matlab用的比較多,但是水平比較渣,寫出來的代碼基本都是小白level的,也就是以能算通為目的,很少做語言和算法上的優化(因為目前處理過的東西都是數據量和計算量不大的東西,沒需求就沒動力做優化=。=)
所以估計一些經驗比較適合題主這種同樣初入門的人。
首先,matlab下寫代碼,牢記關鍵詞 矩陣運算。因為基本上基礎矩陣運算,matlab都自帶函數了,數據存儲也是以向量,矩陣,高維數組or高維矩陣(術語不專業的的話請自行忽略=。=)的形式存在的。所以一切矩陣運算都很方便。比如求解矩陣方程Ax=b,直接用x=A\b, 並且A可以是square或者rectangular,後者會自動求出least squares method的解。比如求矩陣特徵值和特徵向量是eig,對矩陣做SVD分解就是svd。。。
舉這些例子首先是想說明,1,線性代數入門學的那些東西matlab都做了很好的算法了,直接用!2,擅用help命令 前面我舉的這三個函數的例子,發現了沒有,函數名稱或者說代碼寫出來基本和你在數學書上學的很類似,寫代碼的時候,即使你是第一次或者第二次用matlab的新手,我相信只要藉助百度+help,你都能找到對應的正確函數。
關鍵詞 矩陣運算 下的另一個tip就是避免題主問題描述裡的情況,把matlab寫成c++,比如我最開始用matlab的時候也是不管什麼函數都想用for循環(工科渣渣 0 coding基礎大一上手學的c++,還用的是譚浩強課本,請自行腦補=。=),比如最簡單的求和都要寫個sum=0, for ii=1:n sum=sum+a(ii)*b(ii) end這種形式,後來發現這種寫法簡直腦殘,很多情境下的求和都可以變成row*vector。所以,請學會擅用矩陣運算!
matlab自帶函數和算法非常多,因為它的定位就是給工科的人做計算用的,窮舉常用函數是舉不出來的,但是只要牢記 矩陣運算,擅用help命令,以及新手們再佐以萬能的百度,基本入門需求就夠了。
編輯於 2015-01-27 感謝
收藏 • 沒有幫助 • 舉報 • 作者保留權利
1贊同反對,不會顯示你的姓名
Bound ,IC圖像算法工程師
1 人贊同
沒有本科生的,碩士生的,博士生....專用函數,都是一個工具而已。建議先找一本最薄的書來瀏覽一遍。下面做項目的時候,需要用的功能,Google,help命令,甚至百度也可。
MATLAB使用時應儘量避免使用循環,如果函數庫沒有需要的函數又要用到大量循環的可以考慮用Matlab API,用C++和Matlab混編實現你需要的功能。
MATLAB是功能強大的仿真語言,且簡單有效,相信你稍微學習一下就可以用到很好。
發布於 2015-01-27 感謝
收藏 • 沒有幫助 • 舉報 • 作者保留權利
0贊同反對,不會顯示你的姓名
匿名用戶
fsolve
ode45
ode15s
fmincon
fminunc
以上是我認為工科中比較常用的函數。具體怎麼用詳見help
發布於 2015-11-26 感謝
收藏 • 沒有幫助 • 舉報 • 作者保留權利
0贊同反對,不會顯示你的姓名
匿名用戶
要用什麼先百度一下,再看看help
發布於 2015-02-27 感謝
收藏 • 沒有幫助 • 舉報 • 作者保留權利
0贊同反對,不會顯示你的姓名
yetwanng ,多年的尷尬症被你治好了
建議題主先去找本書看看,先深入理解一下MATLAB的原理以及應用,先不要急著想能有什麼大用處 。想將一樣東西運用自如,必然是對其充分了解,軟體也是如此。
像MATLAB, mathematica 這一類軟體都有著豐富的函數庫,而且是免編譯直接可調用的,這正是這類軟體的優勢,不然我們直接去編程就是了,還用這軟體幹嘛哦
發布於 2015-02-10 感謝
收藏 • 沒有幫助 • 舉報 • 作者保留權利
0贊同反對,不會顯示你的姓名
鵪鶉 ,Freedom,基拉的坐騎
fft
發布於 2015-02-03 感謝
收藏 • 沒有幫助 • 舉報 • 作者保留權利
0贊同反對,不會顯示你的姓名
Wayne Sun ,喜歡畫畫的工科狗……
題主這問題太偷懶額,無法授之以魚啊,還是不對題的說方法吧……
首先,基本你在數學課本上學到的函數都有,網上有常用函數手冊down一個放手邊查著用,題主自己找吧,要那種簡潔的,只有函數名和用途的(因為這樣比較薄),需要用的時候查help看用法,matlab會用help很重要。
然後捏,matlab有很多加速的技巧,千萬別用c或c++的思維來寫程序,那樣會死的很慘,一個小程序跑你個幾小時都是可能的。能用向量就不要用循環,能用矩陣運算就不要用元素運算,矩陣運算用好了簡直快的飛起啊 ……總之呢,每當你想寫邏輯語句的時候,都要慎重……
編輯於 2015-01-27 感謝
收藏 • 沒有幫助 • 舉報 • 作者保留權利
0贊同反對,不會顯示你的姓名
CH3COOH ,作業補交磚家
matlab自帶幫助而且有搜索的功能。
發布於 2015-01-27 感謝
收藏 • 沒有幫助 • 舉報 • 作者保留權利
0贊同反對,不會顯示你的姓名
落在起風的地方 ,Web渣/喜歡四處蹭飯
當你覺得你得用循環、建函數來實現某種功能時,就要搜搜有沒有符合你描述的函數或命令了。matlab裡對數值運算提供的功能很多,尤其是涉及矩陣運算時再去用數組、循環什麼的運行效率就低很多了。題注也可多翻翻手冊,那些個功能很多都是初學編程時要用c啊c++啊實現的,很容易理解。
發布於 2015-01-27 感謝
收藏 • 沒有幫助 • 舉報 • 作者保留權利
1贊同反對,不會顯示你的姓名
Tao Tao ,金融
1 人贊同
可以看手冊,或者經常看看matlab相關的論壇,上面有總結的