寫給學習 matlab 的新手們

寫給學習 matlab 的新手們

本人接觸matlab已經有5年多的時間了,一直想寫點東西,但是之前不知道放在哪里才能發揮它的最大作用,直到幾天前碰上了這個論壇(有點像諸葛亮遇見姜維,哈哈)。

廢話不說,我想借貴論壇寶地,寫一些經驗給使用matlab的新手們,當然了,老大們也可以看看,不嫌棄我寫得粗糙的話還可以指點一下,先謝過了~~~~

首先我想說的是,matlab跟其他語言不一樣(我用的比較多的編程語言,除了matlab就應該是c或c++了,VB和Delphi也接觸過,我想版面(matlab版)大部分人也差不多),如果你抱著“把其他語言的思想運用在matlab里面”的話,那么我想,即使程序運行不出錯,也很難把握matlab的精髓,也就很難發揮matlab的作用了。所以,如果你是希望matlab作為VC的附屬品,即你不想在matlab上面花太多功夫,只純粹想用matlab來完成VC做不了或很難做成的任務的話,那么,這篇文章你也不需要再閱讀下去了;如果你是希望掌握一門語言、一個工具,使它更有效為你服務的話,那么,希望本文對你有所幫助。

Matlab是一個基于矩陣運算的軟件,這恐怕是眾所周知的事情了,但是,真正在運用的時候(就是在編程的時候),許多人(特別是初學者)往往沒有注意到這個問題,因此,for循環(包括while循環)滿天飛…………..這不僅是暴殄天物(沒有發揮matlab所長),還浪費了你寶貴的時間。對此,版友MVH在他的“MATLAB 小技巧”一文中也有所涉及,雷同的東西我也就不重復了,matlab的“幫助”里面也有相關的指示。我這里想說的一點是,初學者往往在初始化矩陣的時候注意到這個問題,懂得了使用矩陣而不是循環來賦值,但是,在其他環節上,就很容易疏忽,或者說,仍然沒有擺脫C++的思想。舉個例子吧,下面的代碼是我的一個師弟寫的,我想他接觸matlab也有2、3年時間了(在此說明一下,接觸2、3年并不是表示每天都會跟matlab打交道,我本人也不是,只是在一年某幾個時間段里面連續使用),但是仍然會出現類似的問題:

J = 0;
lt = size(imf1,2);
for (i = 1:lt)
if (abs(imf1(i)) > 1)
J = 1;
break
end
end

上面的代碼實現了一個目的――檢查信號imf1(一個向量)是否存在絕對值大于1的點,這顯然是基于C++的思想寫出來的。如果在matlab下面,其實用兩個語句就足夠了(當然,可以合并為一個):

q = find(imf1>0);
J = ~isempty(q);

這樣的修改帶來的好處是很可觀的。

又如:

for j = 1:num
imf1(start1+j) = 2*li1(j+1) - imf1(start1+j);
end

這是一個對稱翻折的問題,它完全可以用以下這個語句簡潔表示:
imf1(start1+1:start1+num) = 2*li1(2:num+1) - imf1(start1+1:start1+num);

因此,如果是新手,可以先用循環(基于C++的思想)來編寫代碼,然后看看能否用matlab的語言(基于矩陣的思想)來改進。當然,這樣做的前提是你對matlab提供的一些函數比較熟悉才行,這些函數在matlab的“幫助”那里搜索“Functions Used in Vectorizing”就可以找到一些,其他的也可以找相關的書籍(沒找到?不可能,電子版總可以下載到的)

對提高matlab編程能力的方法,我想主要有以下三個:
1. 查help
2. 多上上論壇,搜索帖子、發帖子問人
3. 閱讀別人、特別是牛人的程序

當然了,正如所有的程序語言一樣,“3分課本7分上機”,一定要動手才行,不能光看。

最后,整理一下常用的快捷鍵(用【】表示)或命令:
1. 在命令窗口(Command Window)中:
1) 【上、下鍵】――切換到之前、之后的命令,可以重復按多次來達到你想要的命令
2) clc――清除命令窗口顯示的語句,此命令并不清空際工作窗口的變量,僅僅是把屏幕上顯示出來的語句清除掉
3) clear――這個才是清空工作窗口的變量命令,常用語句clear all來完成
4) 【Tab】鍵――(轉自版友心燈)在matlab@hit.edu.cn看到的:在command窗口,輸入一個命令的前幾個字符,然后按tab鍵,會彈出前面含這幾個字符的所有命令,找到你要的命令,回車,就可以自動完成。目前討論結果是:matlab6.5版本中,如果候選命令超過100個,則不顯示。而在matlab7以后版本中,則沒有這個顯示,均可正常提示
5) 【Ctrl+C】(或【Ctrl+Break】)――(轉自版友yangjin_ren)在matlab程序運行過程中,可能由于程序編寫的失誤,導致程序不停的運行,在命令窗口輸入“Ctrl+C”可以將運行的程序停下來,而不需要將整個Matlab程序關掉。不過進行此操作的前提是能夠激活切換到命令窗口才行,呵呵。
2. 在編輯器(Editor)中:
1) 【Tab】(或【Ctrl+]】)――增加縮進(對多行有效)
2) 【Ctrl+[】--減少縮進(對多行有效)
3) 【Ctrl+I】--自動縮進(即自動排版,對多行有效)
4) 【Ctrl+R】――注釋(對多行有效)
5) 【Ctrl+T】――去掉注釋(對多行有效)
6) 【Ctrl+B】――括號配對檢查(對版本6.5有效,但版本7.0無效,不知道是取消了還是換了另外的快捷鍵,請大牛們指點,其他版本沒有測試過)
7) 【F12】――設置或取消斷點
8) 【F5】――運行程序
其余的例如在Debug狀態下的快捷鍵就不多說了,自己看菜單Debug吧


累了, 有時間再寫吧。希望大家多交流~~~~~~

Coming: (以下東西都是一年前做的了,不知道能否記起,呵呵)
1) 關于神經網絡的――調用matlab的nntool命令后的使用問題(我做的時候沒有看過其他書籍或資料,是自己閉門造車的結果,如果寫之前發現其他書籍有相關介紹的話就不寫了)
2) 關于外部接口的――matlab與C++Builder的接口,想詳細介紹如何利用matcom 4.5在C++Builder中調用matlab的代碼以及matcom的一些技巧。由于我不是搞項目開發的(搞科研、搞課題的),所以對VC不熟悉,大學的時候學過一點,不過我想對于搞科研來說C++Builder就足夠了,免去很多麻煩,Builder在界面和數據庫連接上面(我只接觸過這兩方面)還是做得不錯的。同樣,如果發現其他書籍上有類似的東西就不寫了
3) GUI方面也寫寫吧,只是一點點心得或者體會,呵呵,這個相對簡單些,篇幅相對要少些。

[ 本帖最后由 eight 于 2006-8-27 12:57 編輯 ]
轉自 振動論壇
登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP

6