MATLAB之所以運(yùn)算功能強(qiáng)大,重要原因之一就是它含有豐富的內(nèi)建函數(shù),例如數(shù)學(xué)函數(shù)中的三角函數(shù)、復(fù)函數(shù)、多項(xiàng)式函數(shù)、數(shù)據(jù)分析函數(shù)的求平均值、最大最小值、排序等,以及邏輯/選擇函數(shù)如if-else等,還有用來(lái)模擬隨機(jī)發(fā)生事件的隨機(jī)函數(shù)。雖然MATLAB提供了數(shù)百種內(nèi)建函數(shù),但也不是包羅萬(wàn)象,為了解決這個(gè)問(wèn)題,MATLAB提供了十分方便的自定義函數(shù)(自建函數(shù))的強(qiáng)大功能。
l)常見(jiàn)數(shù)學(xué)函數(shù)
MATLAB提供了許多內(nèi)建函數(shù),如對(duì)數(shù)函數(shù)、三角函數(shù)、多項(xiàng)式函數(shù)等。使用函數(shù)需注意,函數(shù)名要放在等式的右邊,等式左邊是計(jì)算這個(gè)函數(shù)的表達(dá)式。此外,函數(shù)可以嵌套,被當(dāng)作另一個(gè)函數(shù)的自變量調(diào)用。一些常用的內(nèi)建函數(shù)的格式和功能如下:
round(x)按四舍五入,對(duì)x取整
fix(x)將x值近似至最接近0的整數(shù)
floor(x)將x值近似至最接近-¥的整數(shù)
ceil(x)將x值近似至最接近¥的整數(shù)
sign(x)檢驗(yàn)x的符號(hào),x<0返回值為-1, x=0 返回值為0,x>0返回值為1
rem(x,y)求x/y的余數(shù)
exp(x)指數(shù)函數(shù)
log(x)以e為底的對(duì)數(shù)函數(shù)即自然對(duì)數(shù)
log10(x)以10為底的對(duì)數(shù)函數(shù)
至于三角函數(shù)和雙曲線(xiàn)函數(shù)的使用,和一般數(shù)學(xué)式相似,其語(yǔ)法也很簡(jiǎn)潔易懂。例如三角函數(shù)有:sin(x)、cos(x)、tan(x)、asin(x)、acos(x)、atan(x)、atan2(y,x)。常用到的雙曲線(xiàn)函數(shù)有:sinh(x)、cosh(x)、tanh(x)、asinh(x)、acosh(x)、atanh(x)。
常見(jiàn)的復(fù)數(shù)相關(guān)函數(shù)有real(求實(shí)部)、imag(求虛部)、conj(求共軛)、abs(求復(fù)數(shù)的值)、angle(求復(fù)角)等,MATLAB是以i或j來(lái)代表虛部,若復(fù)數(shù)表示為x=a+bi,其共軛復(fù)數(shù),復(fù)數(shù)大小 ,復(fù)數(shù)向量的夾角 ,復(fù)數(shù)實(shí)部 ,復(fù)數(shù)虛部 ,復(fù)數(shù)指數(shù)表示法。則這些函數(shù)所對(duì)應(yīng)的MATLAB的命令為:a=real(x),b=imag(x),=conj(x),r =abs(x), =angle(x),x=r*exp(i*angle(x))
用極坐標(biāo)圖描述復(fù)數(shù)往往比一般的卡氏坐標(biāo)更合適,polar命令專(zhuān)門(mén)繪制極坐標(biāo)圖,其命令格式為polar(theta,r)其中(theta, r)分別表示極坐標(biāo)上的角度 及半徑值r。以下例子說(shuō)明了它的用法:
>>t=0:0.01:2*pi;%給出角度t的變化范圍
>>r=sin(2*t).*cos(2*t);%求出相應(yīng)的半徑r的值
>>polar(t,r)%做出極坐標(biāo)圖
>> title('Polar plot ofsin(2t)cos(2t)');% 加上題頭
>> grid%加上網(wǎng)格線(xiàn)
令p(x)代表多項(xiàng)式 。MATLAB以p=[1 4 -7-10]來(lái)描述這個(gè)多項(xiàng)式,其中的數(shù)值是多項(xiàng)式的各階項(xiàng)(從高到低)的系數(shù),然后只要給出一組X的值,就可以用polyval函數(shù)來(lái)求此多項(xiàng)式的一組值,為了求上式p(x)的值,可執(zhí)行以下命令:
>> x=linspace(-1,3); %給出100個(gè)從-1到3等分的x的值
>> p=[1 4 -7-10];% 給出要求的多項(xiàng)式
>> v=polyval(p,x);% v為所求的與100個(gè)x值對(duì)應(yīng)的多項(xiàng)式的值
在MATLAB中,多項(xiàng)式的四則運(yùn)算也很簡(jiǎn)單,加減直接用運(yùn)算符相連,做乘除運(yùn)算須借助conv和deconv兩個(gè)函數(shù)。它們的格式是:乘法用conv(a,b),其中a、b是兩個(gè)多項(xiàng)式系數(shù)的數(shù)組。除法用deconv函數(shù),其格式是[q,r]=deconv(a,b),其中q,r分別代表商多項(xiàng)式及余數(shù)多項(xiàng)式。下面用幾個(gè)范例,來(lái)說(shuō)明兩個(gè)多項(xiàng)式的加減乘除運(yùn)算:
>> a=[1 2 3 4];b=[1 4 916]; % 給出兩個(gè)多項(xiàng)式a和b
>>c=a+b;% 求兩個(gè)多項(xiàng)式的和的多項(xiàng)式
>>d=a-b;% 求兩個(gè)多項(xiàng)式的差的多項(xiàng)式
>>e=conv(a,b)% 求兩個(gè)多項(xiàng)式的積的多項(xiàng)式
>>[q,r]=deconv(a,b)% 求兩個(gè)多項(xiàng)式的商和余數(shù)的多項(xiàng)式
令多項(xiàng)式等于零,則它變成一個(gè)方程,MATLAB采用數(shù)值法可以很方便地求解高階方程,求解方程的函數(shù)是roots,它的格式是roots(p),若存在有復(fù)根,會(huì)用i或j來(lái)表示虛根。注意在輸入方程的系數(shù)時(shí),所缺項(xiàng)的系數(shù)一定要用零來(lái)補(bǔ)足,給出例子如下:
>> p=[1-12 0 25116];% 其中二階項(xiàng)系數(shù)為零說(shuō)明方程中缺二階項(xiàng)
>>r=roots(p)% r為所求的解,此例既有實(shí)數(shù)根也有復(fù)數(shù)根
roots函數(shù)的逆函數(shù)是 poly,當(dāng)已知方程的解r,可用此函數(shù)求出原方程,例如:
>> r=[-2-1];% 已知某方程的根分別為-1,-2
>>pp=poly(r)% 用poly函數(shù)可求得pp= (x+2)(x+1) = x^2
+3x+2
polyder函數(shù)用來(lái)求多項(xiàng)式的微分,格式為polyde(p)。polyder(a, b)求多項(xiàng)式a,b乘積的微分;[p,q]= polyder(a,b)求多項(xiàng)式a,b商的微分,分母和分子分別保存在p,q中。residue函數(shù)完成兩多項(xiàng)式相除,結(jié)果用部分分式展開(kāi)來(lái)顯示,例如:
>>n=10*[1,2];% 被除的多項(xiàng)式是10*s+20
>> d=poly([-l,-3,-4]);% 作為除數(shù)的多項(xiàng)式用根的方式表示,說(shuō)明要分
解成與根相關(guān)的分式
>>[r,p,k]=risidue(n,d)%r為分子數(shù)組,P為分母常數(shù)項(xiàng),k為余項(xiàng)
r= -6.6667
5.0000
1.6667
P= -4.0000
-3.0000
-1.0000
k=[ ]
事實(shí)上就是完成以下的運(yùn)算:
上面介紹過(guò)用roots來(lái)求方程的解,但是如果方程式不是多項(xiàng)式的形態(tài)就不能用roots函數(shù)。而這類(lèi)的方程多半是非線(xiàn)性方程式,其函數(shù)形態(tài)變化很大,此時(shí)可以用fzero函數(shù)來(lái)求解,它的基本原理就是找x的值,將此x值代人時(shí),能使該函數(shù)值為零。求非線(xiàn)性方程式的根應(yīng)按照以下步驟:
(1)先定義方程式。注意必須將方程式轉(zhuǎn)換成f(x)=0的形態(tài),例如某方程式為sin(x)=3,則該方程式應(yīng)表示為f(x)=sin(x)-3。
(2)代人適當(dāng)范圍的x,求出相應(yīng)的f(x)值,然后將該函數(shù)圖畫(huà)出,以便了解該方程式的函數(shù)的走向和趨勢(shì)。
(3)選取圖中可能的f(x)與x軸相交的x0,再調(diào)用fzero('function',x0),即可求出在x0附近可能存在的根,其中function是先前已定義的方程名。如果從函數(shù)分布圖看出根不只一個(gè),則需再代人一個(gè)x1,將下一個(gè)根求出。
2)常用數(shù)據(jù)分析函數(shù)
MATLAB提供了很多數(shù)據(jù)處理和分析的函數(shù),常見(jiàn)的有:
max(x)找出數(shù)組x中的最大值。
max(x,y)找出數(shù)組x及y的最大值,產(chǎn)生一個(gè)由兩個(gè)數(shù)組中最大的元素組成的新數(shù)組。[y,i]=max(x)將數(shù)組x中的最大值賦給y,其所在位置賦給i。
min(x)找出數(shù)組x中的最小值。
min(x, y)找出數(shù)組x及y的最小值,產(chǎn)生一個(gè)由兩個(gè)數(shù)組中最小的元素組成的新數(shù)組。
[y,i]=min(x)將數(shù)組x中的最小值賦給y,其所在位置賦給i 。
mean(x)求出數(shù)組x中的平均值。

