第3講 MATLAB數(shù)學(xué)運算_第1頁
第3講 MATLAB數(shù)學(xué)運算_第2頁
第3講 MATLAB數(shù)學(xué)運算_第3頁
第3講 MATLAB數(shù)學(xué)運算_第4頁
第3講 MATLAB數(shù)學(xué)運算_第5頁
已閱讀5頁,還剩95頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

Matlab數(shù)學(xué)運算MATLAB是一種交互式的以矩陣為基礎(chǔ)的系統(tǒng)計算平臺,它用于科學(xué)和工程的計算與可視化。

Matlab的含義是矩陣實驗室(MatrixLaboratory),是美國MathWork公司于1982年推出的一套高性能的數(shù)值計算和可視化軟件,它集數(shù)值分析、矩陣計算、信號處理和圖形顯示于一體,已發(fā)展成為國際上最優(yōu)秀的科技應(yīng)用軟件之一。

矩陣是MATLAB的核心.目錄一:矩陣運算與Matlab命令;二:函數(shù)可視化與Matlab作圖;三:插值和擬和;四:微分、積分和常微分方程;五:最優(yōu)化方法;如何撰寫數(shù)學(xué)建模論文.

矩陣運算與Matlab命令

Matlab基本指令向量的創(chuàng)建和運算1.直接輸入向量》x1=[124],x2=[1,2,1],x3=x1’2.冒號創(chuàng)建向量

x1=3.4:6.7,

x2=3.4:2:6.7,

x3=2.6:-0.8:03.生成線性等分向量指令x=linspace(a,b,n)在[a,b]區(qū)間產(chǎn)生n個等分點(包括端點)例如:x=linspace(0,1,5)結(jié)果

x=00.25000.50000.75001.0000工作空間在Matlab窗口創(chuàng)建向量后并運行后,向量就存在于工作空間(Workspace),可以被調(diào)用。

向量的運算

設(shè)三維向量x=[x1x2x3];y=[y1y2y3];,a,b為標(biāo)量。向量的數(shù)乘:a*x=[a*x1a*x2a*x3]向量的平移:x+b=[x1+bx2+bx3+b]向量和:x+y=[x1+y1x2+y2x3+y3]向量差:x-y=[x1-y1x2-y2x3-y3]向量對應(yīng)元素的運算x.*y=[x1*y1x2*y2x3*y3](乘積)x./y=[x1/y1x2/y2x3/y3](右除,右邊的y做分母)x.\y=[y1/x1y2/x2y3/x3](左除,左邊的x做分母)x.^5=[x1^5x2^5x3^5](乘冪)2.^x=[2^x12^x22^x3]x.^y=[x1^y1x2^y2x3^y3]函數(shù)計算Matlab有許多內(nèi)部函數(shù),可直接作用于向量產(chǎn)生一個同維的函數(shù)向量。如:x=linspace(0,4*pi,100);(產(chǎn)生100維向量x)

y=sin(x);

(y也自動為100維向量)

y1=sin(x).^2;y2=exp(-x).*sin(x);觀察結(jié)果創(chuàng)建矩陣(數(shù)值矩陣的創(chuàng)建)創(chuàng)建矩陣一共有4種方式:(1)直接插入數(shù)據(jù)元素。(2)利用內(nèi)部函數(shù)產(chǎn)生矩陣。(3)利用M文件產(chǎn)生矩陣。(4)利用外部數(shù)據(jù)文件裝入到指定矩陣。注意:大矩陣可由方括號中的小矩陣或向量建立。 利用內(nèi)存數(shù)組編輯器輸入大數(shù)組。 利用冒號操作符,可直接由一個矩陣產(chǎn)生另一個 子矩陣。創(chuàng)建矩陣(數(shù)值矩陣的創(chuàng)建)

直接輸入法創(chuàng)建簡單矩陣。

A=[1234;5678;9101112]

B=[-1.3,sqrt(3);(1+2)*4/5,sin(5);exp(2),6]

觀察運行結(jié)果A=123456789101112B=-1.30001.73212.4000-0.95897.38916.0000矩陣的運算(矩陣的加減、數(shù)乘、乘積等)A,A_trans=A'H=[123;210;123],K=[123;210;231]h_det=det(H),k_det=det(K),H_inv=inv(H),K_inv=K^-1矩陣的運算(左除和右除)左除“\”:

求矩陣方程AX=B的解;(

A、B的行要保持一致)

