① 怎麼用c語言實現matlab中的功能
通過把耗時長的函數用c語言實現,並編譯成mex函數可以加快執行速度。Matlab本身是不帶c語言的編譯器的,所以要求你的機器上已經安裝有VC,BC或Watcom
C中的一種。如果你在安裝Matlab時已經設置過編譯器,那麼現在你應該就可以使用mex命令來編譯c語言的程序了。如果當時沒有選,就在Matlab里鍵入mex
-setup,下面只要根據提示一步步設置就可以了。需要注意的是,較低版本的在設置編譯器路徑時,只能使用路徑名稱的8字元形式。比如我用的VC裝在路徑C:\PROGRAM
FILES\DEVSTUDIO下,那在設置路徑時就要寫成:「C:\PROGRA~1」這樣設置完之後,mex就可以執行了。為了測試你的路徑設置正確與否,把下面的程序存為hello.c。
/*hello.c*/
#include
"mex.h"
void
mexFunction(int
nlhs,
mxArray
*plhs[],
int
nrhs,
const
mxArray
*prhs[])
{
mexPrintf("hello,world!\n");
}
假設你把hello.c放在了C:\TEST\下,在Matlab里用CD
C:\TEST\
將當前目錄改為C:\
TEST\(注意,僅將C:\TEST\加入搜索路徑是沒有用的)。現在敲:
mex
hello.c
如果一切順利,編譯應該在出現編譯器提示信息後正常退出。如果你已將C:\TEST\加
入了搜索路徑,現在鍵入hello,程序會在屏幕上打出一行:
hello,world!
看看C\TEST\目錄下,你會發現多了一個文件:HELLO.DLL。這樣,第一個mex函數就算完成了。分析hello.c,可以看到程序的結構是十分簡單的,整個程序由一個介面子過程
mexFunction構成。
void
mexFunction(int
nlhs,
mxArray
*plhs[],
int
nrhs,
const
mxArray
*prhs[])
前面提到過,Matlab的mex函數有一定的介面規范,就是指這
nlhs:輸出參數數目
plhs:指向輸出參數的指針
nrhs:輸入參數數目
例如,使用
[a,b]=test(c,d,e)
調用mex函數test時,傳給test的這四個參數分別是
2,plhs,3,prhs
其中:
prhs[0]=c
prhs[1]=d
prhs[2]=e
當函數返回時,將會把你放在plhs[0],plhs[1]里的地址賦給a和b,達到返回數據的目的。
細心的你也許已經注意到,prhs[i]和plhs[i]都是指向類型mxArray類型數據的指針。
這個類型是在mex.h中定義的,事實上,在Matlab里大多數數據都是以這種類型存在。當然還有其他的數據類型,可以參考Apiguide.pdf里的介紹。
為了讓大家能更直觀地了解參數傳遞的過程,我們把hello.c改寫一下,使它能根據輸
入參數的變化給出不同的屏幕輸出:
//hello.c
2.0
#include
"mex.h"
void
mexFunction(int
nlhs,
mxArray
*plhs[],
int
nrhs,
const
mxArray
*prhs[])
{
int
i;
i=mxGetScalar(prhs[0]);
if(i==1)
mexPrintf("hello,world!\n");
else
mexPrintf("大家好!\n");
}
將這個程序編譯通過後,執行hello(1),屏幕上會打出:
hello,world!
而hello(0)將會得到:
大家好!
現在,程序hello已經可以根據輸入參數來給出相應的屏幕輸出。在這個程序里,除了用到了屏幕輸出函數mexPrintf(用法跟c里的printf函數幾乎完全一樣)外,還用到了一個函數:mxGetScalar,調用方式如下:
i=mxGetScalar(prhs[0]);
"Scalar"就是標量的意思。在Matlab里數據都是以數組的形式存在的,mxGetScalar的作用就是把通過prhs[0]傳遞進來的mxArray類型的指針指向的數據(標量)賦給C程序里的變數。這個變數本來應該是double類型的,通過強制類型轉換賦給了整形變數i。既然有標量,顯然還應該有矢量,否則矩陣就沒法傳了。看下面的程序:
//hello.c
2.1
#include
"mex.h"
void
mexFunction(int
nlhs,
mxArray
*plhs[],
int
nrhs,
const
mxArray
*prhs[])
{
int
*i;
i=mxGetPr(prhs[0]);
if(i[0]==1)
mexPrintf("hello,world!\n");
else
mexPrintf("大家好!\n");
}
這樣,就通過mxGetPr函數從指向mxArray類型數據的prhs[0]獲得了指向double類型的指針。
但是,還有個問題,如果輸入的不是單個的數據,而是向量或矩陣,那該怎麼處理呢
?通過mxGetPr只能得到指向這個矩陣的指針,如果我們不知道這個矩陣的確切大小,就
沒法對它進行計算。
為了解決這個問題,Matlab提供了兩個函數mxGetM和mxGetN來獲得傳進來參數的行數
和列數。下面常式的功能很簡單,就是獲得輸入的矩陣,把它在屏幕上顯示出來:
//show.c
1.0
#include
"mex.h"
#include
"mex.h"
void
mexFunction(int
nlhs,
mxArray
*plhs[],
int
nrhs,
const
mxArray
*prhs[])
{
double
*data;
int
M,N;
int
i,j;
data=mxGetPr(prhs[0]);
//獲得指向矩陣的指針
M=mxGetM(prhs[0]);
//獲得矩陣的行數
N=mxGetN(prhs[0]);
//獲得矩陣的列數
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
mexPrintf("%4.3f
",data[j*M+i]);
mexPrintf("\n");
}
}
編譯完成後,用下面的命令測試一下:
a=1:10;
b=[a;a+1];
show(a)
show(b)
需要注意的是,在Matlab里,矩陣第一行是從1開始的,而在C語言中,第一行的序數為零,Matlab里的矩陣元素b(i,j)在傳遞到C中的一維數組大data後對應於data[j*M+i]
。
輸入數據是在函數調用之前已經在Matlab里申請了內存的,由於mex函數與Matlab共用同一個地址空間,因而在prhs[]里傳遞指針就可以達到參數傳遞的目的。但是,輸出參數卻需要在mex函數內申請到內存空間,才能將指針放在plhs[]中傳遞出去。由於返回指針類型必須是mxArray,所以Matlab專門提供了一個函數:mxCreateDoubleMatrix來實現內存的申請,函數原型如下:
mxArray
*mxCreateDoubleMatrix(int
m,
int
n,
mxComplexity
ComplexFlag)
m:待申請矩陣的行數
n:待申請矩陣的列數
為矩陣申請內存後,得到的是mxArray類型的指針,就可以放在plhs[]里傳遞回去了。但是對這個新矩陣的處理,卻要在函數內完成,這時就需要用到前面介紹的mxGetPr。使用
mxGetPr獲得指向這個矩陣中數據區的指針(double類型)後,就可以對這個矩陣進行各種操作和運算了。下面的程序是在上面的show.c的基礎上稍作改變得到的,功能是將輸
//reverse.c
1.0
#include
"mex.h"
void
mexFunction(int
nlhs,
mxArray
*plhs[],
int
nrhs,
const
mxArray
*prhs[])
{
double
*inData;
double
*outData;
int
M,N;
int
i,j;
inData=mxGetPr(prhs[0]);
M=mxGetM(prhs[0]);
N=mxGetN(prhs[0]);
plhs[0]=mxCreateDoubleMatrix(M,N,mxREAL);
outData=mxGetPr(plhs[0]);
for(i=0;i<M;i++)
for(j=0;j<N;j++)
outData[j*M+i]=inData[(N-1-j)*M+i];
}
當然,Matlab里使用到的並不是只有double類型這一種矩陣,還有字元串類型、稀疏矩陣、結構類型矩陣等等,並提供了相應的處理函數。本文用到編制mex程序中最經常遇到的一些函數,其餘的詳細情況清參考Apiref.pdf。
通過前面兩部分的介紹,大家對參數的輸入和輸出方法應該有了基本的了解。具備了這些知識,就能夠滿足一般的編程需要了。但這些程序還有些小的缺陷,以前面介紹的re由於前面的常式中沒有對輸入、輸出參數的數目及類型進行檢查,導致程序的容錯性很差,以下程序則容錯性較好
#include
"mex.h"
void
mexFunction(int
nlhs,
mxArray
*plhs[],
int
nrhs,
const
mxArray
*prhs[])
{
double
*inData;
double
*outData;
int
M,N;
//異常處理
//異常處理
if(nrhs!=1)
mexErrMsgTxt("USAGE:
b=reverse(a)\n");
if(!mxIsDouble(prhs[0]))
mexErrMsgTxt("the
Input
Matrix
must
be
double!\n");
inData=mxGetPr(prhs[0]);
M=mxGetM(prhs[0]);
N=mxGetN(prhs[0]);
plhs[0]=mxCreateDoubleMatrix(M,N,mxREAL);
outData=mxGetPr(plhs[0]);
for(i=0;i<M;i++)
for(j=0;j<N;j++)
outData[j*M+i]=inData[(N-1-j)*M+i];
}
在上面的異常處理中,使用了兩個新的函數:mexErrMsgTxt和mxIsDouble。MexErrMsgTxt在給出出錯提示的同時退出當前程序的運行。MxIsDouble則用於判斷mxArray中的數據是否double類型。當然Matlab還提供了許多用於判斷其他數據類型的函數,這里不加詳述。
需要說明的是,Matlab提供的API中,函數前綴有mex-和mx-兩種。帶mx-前綴的大多是對mxArray數據進行操作的函數,如mxIsDouble,mxCreateDoubleMatrix等等。而帶mx前綴的則大多是與Matlab環境進行交互的函數,如mexPrintf,mxErrMsgTxt等等。了解了這一點,對在Apiref.pdf中查找所需的函數很有幫助。
至此為止,使用C編寫mex函數的基本過程已經介紹完了。
② matlab 從最基礎開始,需要前輩高人指點!!!
matlab 是在C的基礎上寫的,但是比C不知道簡單多少。。。所以無所謂的。。
matlab 貌似只有英文版本,至少2007之前都是英文版,你可以下一個金山詞霸,不過作用不是很大,很多數學術語翻譯不準確
matlab 被譽為第四代編程語言,更加傻瓜,但要全面掌握也是不可能的。。。所以借閱相關書籍,研究你要的工具箱。。。
看書比較方便一點,上淘寶或者什麼上買本吧。。。
不用謝
另外給你附上一些錯誤說明,由於我這的pdf是我們老師還沒有出版的書籍,而且只寫了一半,所以不能給你全部,只給你些錯誤說明:
1. Assignment statements do not proce results.
賦值語句不會產生結果,通常是把==寫成了=
2. Capitalized internal function xxx; Caps Lock
may be on.
拼寫錯誤或者大寫開關打開
3. Function definitions are not permitted at the
prompt or in scripts.
函數要寫在m文件里,且必須有合法的開頭
4. Index exceeds matrix dimensions.
下標超越矩陣維數
5. Indexed empty matrix assignment is not allowed.
不同維數矩陣賦值引發的錯誤
6. Input argument 』xxx』 is undefined.
輸入參數沒定義
7. Matrix dimensions must agree.
矩陣維數不一致
8. Matrix must be square.
必須為方陣
9. Missing operator, comma, or semicolon.
缺少運算符
10. Strings passed to EVAL cannot contain function declarations.
把function寫在了命令行上
11. Subscript indices must either be real positive
integers or logicals.
下表必須是非負數,或邏輯值
12. Too many input arguments.
輸入參數太多
3. Undefined function or method 』xxx』 for input
arguments of type 』xxx』.
沒定義的函數或方法,一般是拼寫錯誤導致
14. Undefined function or variable 『xxx』.
沒定義的函數名或變數名
③ 如何在matlab上運行c語言寫的程序
1.准備好C語言程序,清楚C語言的入口函數
2.編寫mexfunction函數。mexfunction函數為C語言與MATLAB語言的介面函數。調用實例在mylinedetect.c文件中.在MATLAB中調用mex指令編譯相關文件,將C語言編譯為MEX文件。
3.編譯完成後,生成mylinedetect.mexw32或mylinedetect.mexw64文件,此文件即mex文件,用於MATLAB與C語言介面函數.
4.編譯完成之後,編寫MATLAB函數,調用MEX文件。以MEX文件的形式調用編譯完成的C語言函數[o1,o2]=mylinedetect(double(X).');......
5.輸出結果,上述linedetect函數完成圖像中直線檢測功能,帶入MATLAB中調用後形成結果。
④ MATLAB中如何運行c語言程序
呵呵,看來我們有研究相同的問題吧
matlab是一種科學的計算語言,採用的是解釋執行的方式,在配置比較水的機器(比如說我的),運行起來速度不敢恭維,但是他適合工程師用,快速建立起自己的運算平台,很多語法是類似c語言。你可以考察一下matlab的安裝目錄下extern下面lib庫中的函數,可以發現,有很多的c語言代碼,實際上,其內核有很多c的成分。
所以你應該可以明白了,可以運行,但是要把matlab的庫函數包含在c編譯庫中。
你完全可以在extern中的example中,在matlab環境下面運行幾個c代碼試一試,當然所採用的指令是mex(把c語言用於matlab中),mcc把matalb代碼轉化為c代碼,一些具體的參數,你可以用matlab強大的help工具獲得。我們還可以一起探討一下啊,給各郵箱之類的吧,呵呵,很樂意的
⑤ 在C語言編程中,如何調用MATLAB的繪圖功能
一、調用Matlab引擎
調用Matlab引擎可以在WIN32、MFC中使用,它的原理實際上相當於打開一個精簡版的Matlab然後往裡面輸命令。下面是調用Matlab中的加法程序add.m的例子。
先在Matlab的work目錄下創建add.m文件並編寫程序如下:
function s = add (a, b) s = a+b;在C程序中,首先打開精簡版的Matlab
Engine *ep = engOpen (NULL);
編譯運行後,會自動打開一個命令行監控窗口,輸入pwd就可以看到當前的工作目錄,於是需要先將工作目錄轉換至存放add.m的目錄: engEvalString (ep, 」cd ..\\..\\work」);
engEvalString是往Matlab里輸命令的函數,顯然我們的目標是成功運行: engEvalString (ep, 」s=add(a,b)」);
目前Matlab中並沒有a和b兩個變數,因此需要在C中初始化這兩個變數並轉換成Matlab基本變數類型mxArray,才能將它們輸入到Matlab中。
⑥ matlab編程
計算機程序就是計算機指令的集合,不同的編程語言指令與功能是不一樣的.MATLAB語言是一種面向對象的高級語言,它具有編程效率高、易學易用的優點.
MATLAB與其它大部分高級語言一樣,有它自己的控制流語句.控制流極其重要,因為它使過去的計算影響將來的運算。MATLAB提供如下幾種控制流結構:For循環,While循環,If-Else-End結構和switch-case-end結構。由於這些結構經常包含大量的MATLAB命令,故經常出現在M文件中.MATLAB支持的控制流語句和C語言支持的控制流語句在調用格式上非常相似.
1.For 循環
For循環允許一條語句或一組語句被重復執行預先指定的次數。For循環的一般形式是:
for x =array
語句
end
在for和end語句之間的語句按數組中的每一列執行一次。在每一次迭代中,x被指定為數組的下一列,即在第n次循環中,x=array(:, n)。例如,
for n=1:10
x(n)=sin(n*pi/10);
end
x
x =
0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090 0.5878 0.3090 0.0000
換句話,第一語句是說:對n等於1到10,執行所有語句,直至下一個end語句。第一次通過For循環n=1,第二次,n=2,如此繼續,直至n=10。在n=10以後,For循環結束,然後執行end語句後面的任何命令.注意,該循環結束後,n=10.
For循環的其它重要方面是:
(1)For循環不能用For循環內重新賦值循環變數n來終止。
For n=1:10
x(n)=sin(n*pi/10);
n=9;
end
x
x =
0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090 0.5878 0.3090 0.0000
n
n=
9
執行過程是這樣的:
n=1,
x(1)=sin(pi/10),
n=9,
n=2,
x(2)=sin(2*pi/10),
n=9,
n=3,
...,
n=10,
x(10)=sin(10*pi/10),
n=9.
循環結束後,n=9.
(2)在For循環內接受任何有效的MATLAB數組。
data=[3 9 45 6; 7 16 -1 5]
data =
3 9 45 6
7 16 -1 5
for n=data
x=n(1)-n(2)
end
x =
-4
x =
-7
x =
46
x =
1
(3)For循環可按需要嵌套。
For n=1:5
for m=1:5
A(n,m)=n^2+m^2;
end
disp(n)
end
1
2
3
4
5
A
A =
2 5 10 17 26
5 8 13 20 29
10 13 18 25 34
17 20 25 32 41
26 29 34 41 50
(4)當有一個等效的數組方法來解給定的問題時,應避免用For循環。例如,上面的第一個例子可被重寫為
n=1:10;
x=sin(n*pi/10)
x =
0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090 0.5878 0.3090 0.0000
兩種方法得出同樣的結果,而後者執行更快,更直觀,要求較少的輸入。
(5)為了得到最大的速度,在For循環(While循環)被執行之前,應預先分配數組。例如,前面所考慮的第一種情況,在For循環內每執行一次命令,變數x的大小增加1。迫使MATLAB每通過一次循環要花費時間對x分配更多的內存。為了消去這個步驟,For循環的例子應重寫為
x=zeros(1,10);
for n=1:10
x(n)=sin(n*pi/10);
end
現在,只有x(n)的值需要改變。
例1 相傳古代印度國王要褒獎他的聰明能乾的宰相達依爾(國際象棋發明者),問他要什麼?達依爾回答:「陛下只要在國際象棋棋盤的第一個格子上放一粒麥子,第二個格子上放二粒麥子,以後每個格子的麥子數都按前一格的兩倍計算。如果陛下按此法給我64格的麥子,就感激不盡,其他什麼也不要了。」國王想:「這還不容易!」讓人扛了一袋麥子,但很快用光了,再扛出一袋還不夠,請你為國王算一下共要給達依爾多少小麥?(1 小麥約 顆)
解: 麥粒總數為
程序如下:
a=1;
s=0
for i=1:64
s=s+a;
a=2*a;
end
s=s/1.4/10^8
運行後得:
s=
1.3176e+011
例2 公元前五世紀我國古代數學家張丘建在《算經》一書中提出了「百雞問題」:雞翁一值錢五,雞母一值錢三,雞雛三值錢一。百錢買百雞,問雞翁、母、雛各幾何?
解 設 x:雞翁數,則x的范圍:0~19
y:雞母數,則y的范圍:0~33
z:雞雛數,則z的范圍:0~100
則:
x+y+z=100
5x+3y+z/3=100
這是一個不定方程。
for x=0:19
for y=0:33
for z=0:100
if (x+y+z==100)&(5*x+3*y+z/3==100)
d=[x,y,z]
end
end
end
end
運行後得結果:
d =
0 25 75
d =
4 18 78
d =
8 11 81
d =
12 4 84
2.While 循環
與For循環以固定次數求一組命令的值相反,While 循環以不定的次數重復執行一組語句。While循環的一般形式是:
while 表達式1
語句1
end
只要表達式1里的所有元素為真,就執行while和end之間的語句1,否則,就結束循環。通常,表達式的值給出一個標量值,但數組值也同樣有效。在數組情況下,當數組的所有元素為真(值不等零)時,就執行語句1,數組中有一個元素為假(值為零),就結束循環。
例3按下面的公式計算:
使誤差小於給定的 .
解: 把 作為誤差,程序如下:
error=input('請輸入誤差:');
x=1;
y=0;
n=1;
while x>error
y=y+1;
x=x/n;
n=n+1;
end
e=y
運行如下:
請輸入誤差:0.001
e =
2.7181
3.IF-ELSE-END 結構
很多情況下,命令的序列必須根據關系的檢驗有條件地執行。在編程語言里,這種邏輯由某種If-Else-End結構來提供。最簡單的If-Else-End結構是:
if 表達式1
語句1
end
如果在表達式1中的所有元素為真(非零),那麼就執行if和end語言之間的語句1。
假如有兩個選擇,If-Else-End結構是:
if 表達式1
語句1
else
語句2
end
在這里,如果表達式1為真,則執行語句1;如果表達式是假,則執行語句2。
當有三個或更多的選擇時,If-Else-End結構採用形式
if 表達式1
語句1
elseif 表達式2
語句2
elseif 表達式3
語句3
elseif 表達式4
語句4
elseif ……
.
.
.
else
語句
end
如果表達式1為真,則執行語句1,結束循環;如果表達式1為假,則檢驗表達式2,如果表達式2為真,則執行語句2,結束循環;如果表達式2為假,則檢驗表達式3,如此下去,如果所有表達式都為假時,則執行最後的語句。即只執行第一個真值表達式相關的語句;接下來的表達式不檢驗,跳過其餘的If-Else-End結構。而且,最後的else命令可有可無。
4.switch-case-end結構
如果在一個程序中,必須針對某個變數不同取值情況進行相應操作,switch語句比if else語句更方便。switch語句的一般形式為:
switch 分支條件(數值或字元串)
case 數值(或字元串)條件1
語句1
case 數值(或字元串)條件2
語句2
case 數值(或字元串)條件3
語句3
case ...
...
otherwise
語句
end
其中分支條件可以是一個函數、變數或者表達式.如果條件1與分支條件匹配就執行語句1,退出循環;否則,檢驗條件2,如果條件2與分支條件匹配執行語句2,退出循環;否則,檢驗條件3,...,當所有條件都不與分支條件匹配時就執行最後的語句。注意otherwise是可以省略的。
例4 在圖形界面上放置一個彈出式菜,點擊彈出式菜單可以設置曲線顏色。
解:程序如下:
x=linspace(-6,6,50);
y=sin(x);
h=plot(x,y,'linewidth',4);
h0=uicontrol('position',[600,500,100,30],...
'style','popupmenu',...
'string','紅色|藍色|黃色|黑色|青色',...
'callback',...
['v=get(h0,''value'');',...
'switch v;',...
'case 1;',...
'set(h,''color'',''r'');',...
'case 2;',...
'set(h,''color'',''b'');',...
'case 3;',...
'set(h,''color'',''y'');',...
'case 4;',...
'set(h,''color'',''k'');',...
'case 5;',...
'set(h,''color'',''c'');',...
'end;']);
⑦ 怎樣把Matlab和c語言結合起來編程序
C、C++、JAVA都是完整的通用平台的語言。通俗的說,就是它們可以編寫任何程序並可以在大部分硬體系統和操作系統中運行,C++、JAVA都是在C語言基礎上發展起來的,在表達形式上三者很相似。區別是,C是面向過程語言,就是說,其編程核心是邏輯流程。C++和Java是面向對象語言,簡單的說,是以數據為中心進行編程。這三門語言現在都有強大的生命力,從使用范圍上大略可以按照Java——C——C++的順序排列。特別的,c語言非常適合底層開發,具有獨一無二的優勢,而且具有基礎學習的意義,可以大大地幫助兩外兩門語言的學習。
VB、QB都是從Basic語言發展起來的。VB是window平台的專屬語言,所以適用面窄,也不適合作為入門語言,因為你學不到編程的基本知識和能力,而要花精力去學習windows特有的編程方式和習慣。QB沒人用了,死掉的語言。
FOX是一種已經廢棄的資料庫語言,不用考慮了。
Matlab是使用最廣泛的科學計算的軟體,在這個軟體上用於編寫計算程序的語言也叫Matlab。所以它也不是通用編程語言,只適用於科學計算,而且只能用在Matlab軟體。初學編程者不用考慮。
學好一門編程語言的方法就一個——大量地編程,書上題目做會之後,盡可能地參與實際的項目,這是最好的鍛煉。
9月
⑧ 新手怎麼學Matlab
一,MATLAB功能非常全面,也非常強大, 主要用於科學計算,它的計算基於矩陣來實現,可用於以下方面:
1,數值計算(好多問題沒有解析解);
2,符號計算(呵呵,很強悍,做高數題方便了,不過在這方面MATLAB還不 是相當強,它的符號計算庫借用了Maple的);
3,數據的分析,處理及可視化(數據繪圖很方便);
4,圖形圖像處理,信號分析處理等等;
5,Simulink建模模擬,這是MATLAB非常有特色也是非常強大的功能,也使得其應用不僅僅局限於一般的科學計算。
二,MATLAB的軟體應用:
MATLAB是用C語言開發的,支持編程,而且其語法跟C語言很相似,樓主想必已經學過C語言,再學習MATLAB會很輕松。
MATLAB支持與C語言,Fortran語言,Java語言的混合編程,同時支持與word,excel的混合使用,擴展性強。
三,MATLAB的學習:
學習它首先要有比較好的教材,初級階段就用比較簡單的教材,清華的,北航的,都可以。
高級階段要用比較厚重,全面的教材,推薦一本鄙人正在使用的教材,人們郵電出版社出版,求是科技編著的《MATLAB 7.0 從入門到精通》,還有一本國內翻譯的由美國人寫的教材,很厚,很全(樓主自己在網上搜一下,我見同系的同學拿過,還是相當不錯的)。
另外,學習MATLAB跟學習其他語言一樣,要多上機,多練習,熟能生巧嘛。最後祝樓主學習愉快。
以上系個人總結,有啥不妥之處,還請見諒啊(看在我碼這么多字的份上,也該獎勵一下吧,呵呵)。