[摘要]
matlab是一種科學計算語言,和c、fortran等高階語言相類似,能方便的實現程式控制。以下介紹一點matlab程式設計的技巧。
巢狀計算
程式執行的速度取決於呼叫的子程式的個數和演算法實現。通常希望子程式越少越好。巢狀可以有效地減少子程式。
乙個典型的例子就是多項式的求值計算:p(
x)=a
3x3+
a2x2
+a1x
+a0和
p(x)
=((a
3x+a
2)x+
a1)x
+a0兩者的結果相同,但是計算量不一樣。
n=100000;
a=[1:n];
x=1;
ticp1=sum(a.*x.^[n-1:-1:0]);
p1, toc
tic,p2=a(1);
for i=2:n
p2=p2*x+a(i);
endp2,toc
tic,p3=polyval(a,x),toc
p1 =
5.0001e+09
時間已過 0.079124 秒。
p2 =
5.0001e+09
時間已過 0.018267 秒。
p3 =
5.0001e+09
時間已過 0.212526 秒。
例:計算possion分布:s(
m)=∑
mn=0
λnn!
e−λ當m很大的時候的值。
tic
r=80;
m=160;
sum=0;
for n=1:m
temp=1;
for k=1:n
temp=temp*k;
endsum=sum+r^n/temp*exp(-r);
endsum,toc
sum =
1.0000
時間已過 0.002170 秒。
迴圈結構
matlab中的迴圈語句主要有for和while。其基本格式為:
for 迴圈變數=初值:步長:終值迴圈體語句
end
while 條件注意事項:迴圈語句
end
盡量避免使用迴圈。matlab中迴圈速度較低,應該盡量使用向量運算代替迴圈。
為了提高速度,在for迴圈之前,應該分配陣列。
有限考慮內聯函式(inline)。
應用mex技術。
迴圈和巢狀
程式的巢狀是指在程式執行的過程中呼叫自身的過程。又稱為遞迴呼叫。
例如:計算100!
tic
m=100;
f=1;
fori=2:m
f=f*i;
endf,toc
f = 9.3326e+157
時間已過 0.000259 秒。
function
m=hello
(n)if n<=1
m=1;
else
m=n*hello(n-1);
end>> tic,hello(100),toc
ans =
9.3326e+157
時間已過 0.002535 秒。
可見自身巢狀速度較慢。
例外處理機制
全域性變數的使用
全域性變數是指在不同的工作空間以及基本的工作空間中可以共享的變數。使用者只需在主程式或者任何子程式中宣告乙個或者多個全域性變數,則函式和主程式中都可以直接飲用它們。宣告格式如下:
global v1 v2 v3 … vn (表示式就之間用空格隔開)使用全域性變數要注意的事項:
它可以在主程式和函式之間不需要經過輸入或者輸出就直接傳遞資料。但要注意在呼叫結束後,全域性變數依然存在。
兩個或者多個函式可以共有乙個全域性變數,只要同時在這些函式中用global語句加以定義即可。
使用全域性變數要很小心才是,最好把全域性變數全部大寫,以免與函式中的區域性變數重名。
一旦宣告了全域性變數,則在程式的任何地方都可以對其修改,這破壞了程式的相對獨立性。(個人覺得能少用,就盡量少用這個功能。)
通過varargin傳遞引數
在編寫函式的時候,varvargin只能做為函式的最後乙個引數,主要傳遞函式中呼叫的子函式的可選項的引數,其大小也隨著輸入參量的變化而發生改變。
matlab自編程式入門技巧
matlab自編程式入門技巧 matlab即矩陣實驗室,方便於矩陣運算。以下是在matlab自編程式時的一些入門注意事項。file new scipt,是建立乙個主函式的書寫視窗,類似於c語言中的main函式。file new function,是建立乙個引用函式的書寫視窗,類似於c語言中的引用函式...
Matlab常用技巧
m檔案如果是函式,儲存的檔名最好與函式名一致,這點都很清楚。不過容易疏忽的是,m檔名的命名盡量不要是簡單的英文單詞,最好是由大小寫英文 數字 下劃線等組成。原因是簡單的單詞命名容易與matlab內部函式名同名,結果會出現一些莫名其妙的錯誤。例如,寫個m檔案,命名為spy,執行時就彈出乙個怪怪的fig...
matlab中小技巧
關於matlab中可能遇到的小知識點 一 字串的比較 不能使用 需要使用函式strcmp matlab中字串的比較 字串比較要用strcmp.相同則返回1,不相同則返回0.clear str1 abc str2 ab str1 str2 是乙個字元和乙份字元的比較,長度必須相同,字元長度不相等時會出...