解為X=A\B;當(dāng)A為方陣且可逆時有X=A\B=inv(A)*B;右除“/”:

求矩陣方程XA=B的解

(A、B的列要保持一致)

解為X=B/A,當(dāng)A為方陣且可逆時有X=B/A=B*inv(A)矩陣的運算(左除和右除)例1:求矩陣方程:設(shè)A、B滿足關(guān)系式:AB=2B+A,求B。其中A=[301;110;014]。解:有(A-2I)B=A

程序:A=[301;110;014];B=inv(A-2*eye(3))*A,B=(A-2*eye(3))\A

觀察結(jié)果:分塊矩陣(矩陣的標(biāo)識)例2取出A的1、3行和1、3列的交叉處元素構(gòu)成新矩陣A1。解:程序A=[10112;01-123;30510;23121],vr=[1,3];vc=[1,3];A1=A(vr,vc)

觀察結(jié)果分塊矩陣(矩陣的標(biāo)識)例3將A分為四塊,并把它們賦值到矩陣B中,觀察運行后的結(jié)果。解:程序A11=A(1:2,1:2),A12=A(1:2,3:5),A21=A(3:4,1:2),A22=A(3:4,3:5)B=[A11A12;A21A22]

運行結(jié)果分塊矩陣(矩陣的修改和提?。├?(1)修改矩陣A,將它的第1行變?yōu)?。解:程序:

A=[10112;01-123;30510;23121]A(1,:)=[00000];A

(2)刪除上面矩陣A的第1、3行。程序:

A([1,3],:)=[]生成特殊矩陣

全1陣

ones(n),ones(m,n),ones(size(A))全零陣:

zeros(n),zeros(m,n),zeros(size(A))常常用于對某個矩陣或向量賦0初值單位陣:eye(n),eye(m,n)隨機陣:rand(m,n),rand(n)=rand(n,n)用于隨機模擬,常和rand('seed',k)配合使用。常用矩陣函數(shù)det(A):方陣的行列式;rank(A):矩陣的秩;eig(A):方陣的特征值和特征向量;trace(A):矩陣的跡;rref(A):初等變換階梯化矩陣Asvd(A):矩陣奇異值分解。分塊矩陣(矩陣的標(biāo)識)1.矩陣元素的標(biāo)識:

A(i,j)表示矩陣A的第i行j列的元素;2.向量標(biāo)識方式A(vr,vc):

vr=[i1,i2,…,ik]、vc=[j1,j2,…,ju]分別是含有矩陣A的行號和列號的單調(diào)向量。