median(x)找出數(shù)組x的中位數(shù)。
sum(x)計(jì)算數(shù)組x的總和。
prod(x)計(jì)算數(shù)組x的連乘積。
cumsum(x)產(chǎn)生新的數(shù)組,每一項(xiàng)都是原數(shù)組x中前項(xiàng)的累加和。
cumprod(x)產(chǎn)生新的數(shù)組,每一項(xiàng)都是原數(shù)組x中前項(xiàng)的連乘積。
例如:
>> x=[1 2 3 4 5];
>>sum(x)%將x中的各項(xiàng)求和,結(jié)果為15
>>prod(x)%將x中的各項(xiàng)連乘,結(jié)果是120
>>cumsum(x)%將x的每一項(xiàng)與它的前項(xiàng)累加后生成新的數(shù)組[1 3 6 10 15]
>>cumprod(x)%將x的每一項(xiàng)與它的前項(xiàng)連乘后生成新的數(shù)組[1 2 6 24 120]
在分析各種工程問(wèn)題時(shí),常常需要模擬某種不可預(yù)見(jiàn)且不規(guī)則的現(xiàn)象,這時(shí)可以利用隨機(jī)數(shù)(randomnumber)來(lái)產(chǎn)生模擬隨機(jī)特性的一批數(shù)據(jù)。隨機(jī)數(shù)按其統(tǒng)計(jì)分布特性可分為:均勻(uniform)隨機(jī)數(shù)和正態(tài)(normal)隨機(jī)數(shù)。均勻隨機(jī)數(shù)是指其數(shù)值平均地分布于某一區(qū)間,而正態(tài)隨機(jī)數(shù)的數(shù)值則是呈現(xiàn)高斯(Gaussian)分布,形狀像一個(gè)中間高兩邊低的山丘。
用MATLAB函數(shù)rand可產(chǎn)生在[0,1]區(qū)間平均分布的隨機(jī)數(shù),產(chǎn)生均勻隨機(jī)數(shù)的函數(shù)是rand(n)和rand(m,n),前者產(chǎn)生n個(gè)隨機(jī)數(shù),后者產(chǎn)生mn個(gè)隨機(jī)數(shù)。將這些隨機(jī)數(shù)代人數(shù)學(xué)模型中,可以模擬某種事件出現(xiàn)的概率。其中要注意seed(種子)這個(gè)選項(xiàng),它用來(lái)設(shè)定隨機(jī)數(shù)產(chǎn)生的起始值,有相同起始值的隨機(jī)數(shù),其后產(chǎn)生的隨機(jī)數(shù)每次都相同。選擇隨機(jī)數(shù)種子函數(shù)的格式為rand('seed',n),n規(guī)定≥0。其中n=0有特別的意義,此時(shí)它第一次產(chǎn)生的隨機(jī)數(shù)的起始值為931316785;其他的n值就是欲使用的起始值。如果使用相同的起始值,則隨機(jī)數(shù)的序列會(huì)一樣,因?yàn)殡S機(jī)數(shù)是依據(jù)起始值進(jìn)行計(jì)算的。如果所需的隨機(jī)值不在[0,1]區(qū)間,只需對(duì)其進(jìn)行線(xiàn)性處理即可。
用MATLAB函數(shù)randn可產(chǎn)生正態(tài)隨機(jī)數(shù),由于正態(tài)隨機(jī)數(shù)并非以上下限來(lái)定義,而是用數(shù)據(jù)的平均值和方差來(lái)定義,因此在產(chǎn)生正態(tài)隨機(jī)數(shù)時(shí),需設(shè)定平均值和方差的大小。randn(n)和randn(m,n)是分別產(chǎn)生含n×n和m×n個(gè)正態(tài)隨機(jī)數(shù)元素的矩陣的函數(shù),其平均值為0,方差為l。如果需要產(chǎn)生的正態(tài)隨機(jī)數(shù)值的平均值和方差并非0和1,可以采用以下步驟進(jìn)行轉(zhuǎn)換。假設(shè)要得到一組正態(tài)隨機(jī)數(shù),它的平均值為b方差為a,首先產(chǎn)生一組隨機(jī)數(shù)r,再將其值乘以方差a,接著再加上平均值b,算式為x=a*r+b,則x就是具有所需方差和平均值的隨機(jī)數(shù)的矩陣。
3)矩陣運(yùn)算函數(shù)
MATLAB的運(yùn)算以數(shù)組(array)及矩陣(matrix)方式來(lái)進(jìn)行,但二者運(yùn)算性質(zhì)明顯不同,數(shù)組強(qiáng)調(diào)元素對(duì)元素的運(yùn)算,所以在運(yùn)算符前要加.,而矩陣則采用線(xiàn)性代數(shù)的運(yùn)算方式。請(qǐng)看下表:
數(shù)組運(yùn)算符號(hào) | 矩陣運(yùn)算符號(hào) | 功能 |
+ | + | 加 |
- | - | 減 |
.* | * | 乘 |
./ | / | 左除 |
. | 右除 | |
.^ | ^ | 次方 |
.’ | ’ | 轉(zhuǎn)置 |
若已有一矩陣A,則求它的逆矩陣和秩的函數(shù)分別為inv(A)和rank(A)。計(jì)算矩陣行列式的函數(shù)為det(A)。用dig(A)可建立對(duì)角矩陣或取矩陣的對(duì)角向量;rot90(A)可將矩陣旋轉(zhuǎn)90度。
愛(ài)華網(wǎng)本文地址 » http://www.klfzs.com/a/25101015/258702.html
愛(ài)華網(wǎng)



