MATLAB總結(jié)與上機指南
化工計算中常用的MATLAB命令總結(jié)
化學工程中的計算問題一般比較復雜,其操作的數(shù)據(jù)對象通常是數(shù)組,具體計算涉及到插值、求積分、參數(shù)擬合、解常微分和偏微分微分方程、解線性和非線性方程等。MATLAB是新一代的科學計算語言,在解決上述問題上,相對于FORTRAN、C和BASIC等傳統(tǒng)的計算語言具有明顯的優(yōu)越性。本文針對應用MATLAB解決化工中的典型問題進行計算常用方法和命令做以小結(jié)。1.最小二乘法擬合1.1最小二乘擬合直線
函數(shù)lsline
格式lsline%最小二乘擬合直線h=lsline%h為直線的句柄1.2約束線性最小二乘
有約束線性最小二乘的標準形式為
minx1Cxd222
sub.toAxb
Aeqxbeq
lbxub
其中:C、A、Aeq為矩陣;d、b、beq、lb、ub、x是向量。在MATLAB5.x中,約束線性最小二乘用函數(shù)conls求解。
函數(shù)lsqlin
格式x=lsqlin(C,d,A,b)%求在約束條件Axb下,方程Cx=d的最小二
乘解x。
x=lsqlin(C,d,A,b,Aeq,beq)%Aeq、beq滿足等式約束Aeqxbeq,若沒有不等式約束,則設A=[],b=[]。
x=lsqlin(C,d,A,b,Aeq,beq,lb,ub)%lb、ub滿足lbxub,若沒有等
式約束,則Aeq=[],beq=[]。
x=lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0)%x0為初始解向量,若x沒有界,則lb=[],ub=[]。
x=lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0,options)%options為指定優(yōu)化參數(shù)[x,resnorm]=lsqlin(…)%resnorm=norm(C*x-d)^2,即2-范數(shù)。[x,resnorm,residual]=lsqlin(…)%residual=C*x-d,即殘差。
[x,resnorm,residual,exitflag]=lsqlin(…)%exitflag為終止迭代的條件[x,resnorm,residual,exitflag,output]=lsqlin(…)%output表示輸出優(yōu)化
第1頁共6頁信息
[x,resnorm,residual,exitflag,output,lambda]=lsqlin(…)%lambda為解x
的Lagrange乘子
1.3非線性最小二乘
非線性最小二乘(非線性數(shù)據(jù)擬合)的標準形式為
minxf(x)f1(x)2f2(x)2fm(x)2L
其中:L為常數(shù)
在MATLAB5.x中,用函數(shù)leastsq解決這類問題,在6.0版中使用函數(shù)lsqnonlin。
f1(x)f2(x)設F(x)fm(x)則目標函數(shù)可表達為minx12F(x)221fi(x)22i其中:x為向量,F(xiàn)(x)為函數(shù)向量。函數(shù)lsqnonlin
格式x=lsqnonlin(fun,x0)%x0為初始解向量;fun為fi(x),i=1,2,…,m,fun返回向量值F,而不是平方和值,平方和隱含在算法中,fun的定義與前面相同。
lbxubx=lsqnonlin(fun,x0,lb,ub)%lb、ub定義x的下界和上界:。
x=lsqnonlin(fun,x0,lb,ub,options)%options為指定優(yōu)化參數(shù),若x沒有界,則lb=[],ub=[]。
[x,resnorm]=lsqnonlin(…)%resnorm=sum(fun(x).^2),即解x處函數(shù)值。[x,resnorm,residual]=lsqnonlin(…)%residual=fun(x),即解x處fun的值。[x,resnorm,residual,exitflag]=lsqnonlin(…)%exitflag為終止迭代條件。[x,resnorm,residual,exitflag,output]=lsqnonlin(…)%output輸出優(yōu)化信息。[x,resnorm,residual,exitflag,output,lambda]=lsqnonlin(…)%lambda為
Lagrage乘子。
[x,resnorm,residual,exitflag,output,lambda,jacobian]=lsqnonlin(…)%fun
在解x處的Jacobian矩陣。
第2頁共6頁2多項式2.1多項式求值
函數(shù)名稱:polyval
調(diào)用格式:y=polyval(p,x),[y,delta]=polyval(p,x,S)
返回多項式p在x點處的取值。X可以是向量也可以是矩陣。[y,delta]=polyval(p,x,S)同時還生成誤差估計。2.2多項式求根
函數(shù)名稱:roots
調(diào)用格式:r=roots(c)
返回一個元素為多項式c的根的列向量。行向量中包含按降冪排列的多項式的系數(shù),如果c中包含n+1個元素,則多項式的表達式為:c1sn+…+cns+cn+1。3插值3.1一維插值
函數(shù)名稱:interp1
調(diào)用格式:yi=interp1(x,Y,xi),yi=interp1(x,Y,xi,method)
MATLAB中有兩類一維數(shù)據(jù)插值方法:多項式插值法和基于FFT的插值法。函數(shù)interp1采用多項式插值法,它用多項式擬合所給出的數(shù)據(jù),然后在插值點上根據(jù)多項式算出相應的值。調(diào)用格式中,xi為需要插值的位置所組成的向量,yi為根據(jù)插值算法求得的值所組成的向量。x,Y為已知的數(shù)據(jù)點向量。參數(shù)method用于確定具體的插值方法,包括:
‘linear’表示采用線性插值方法;‘cubic’表示采用三次插值的方法;‘nearest’表示采用最近點插值法;‘spline’表示用三次樣條插值方法。3.2二維插值
函數(shù)名稱:interp2
調(diào)用格式ZI=interp2(X,Y,Z,XI,YI)
返回矩陣ZI,其元素包含對應于參量XI與YI(可以是向量、或
同型矩陣)的元素,即Zi(i,j)←[Xi(i,j),yi(i,j)]。。
ZI=interp2(Z,XI,YI)
缺省地,X=1:n、Y=1:m,其中[m,n]=size(Z)。再按第一種情形進
行計算。
ZI=interp2(Z,n)
作n次遞歸計算,在Z的每兩個元素之間插入它們的二維插值,
這樣,Z的階數(shù)將不斷增加。interp2(Z)等價于interp2(z,1)。
ZI=interp2(X,Y,Z,XI,YI,method)
用指定的算法method計算二維插值:
’linear’:雙線性插值算法(缺省算法);
第3頁共6頁’nearest’:最臨近插值;’spline’:三次樣條插值;’cubic’:雙三次插值。
4非線性數(shù)據(jù)(曲線)擬合
非線性曲線擬合是已知輸入向量xdata和輸出向量ydata,并且知道輸入與輸出的函數(shù)關(guān)系為ydata=F(x,xdata),但不知道系數(shù)向量x。今進行曲線擬合,求x使得下式成立:
minx1F(x,xdata)ydata2221(F(x,xdatai)ydatai)22i在MATLAB5.x中,使用函數(shù)curvefit解決這類問題。函數(shù)lsqcurvefit
格式x=lsqcurvefit(fun,x0,xdata,ydata)
x=lsqcurvefit(fun,x0,xdata,ydata,lb,ub)
x=lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options)[x,resnorm]=lsqcurvefit(…)
[x,resnorm,residual]=lsqcurvefit(…)
[x,resnorm,residual,exitflag]=lsqcurvefit(…)
[x,resnorm,residual,exitflag,output]=lsqcurvefit(…)[x,resnorm,residual,exitflag,output,lambda]=lsqcurvefit(…)
[x,resnorm,residual,exitflag,output,lambda,jacobian]=lsqcurvefit(…)
參數(shù)說明:
x0為初始解向量;xdata,ydata為滿足關(guān)系ydata=F(x,xdata)的數(shù)據(jù);lb、ub為解向量的下界和上界lbxub,若沒有指定界,則lb=[],
ub=[];
options為指定的優(yōu)化參數(shù);
fun為擬合函數(shù),其定義方式為:x=lsqcurvefit(@myfun,x0,xdata,ydata),
其中myfun已定義為functionF=myfun(x,xdata)F=…%計算x處擬合函數(shù)值fun的用法與前面相同;resnorm=sum((fun(x,xdata)-ydata).^2),即在x處殘差的平方和;residual=fun(x,xdata)-ydata,即在x處的殘差;exitflag為終止迭代的條件;output為輸出的優(yōu)化信息;lambda為解x處的Lagrange乘子;
jacobian為解x處擬合函數(shù)fun的jacobian矩陣。
第4頁共6頁5數(shù)值積分
5.1一元函數(shù)的數(shù)值積分
函數(shù)名稱:quad、quadl、quad8
調(diào)用格式q=quad(fun,a,b)%近似地從a到b計算函數(shù)fun的數(shù)值積分,誤
差為10。給fun輸入向量x,應返回向量y,即fun是一單值函數(shù)。q=quad(fun,a,b,tol)%用指定的絕對誤差tol代替缺省誤差。tol越大,函數(shù)計算的次數(shù)越少,速度越快,但結(jié)果精度變小。
q=quad(fun,a,b,tol,trace,p1,p2,…)%將可選參數(shù)p1,p2,…等傳遞給函數(shù)fun(x,p1,p2,…),再作數(shù)值積分。若tol=[]或trace=[],則用缺省值進行計算。
[q,n]=quad(fun,a,b,…)%同時返回函數(shù)計算的次數(shù)n
…=quadl(fun,a,b,…)%用高精度進行計算,效率可能比quad更好!=quad8(fun,a,b,…)%該命令是將廢棄的命令,用quadl代替。
5.2一元函數(shù)的數(shù)值積分
函數(shù)名稱:dblquad
功能矩形區(qū)域上的二重積分的數(shù)值計算
調(diào)用格式q=dblquad(fun,xmin,xmax,ymin,ymax)調(diào)用函數(shù)quad在區(qū)域
[xmin,xmax,ymin,ymax]上計算二元函數(shù)z=f(x,y)的二重積分。輸入向量x,標量y,則f(x,y)必須返回一用于積分的向量。
q=dblquad(fun,xmin,xmax,ymin,ymax,tol)用指定的精度tol代替缺省精度10-6,再進行計算。
q=dblquad(fun,xmin,xmax,ymin,ymax,tol,method)用指定的算法
method代替缺省算法quad。method的取值有@quadl或用戶指定的、與命令quad與quadl有相同調(diào)用次序的函數(shù)句柄。
q=dblquad(fun,xmin,xmax,ymin,ymax,tol,method,p1,p2,…)將可選參數(shù)
p1,p2,..等傳遞給函數(shù)fun(x,y,p1,p2,…)。若tol=[],method=[],則使用缺省精度和算法quad。
6非線性方程組的解
非線性方程組的標準形式為:F(x)=0其中:x為向量,F(xiàn)(x)為函數(shù)向量。函數(shù)fsolve
格式x=fsolve(fun,x0)
用fun定義向量函數(shù),其定義方式為:先定義方程函數(shù)
functionF=myfun(x)。
F=[表達式1;表達式2;…表達式m]
保存為myfun.m,并用下面方式調(diào)用:x=
第5頁共6頁
-fsolve(@myfun,x0),x0為初始估計值。
x=fsolve(fun,x0,options)[x,fval]=fsolve(…)
fval=F(x),即函數(shù)值向量[x,fval,exitflag]=fsolve(…)
[x,fval,exitflag,output]=fsolve(…)
[x,fval,exitflag,output,jacobian]=fsolve(…)
jacobian為解x處的Jacobian陣。
其余參數(shù)與前面參數(shù)相似。7常微分方程數(shù)值解
函數(shù)名稱:ode45、ode23、ode113、ode15s、ode23s、ode23t、ode23tb功能常微分方程(ODE)組初值問題的數(shù)值解參數(shù)說明:
solver為命令ode45、ode23,ode113,ode15s,ode23s,ode23t,ode23tb之一。
Odefun為顯式常微分方程y’=f(t,y),或為包含一混合矩陣的方程
M(t,y)*y’=f(t,y)。命令ode23只能求解常數(shù)混合矩陣的問題;命令ode23t與ode15s可以求解奇異矩陣的問題。
Tspan積分區(qū)間(即求解區(qū)間)的向量tspan=[t0,tf]。要獲得問題在其他指定時
間點t0,t1,t2,…上的解,則令tspan=[t0,t1,t2,…,tf](要求是單調(diào)的)。
Y0包含初始條件的向量。
Options用命令odeset設置的可選積分參數(shù)。P1,p2,…傳遞給函數(shù)odefun的可選參數(shù)。調(diào)用格式[T,Y]=solver(odefun,tspan,y0)
在區(qū)間tspan=[t0,tf]上,從t0到tf,用初始條件y0求解顯式微分方程y’=f(t,y)。對于標量t與列向量y,函數(shù)f=odefun(t,y)必須返回一f(t,y)的列向量f。解矩陣Y中的每一行對應于返回的時間列向量T中的一個時間點。要獲得問題在其他指定時間點t0,t1,t2,…上的解,則令tspan=[t0,t1,t2,…,tf](要求是單調(diào)的)。
[T,Y]=solver(odefun,tspan,y0,options)
%用參數(shù)options(用命令odeset生成)設置的屬性(代替了缺省的積分參數(shù)),再進行操作。常用的屬性包括相對誤差值RelTol(缺省值為1e-3)與絕對誤差向量AbsTol(缺省值為每一元素為1e-6)。
[T,Y]=solver(odefun,tspan,y0,options,p1,p2…)
將參數(shù)p1,p2,p3,..等傳遞給函數(shù)odefun,再進行計算。若沒有參數(shù)設置,則令options=[]。
第6頁共6頁
擴展閱讀:MATLAB應用上機指導書
《MATLAB應用》
上機指導書
黑龍江工程學院測繪工程系
201*年7月哈爾濱
目錄
MATLAB應用上機實驗說明----------------------------------------------------------------------2實驗一MATLAB操作基礎、矩陣及其運算-----------------------------------------------4實驗二MATLAB實驗三MATLAB實驗四
程序設計-------------------------------------------------------------------15文件操作及繪圖、數(shù)據(jù)分析-------------------------------------------18圖形句柄及圖形用戶界面設計--------------------------------------------------22
MATLAB應用上機實驗說明
MATLAB是一種應用于科學計算領(lǐng)域的高級語言,MATLAB應用是一門實踐性非常強的課程。要學好MATLAB應用,上機實踐是十分重要的環(huán)節(jié),只有通過大量的上機實驗,才能真正掌握MATLAB程序設計。
一、上機實驗的目的
上機實驗主要是為了驗證自己所編寫的程序的正確性,幫助理解MATLAB的語法規(guī)則,訓練對問題的分析及解決、設計的能力?偟膩砜,上機實驗的目的有以下幾個方面:
1.熟悉MATLAB的程序集成環(huán)境。2.掌握程序調(diào)試技術(shù)。
3.加深課堂講授和書本內(nèi)容的理解。
4.通過上機編寫和調(diào)試程序,可使學生真正了解程序在計算機中的執(zhí)行過程以及解決實際問題的過程,提高學習MATLAB應用的興趣。
二、上機實驗的基本要求
1.上機前的準備工作
要使實驗達到應有的效果,在上機實驗之前,必須知道本次實驗的任務,根據(jù)實驗任務,做好充分準備工作,只有這樣才能做到目的明確,使實驗達到應有的效果。上機前的準備工作包括以下幾個方面:
1)復習和掌握與本次實驗有關(guān)的教學內(nèi)容。
2)根據(jù)實驗的內(nèi)容,對問題進行認真的分析,搞清楚要解決的問題是什么?給定的條件是什么?要求的結(jié)果是什么?
3)根據(jù)應用程序的主要功能,考慮通過什么方法來實現(xiàn),關(guān)鍵問題是使用什么算法,在紙上編寫好相關(guān)功能的事件代碼。
4)預習實驗步驟,對實驗步驟中提出的一些問題進行思考,并給出初步的解決方案。2.上機實驗的過程
1)啟動MATLAB集成環(huán)境。
2)根據(jù)程序功能和事先的準備,在調(diào)試運行之前,首先應將工程保存,以防調(diào)試過程出現(xiàn)死機,而需從頭開始,浪費時間。
3)調(diào)試程序,如果出現(xiàn)編譯錯誤,根據(jù)程序提示,分析錯誤原因進行修改。如果無語法錯誤,使用多組數(shù)據(jù)進行測試,分析其輸出結(jié)果是否與預期的結(jié)果相符,如果不符,應檢查程序有無寫錯,算法是否合理,將發(fā)現(xiàn)的錯誤并逐個修正,并作記錄。
4)在程序調(diào)試和測試完畢后,再次保存程序。如果條件允許將程序和運行結(jié)果打印在紙上,以備檢查。
5)按照實驗步驟中的要求,對程序作必要的改動,或者增加一些功能等。從而進一步理解MATLAB的操作。
三、實驗報告的整理與編寫
上機實驗結(jié)束后,編寫實驗報告是軟件工程的要求,也是培養(yǎng)科學作風的重要途徑,實驗報告的主要內(nèi)容包括:
1.實驗目的
實驗作為教學的一個重要環(huán)節(jié),其目的在于更深入地理解和掌握課程教學中的有關(guān)基本概念,應用基本技術(shù)解決實際問題,從而進一步提高分析問題和解決問題的能力。因此,當我們著手做一個實驗的時候,必須明確實驗的目的,以保證達到課程所指定的基本要求。在寫實驗報告時,要進一步確認是否達到了預期的目的。
2.實驗內(nèi)容
實驗的目的是通過解決一些具體問題來達到的。在書中,每一部分都安排了實驗題目,根據(jù)教學安排、進度、實驗條件、可提供的機時、學生的基礎等因素,可以選擇其中的幾個或全部。因此,在實驗報告中,實驗內(nèi)容是指本次實驗中實際完成的內(nèi)容。在每一個實驗題目中,一般都提出一些具體要求,其中有些具體要求是為了達到實驗目的而提出的,不僅有具體的實驗題目,還應包括具體要求。
3.程序設計說明
可包括算法設計思路,必要的流程圖,界面設計說明、使用變量的說明等。4.經(jīng)調(diào)試正確的源程序
MATLAB的源程序包括界面設計和代碼。程序設計的產(chǎn)品是程序,它應與算法或流程圖相一致,要與用戶界面設計一致。程序要有具有易讀性,符合結(jié)構(gòu)化原則。
5.程序的運行情況(包括對不同測試數(shù)據(jù)的運行結(jié)果)
程序運行結(jié)果一般是輸出語句所輸出的結(jié)果。對于不同的輸入,其輸出的結(jié)果是不同的。因此,在輸出結(jié)果之前一般還應注明輸入的數(shù)據(jù),以便對輸出結(jié)果進行分析和比較。在程序的運行中,還必須用各種不同情況的數(shù)據(jù)進行調(diào)試,以檢查程序能否正常運行。因為,有時程序?qū)δ承┣闆r是可以正常運行的,而對某些特殊情況的數(shù)據(jù)可能會出現(xiàn)運行出錯或死機,通過各種數(shù)據(jù)的調(diào)試,盡量做到程序不會出問題。
6.分析和體會實驗中碰到的問題及解決方法
這是實驗報告中最重要的一項,也是最容易忽視的一項。實驗過程中大量的工作是程序調(diào)試,在調(diào)試過程中會遇到各種各樣的問題,每解決一個問題就能積累一點經(jīng)驗,提高自己的編程能力。因此,對實驗的總結(jié),最主要的是程序調(diào)試經(jīng)驗的總結(jié)。調(diào)試分析也包括對結(jié)果的分析。體會主要是指通過本次實驗是否達到了實驗目的,有哪些基本概念得到了澄清,碰到了哪些以前沒有見到的問題,最后采用什么方法得到解決等。
友情提示:本文中關(guān)于《MATLAB總結(jié)與上機指南》給出的范例僅供您參考拓展思維使用,MATLAB總結(jié)與上機指南:該篇文章建議您自主創(chuàng)作。
來源:網(wǎng)絡整理 免責聲明:本文僅限學習分享,如產(chǎn)生版權(quán)問題,請聯(lián)系我們及時刪除。