A(vr,vc)是取出矩陣A的第i1,i2,…,ik行與j1,j2,…,ju列交叉處的元素所構(gòu)成新矩陣。提取矩陣元素在MATLAB中,矩陣元素按列存儲,先第一列,再第二列,依次類推。x=1:10x(3) %第三個x的元素y(5) %第五個y的元素x(1:5) %列出第一到第五個x的元素y(3:-1:1) %列出第三到第一個y的元素,3為起始值,1為終止值,-1為增量y([4251]) %列出y元素,排列元素依序為原來y矩陣的4,2,5,1個元素矩陣分析MATLAB提供了大量的矩陣分析函數(shù),基本涵蓋了線性代數(shù)中的各種分析運算。1.對角陣與三角陣(1)對角陣①提取矩陣的對角線元素設(shè)A為m×n矩陣,diag(A)函數(shù)用于提取矩陣A主對角線元素,產(chǎn)生一個具有min(m,n)個元素的列向量。diag(A)函數(shù)還有一種形式diag(A,k),其功能是提取第k條對角線的元素。②構(gòu)造對角矩陣設(shè)V為具有m個元素的向量,diag(V)將產(chǎn)生一個m×m對角矩陣,其主對角線元素即為向量V的元素。diag(V)函數(shù)也有另一種形式diag(V,k),其功能是產(chǎn)生一個n×n(n=m+)對角陣,其第k條對角線的元素即為向量V的元素。(2)三角陣①上三角矩陣triu(A),triu(A,k)求矩陣A的第k條對角線以上的元素,形成新的矩陣B。②下三角矩陣tril(A),tril(A,k)其用法與triu(A)和triu(A,k)完全相同2.矩陣的轉(zhuǎn)置與旋轉(zhuǎn)(1)矩陣的轉(zhuǎn)置 轉(zhuǎn)置運算符是單撇號(')。(2)矩陣的旋轉(zhuǎn)

rot90(A,k)將矩陣A旋轉(zhuǎn)90度的k倍,k為1時可省略。(3)矩陣的左右翻轉(zhuǎn)

fliplr(A)對矩陣實施左右翻轉(zhuǎn)是將原矩陣的第一列和最后一列調(diào),第二列和倒數(shù)第二列調(diào)換,…,依次類推。(4)矩陣的上下翻轉(zhuǎn)

flipud(A)3.矩陣的逆與偽逆(1)矩陣的逆求方陣A的逆矩陣可調(diào)用函數(shù)inv(A)。(2)矩陣的偽逆求一個矩陣偽逆的函數(shù)是pinv(A)。4.方陣的行列式求方陣A所對應(yīng)的行列式的值的函數(shù)是det(A)。5.矩陣的秩與跡(1)矩陣的秩

rank(A)(2)矩陣的跡

trace(A)6.向量和矩陣的范數(shù)(1)向量的3種常用范數(shù)及其計算函數(shù)norm(V)或norm(V,2):計算向量V的2—范數(shù).norm(V,1):計算向量V的1—范數(shù).norm(V,inf):計算向量V的∞—范數(shù).(2)矩陣的范數(shù)及其計算函數(shù)與求向量的范數(shù)的函數(shù)完全相同。7.矩陣的條件數(shù)在MATLAB中,計算矩陣A的3種條件數(shù)的函數(shù)是:(1)cond(A,1)計算A的1-范數(shù)下的條件數(shù)。(2)cond(A)或cond(A,2)計算A的2-范數(shù)數(shù)下的條件數(shù)。(3)cond(A,inf)計算A的∞-范數(shù)下的條件數(shù)。8.矩陣的特征值與特征向量E=eig(A):求矩陣A的全部特征值,構(gòu)成向量E。[V,D]=eig(A):求矩陣A的全部特征值,構(gòu)成對角陣D,并求A的特征向量構(gòu)成V的列向量。[V,D]=eig(A,‘nobalance’):與第2種格式類似,但第2種格式中先對A作相似變換后求矩陣A的特征值和特征向量,而格式3直接求矩陣A的特征值和特征向量。稀疏矩陣稀疏矩陣包含兩個不同的概念,一是指矩陣的0元素較多,該矩陣是一個具有稀疏特征的矩陣,二是指采用稀疏方式存儲的矩陣。1.矩陣存儲方式MATLAB的矩陣有兩種存儲方式:完全存儲方式和稀疏存儲方式。(1)完全存儲方式(2)稀疏存儲方式2.稀疏存儲方式的產(chǎn)生(1)將完全存儲方式轉(zhuǎn)化為稀疏存儲方式函數(shù)A=sparse(S)將矩陣S轉(zhuǎn)化為稀疏存儲方式的矩陣A。當(dāng)矩陣S是稀疏存儲方式時,則函數(shù)調(diào)用相當(dāng)于A=S。sparse(m,n):生成一個m×n的所有元素都是0的稀疏矩陣。sparse(u,v,S):u,v,S是3個等長的向量。S是要建立的稀疏矩陣的非0元素,u(i)、v(i)分別是S(i)的行和列下標(biāo),該函數(shù)建立一個max(u)行、max(v)列并以S為稀疏元素的稀疏矩陣。

[u,v,S]=find(A):返回矩陣A中非0元素的下標(biāo)和元素。產(chǎn)生的u,v,S可作為sparse(u,v,S)的參數(shù)。full(A):返回和稀疏存儲矩陣A對應(yīng)的完全存儲方式矩陣。(2)產(chǎn)生稀疏存儲矩陣B=spconvert(A)該函數(shù)將A所描述的一個稀疏矩陣轉(zhuǎn)化為一個稀疏存儲矩陣。其中A為一個m×3或m×4的矩陣,其每行表示一個非0元素,m是非0元素的個數(shù)。數(shù)據(jù)的簡單分析1.當(dāng)數(shù)據(jù)為行向量或列向量時,函數(shù)對整個向量進行計算.2.當(dāng)數(shù)據(jù)為矩陣時,命令對列進行計算,即把每一列數(shù)據(jù)當(dāng)成同一變量的不同觀察值。常用的命令:

max(求最大)、min(求最小)、mean(求平均值)、sum(求和)、std(求標(biāo)準(zhǔn)差)、cumsum(求累積和)、median(求中值)、diff(差分)、sort(升序排列)、sortrows(行升序排列)等等。

插值和擬和

三機床加工問題用程控銑床加工機翼斷面的下輪廓線時每一刀只能沿x方向和y方向走非常小的一步。表3-1給出了下輪廓線上的部分?jǐn)?shù)據(jù)但工藝要求銑床沿x方向每次只能移動0.1單位.這時需求出當(dāng)x坐標(biāo)每改變0.1單位時的y坐標(biāo)。試完成加工所需的數(shù)據(jù),畫出曲線.插值已知有n+1個節(jié)點(xj,yj),j=0,1,…,n,其中xj互不相同,節(jié)點(xj,yj)可看成由某個函數(shù)y=f(x)產(chǎn)生;構(gòu)造一個相對簡單的函數(shù)y=P(x);使P通過全部節(jié)點,即P(xk)=yk,

k=0,1,…,n;用P(x)作為函數(shù)f(x)的近似。yi=interp1(x,y,xi,'method')插值方法被插值點插值節(jié)點xi處的插值結(jié)果‘nearest’

:最鄰近插值‘linear’

:線性插值;‘spline’

:三次樣條插值;‘cubic’

:立方插值。缺省時:線性插值。

注意:所有的插值方法都要求x是單調(diào)的,并且xi不能夠超過x的范圍。用MATLAB作一維插值計算例:求解機床加工問題x0=[035791112131415];y0=[01.21.72.02.12.01.81.21.01.6];x=0:0.1:15;y=interp1(x0,y0,x,'spline');plot(x0,y0,'k+',x,y,'r')gridon

要求x0,y0單調(diào);x,y可取為矩陣,或x取行向量,y取為列向量,x,y的值分別不能超出x0,y0的范圍。z=interp2(x0,y0,z0,x,y,’method’)被插值點插值方法插值節(jié)點被插值點的函數(shù)值‘nearest’

最鄰近插值‘linear’

雙線性插值‘cubic’

雙三次插值缺省時,雙線性插值用MATLAB作網(wǎng)格節(jié)點數(shù)據(jù)的插值(二維)

cz

=griddata(x,y,z,cx,cy,‘method’)

要求cx取行向量,cy取為列向量。被插值點插值方法插值節(jié)點被插值點的函數(shù)值‘nearest’

最鄰近插值‘linear’

雙線性插值‘cubic’

雙三次插值'v4‘Matlab提供的插值方法缺省時,雙線性插值用MATLAB作散點數(shù)據(jù)的插值計算例:航行區(qū)域的警示線某海域上頻繁地有各種噸位的船只經(jīng)過。為保證船只的航行安全,有關(guān)機構(gòu)在低潮時對水深進行了測量,表3-8是他們提供的測量數(shù)據(jù):表3-8.水道水深的測量數(shù)據(jù)x 129.0140.0103.588.0185.5195.0105.5 y 7.5141.523.0147.022.5137.585.5 z 4868688 x 157.5107.577.081.0162.0162.0117.5 y -6.5-81.03.056.5-66.584.0-33.5 z 9988949 航行區(qū)域的警示線其中(x,y)為測量點,z為(x,y)處的水深(英尺),水深z是區(qū)域坐標(biāo)(x,y)的函數(shù)z=z(x,y),船的噸位可以用其吃水深度來反映,分為4英尺、4.5英尺、5英尺和5.5英尺4檔。航運部門要在矩形海域(75,200)×(-50,150)上為不同噸位的航船設(shè)置警示標(biāo)記。請根據(jù)測量的數(shù)據(jù)描述該海域的地貌,并繪制不同噸位的警示線,供航運部門使用。Matlab求解x=[129140103.588185.5195105.5157.5107.57781162162117.5];y=[7.5141.52314722.5137.585.5-6.5-81356.5-66.584-33.5];z=[-4-8-6-8-6-8-8-9-9-8-8-9-4-9];cx=75:0.5:200;cy=-50:0.5:150;cz=griddata(x,y,z,cx,cy','cubic');meshz(cx,cy,cz),xlabel('X'),ylabel('Y'),zlabel('Z')figure(2),contour(cx,cy,cz,[-5-5]);gridon,holdonplot(x,y,'+')xlabel('X'),ylabel('Y')曲線擬合

已知一組(二維)數(shù)據(jù),即平面上n個點(xi,yi)i=1,…n,

尋求一個函數(shù)(曲線)y=f(x),

使f(x)

在某種準(zhǔn)則下與所有數(shù)據(jù)點最為接近,即曲線擬合得最好。

+++++++++xyy=f(x)(xi,yi)ii為點(xi,yi)與曲線y=f(x)的距離最常用的方法是線性最小二乘擬和多項式擬合對給定的數(shù)據(jù)(xj,yj),j=0,1,…,n;選取適當(dāng)階數(shù)的多項式,如二次多項式g(x)=ax^2+bx+c;使g(x)盡可能逼近(擬合)這些數(shù)據(jù),但是不要求經(jīng)過給定的數(shù)據(jù)(xj,yj);1.多項式f(x)=a1xm+…+amx+am+1擬合指令:a=polyfit(x,y,m)2.多項式在x處的值y的計算命令:

y=polyval(a,x)輸出擬合多項式系數(shù)a=[a1,…,am,am+1]’

(數(shù)組)輸入同長度數(shù)組X,Y擬合多項式

次數(shù)多項式擬合指令即要求出二次多項式:中的使得:例對下面一組數(shù)據(jù)作二次多項式擬合xi00.10.20.30.40.50.60.70.80.91yi-0.4471.9783.286.166.167.347.669.589.489.3011.22)計算結(jié)果:A=[-9.8108,20.1293,-0.0317]解:用多項式擬合的命令1)輸入命令:x=0:0.1:1;y=[-0.447,1.978,3.28,6.16,7.08,7.34,7.66,9.56,9.48,9.30,11.2];A=polyfit(x,y,2)z=polyval(A,x);plot(x,y,'k+',x,z,'r')%作出數(shù)據(jù)點和擬合曲線的圖形可化為多項式的非線性擬和一般非線性最小二乘擬和,實際上是無約束最優(yōu)化問題命令:lsqcurvefit、lsqnonlin等

微分、積分和常微分方程四數(shù)值積分常用的方法(1)用不定積分計算定積分:

牛頓-萊布尼茲公式,但是有時得不到原函數(shù);(2)定義法,取近似和的極限:高等數(shù)學(xué)中不是重點內(nèi)容但數(shù)值積分的各種算法卻是基于定義建立的

數(shù)值微積分(梯形公式和辛普森公式)trapz(x,y),按梯形公式計算近似積分;

其中步長x=[x0x1…xn]和函數(shù)值y=[f0f1…fn]為同維向量;q=quad(‘fun’,a,b,tol,trace,P1,P2,...)(低階方法,辛普森自適應(yīng)遞歸法求積分)q=quad8(‘fun’,a,b,tol,trace,P1,P2,...)(高階方法,自適應(yīng)法Cotes求積分)在同樣的精度下高階方法quad8要求的節(jié)點較少。例:數(shù)值積分X=0:pi/100:pi;Y=sin(X);Z1=trapz(X,Y)Z2=quad('sin',0,pi)Z1=1.998z2=2.0000求解常微分方程一階常微分方程數(shù)值解法[x,y]=ode23('fun',tspan,y0,option)

(低階龍格-庫塔函數(shù))[x,y]=ode45('fun',tspan,y0,option)

(高階龍格-庫塔函數(shù))其中,(1)tspan=[t0,tf],t0、tf為自變量的初值和終值

(2)option用于設(shè)定誤差限(缺省時設(shè)定相對誤差10-3,

絕對誤差10-6),命令為:options=odeset(’reltol’,rt,’abstol’,at),rt,at:分別為設(shè)定的相對誤差和絕對誤差.

1、在解n個未知函數(shù)的方程組時,x0和x均為n維向量,m-文件中的待解方程組應(yīng)以x的分量形式寫成.

2、使用Matlab軟件求數(shù)值解時,高階微分方程必須等價地變換成一階微分方程組.注意:

設(shè)位于坐標(biāo)原點的甲艦向位于x軸上點A(1,0)處的乙艦發(fā)射導(dǎo)彈,導(dǎo)彈頭始終對準(zhǔn)乙艦。如果乙艦以最大的速度v0(是常數(shù))沿平行于y軸的直線行駛,導(dǎo)彈的速度是5v0,(1)畫出導(dǎo)彈運行的曲線方程.(2)乙艦行駛多遠(yuǎn)時,導(dǎo)彈將它擊中?導(dǎo)彈追擊問題由(1),(2)消去t整理得模型:1.建立m-文件eq1.m

functiondy=eq1(x,y)dy=zeros(2,1);dy(1)=y(2);dy(2)=1/5*sqrt(1+y(1)^2)/(1-x);

2.取x0=0,xf=0.9999,建立主程序ff6.m如下:

x0=0,xf=0.9999[x,y]=ode23('eq1',[x0xf],[00]);plot(x,y(:,1),’b.')holdony=0:0.01:1;plot(1,y,’b*')holdoff

結(jié)論:導(dǎo)彈大致在(1,0.2)處擊中乙艦令y1=y,y2=y1’,將方程(3)化為一階微分方程組。

最優(yōu)化方法五最優(yōu)化方法

許多生產(chǎn)計劃與管理問題都可以歸納為最優(yōu)化問題,最優(yōu)化模型是數(shù)學(xué)建模中應(yīng)用最廣泛的模型之一,其內(nèi)容包括線性規(guī)劃、整數(shù)線性規(guī)劃、非線性規(guī)劃、動態(tài)規(guī)劃、變分法、最優(yōu)控制等.

近幾年來的全國大學(xué)生數(shù)學(xué)建模競賽中,幾乎每次都有一道題要用到此方法.目標(biāo)函數(shù)

約束條件

可行解域線性規(guī)劃用MATLAB優(yōu)化工具箱解線性規(guī)劃minz=cX

1、模型:命令:x=linprog(c,A,b)

2、模型:minz=cX

命令:x=linprog(c,A,b,Aeq,beq)注意:若沒有不等式:存在,則令A(yù)=[],b=[].3、模型:minz=cX

VLB≤X≤VUB命令:[1]x=linprog(c,A,b,Aeq,beq,VLB,VUB)

[2]

x=linprog(c,A,b,Aeq,beq,VLB,VUB,X0)

注意:若沒有等式約束:,則令A(yù)eq=[],beq=[];其中X0表示初始點4、命令:[x,fval]=linprog(…)返回最優(yōu)解x及x處的目標(biāo)函數(shù)值fval.解:編寫M文件xxgh2.m如下:

c=[634];A=[010];b=[50];Aeq=[111];beq=[120];vlb=[30,0,20];vub=[];[x,fval]=linprog(c,A,b,Aeq,beq,vlb,vub)

某車間有甲、乙兩臺機床,可用于加工三種工件。假定這兩臺車床的可用臺時數(shù)分別為800和900,三種工件的數(shù)量分別為400、600和500,且已知用三種不同車床加工單位數(shù)量不同工件所需的臺時數(shù)和加工費用如下表。問怎樣分配車床的加工任務(wù),才能既滿足加工工件的要求,又使加工費用最低?

例(任務(wù)分配問題)解

設(shè)在甲車床上加工工件1、2、3的數(shù)量分別為x1、x2、x3,在乙車床上加工工件1、2、3的數(shù)量分別為x4、x5、x6。可建立以下線性規(guī)劃模型:S.t.改寫為:編寫M文件如下:f=[1391011128];A=[0.41.11000;0000.51.21.3];b=[800;900];Aeq=[100100;010010;001001];beq=[400600500];vlb=zeros(6,1);vub=[];[x,fval]=linprog(f,A,b,Aeq,beq,vlb,vub)結(jié)果:

x=0.0000600.00000.0000400.00000.0000500.0000fval=1.3800e+004

即在甲機床上加工600個工件2,在乙機床上加工400個工件1、500個工件3,可在滿足條件的情況下使總加工費最小為13800。

1.首先建立M文件fun.m,定義目標(biāo)函數(shù)F(X):functionf=fun(X);f=F(X);非線性規(guī)劃

其中X為n維變元向量,G(X)與Ceq(X)均為非線性函數(shù)組成的向量.

用Matlab求解上述問題,基本步驟分三步:

3.建立主程序.非線性規(guī)劃求解的函數(shù)是fmincon,命令的基本格式如下:

(1)x=fmincon(‘fun’,X0,A,b)

(2)x=fmincon(‘fun’,X0,A,b,Aeq,beq)

(3)x=fmincon(‘fun’,X0,A,b,Aeq,beq,VLB,VUB)

(4)x=fmincon(‘fun’,X0,A,b,Aeq,beq,VLB,VUB,’nonlcon’)(5)x=fmincon(‘fun’,X0,A,b,Aeq,beq,VLB,VUB,’nonlcon’,options)

(6)[x,fval]=fmincon(...)

輸出極值點M文件迭代的初值參數(shù)說明變量上下限注意:fmincon函數(shù)可能會給出局部最優(yōu)解,這與初值X0的選取有關(guān)。1、寫成標(biāo)準(zhǔn)形式:

s.t.

2x1+3x26s.tx1+4x25x1,x20例32、先建立M-文件fun3.m:

functionf=fun3(x);f=-x(1)-2*x(2)+(1/2)*x(1)^2+(1/2)*x(2)^23、再建立主程序youh2.m:

x0=[1;1];A=[23;14];b=[6;5];Aeq=[];beq=[];VLB=[0;0];VUB=[];[x,fval]=fmincon('fun3',x0,A,b,Aeq,beq,VLB,VUB)4、運算結(jié)果為:

x=0.76471.0588fval=-2.0294符號運算數(shù)值計算和符號計算的根本區(qū)別主要體現(xiàn)在:數(shù)值計算的表達式和矩陣變量中不允許包含未定義的自由變量,必須先對變量賦值,然后才能參與運算。符號運算無須事先對獨立變量賦值,運算結(jié)果以標(biāo)準(zhǔn)的符號形式表達。MATLAB的符號計算是放在符號計算工具箱中,它的數(shù)學(xué)函數(shù)其實是來自于Maple軟件。Maple是一個以符號運算為主的數(shù)學(xué)運算軟件。符號變量及表達式定義1.定義符號變量sym函數(shù)sym函數(shù)用來建立單個符號變量,一般調(diào)用格式為:符號量名=sym('符號字符串')該函數(shù)可以建立一個符號變量,符號字符串可以是常量、變量、函數(shù)或表達式。符號常數(shù)與數(shù)值常數(shù)在代數(shù)運算時是有差別的。(2)syms函數(shù)syms符號變量名1符號變量名2…符號變量名n用這種格式定義符號變量時不要在變量名上加字符串分界符(‘),變量間用空格而不要用逗號分隔。2.定義符號表達式符號表達式是代表數(shù)字、函數(shù)、算子和變量的MATLAB字符串,或字符串?dāng)?shù)組。不要求變量有預(yù)先確定的值,符號方程式是含有等號的符號表達式。符號算術(shù)是使用已知的規(guī)則和給定符號恒等式求解這些符號方程的實踐,它與代數(shù)和微積分所學(xué)到的求解方法完全一樣。符號矩陣是數(shù)組,其元素是符號表達式。MATLAB在內(nèi)部把符號表達式表示成字符串,以與數(shù)字變量或運算相區(qū)別。建立符號表達式有以下3種方法:(1)利用單引號來生成符號表達式。例:‘tan(y/x)’,‘x^3-2*x^2+3’,‘1/(cos(angle)+2)'引號之內(nèi)的內(nèi)容也可以是符號方程。(2)用sym函數(shù)建立符號表達式。(3)使用已經(jīng)定義的符號變量組成符號表達式。例如:f1='a*x^2+b*x+c' %二次三項式f2='a*x^2+b*x+c=0' %方程f3='Dy+y^2=1' %微分方程U=sym('3*x^2+5*y+2*x*y+6')%定義符號表達式symsxy; %建立符號變量x、yV=3*x^2+5*y+2*x*y+6 %定義符號表達式符號表達式或符號方程可以賦給符號變量,以后調(diào)用方便;也可以不賦給符號變量直接參與運算。在符號表達式中,需要定義所謂的獨立變量。如果未曾事先指定何者為獨立變量,MATLAB會自行決定。決定變量的原則如下:挑選一個除了i和j之外而在字母上最接近x的小寫字母;如果在式子中并無上述字母,則x會被視為預(yù)設(shè)的獨立變量。findsym可以幫助用戶查找一個符號表達式中的的符號變量。該函數(shù)的調(diào)用格式為:findsym(s,n):函數(shù)返回符號表達式s中的n個符號變量,若沒有指定n,則返回s中的全部符號變量。符號表達式運算1.基本數(shù)學(xué)運算符號表達式的加、減、乘、除運算可分別由函數(shù)symadd、symsub、symmul和symdiv來實現(xiàn),冪運算可以由sympow來實現(xiàn)。2.提取分子和分母運算如果符號表達式是一個有理分式或可以展開為有理分式,可利用numden函數(shù)來提取符號表達式中的分子或分母。其一般調(diào)用格式為:[n,d]=numden(s)該函數(shù)提取符號表達式s的分子和分母,分別將它們存放在n與d中。3.因式分解與展開MATLAB提供了符號表達式的因式分解與展開的函數(shù),函數(shù)的調(diào)用格式為:factor(s):對符號表達式s分解因式。expand(s):對符號表達式s進行展開。collect(s):對符號表達式s合并同類項。collect(s,v):對符號表達式s按變量v合并同類項。4.化簡MATLAB提供的對符號表達式化簡的函數(shù)有:simplify(s):應(yīng)用函數(shù)規(guī)則對s進行化簡。simple(s):調(diào)用MATLAB的其他函數(shù)對表達式進行綜合化簡,并顯示化簡過程。例如:symsxy;s=(x^2+y^2)^2+(x^2-y^2)^2;simple(s) %MATLAB自動調(diào)用多種函數(shù)對s進行化簡,并顯示每步結(jié)果.5.與數(shù)值表達式之間的轉(zhuǎn)換利用函數(shù)sym可以將數(shù)值表達式變換成它的符號表達式。函數(shù)numeric或eval可以將符號表達式變換成數(shù)值表達式。6.符號矩陣符號矩陣也是一種符號表達式,所以前面介紹的符號表達式運算都可以在矩陣意義下進行。但應(yīng)注意這些函數(shù)作用于符號矩陣時,是分別作用于矩陣的每一個元素。由于符號矩陣是一個矩陣,所以符號矩陣還能進行有關(guān)矩陣的運算。MATLAB還有一些專用于符號矩陣的函數(shù),這些函數(shù)作用于單個的數(shù)據(jù)無意義。例如:transpose(s):返回s矩陣的轉(zhuǎn)置矩陣。determ(s):返回s矩陣的行列式值。其實,曾介紹過的許多應(yīng)用于數(shù)值矩陣的函數(shù),如diag、triu、tril、inv、det、rank、eig等,也可直接應(yīng)用于符號矩陣。符號方程求解1.符號代數(shù)方程求解求解用符號表達式表示的代數(shù)方程可由函數(shù)solve實現(xiàn),其調(diào)用格式為:

solve(s)求解符號表達式s的代數(shù)方程,求解變量為默認(rèn)變量。

solve(s,v)求解符號表達式s的代數(shù)方程,求解變量為v。solve(s1,s2,…,sn,v1,v2,…,vn)求解符號表達式s1,s2,…,sn組成的代數(shù)方程組,求解變量分別v1,v2,…,vn。2.符號常微分方程求解在MATLAB中,用大寫字母D表示導(dǎo)數(shù)。例如,Dy表示y‘,D2y表示y’‘,Dy(0)=5表示y’(0)=5。D3y+D2y+Dy-x+5=0表示微分方程y'''+y''+y'-x+5=0。符號常微分方程求解可以通過函數(shù)dsolve來實現(xiàn),其調(diào)用格式為:dsolve(e,c,v)求解常微分方程e在初值條件c下的特解。參數(shù)v描述方程中的自變量,省略時按缺省原則處理,若沒有給出初值條件c,則求方程的通解。2.符號常微分方程求解dsolve在求常微分方程組時的調(diào)用格式為:dsolve(e1,e2,…,en,c1,…,cn,v1,…,vn)該函數(shù)求解常微分方程組e1,…,en在初值條件c1,…,cn下的特解,若不給出初值條件,則求方程組的通解,v1,…,vn給出求解變量。符號微積分1.符號極限求極限limit函數(shù)的調(diào)用格式為:(1)limit(f,x,a):求符號函數(shù)f(x)的極限值。即計算當(dāng)變量x趨近于常數(shù)a時,f(x)函數(shù)的極限值。(2)limit(f,a):求符號函數(shù)f(x)的極限值。由于沒有指定符號函數(shù)f(x)的自變量,則使用該格式時,符號函數(shù)f(x)的變量為函數(shù)findsym(f)確定的默認(rèn)自變量,即變量x趨近于a。(3)limit(f):求符號函數(shù)f(x)的極限值。符號函數(shù)f(x)的變量為函數(shù)findsym(f)確定的默認(rèn)變量;沒有指定變量的目標(biāo)值時,系統(tǒng)默認(rèn)變量趨近于0,即a=0的情況。(4)limit(f,x,a,'right'):求符號函數(shù)f的極限值。'right'表示變量x從右邊趨近于a。(5)limit(f,x,a,'left'):求符號函數(shù)f的極限值。'left'表示變量x從左邊

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論