第一篇:MATLAB總結(jié)與上機(jī)指南
化工計(jì)算中常用的MATLAB命令總結(jié)
化學(xué)工程中的計(jì)算問(wèn)題一般比較復(fù)雜, 其操作的數(shù)據(jù)對(duì)象通常是數(shù)組, 具體計(jì)算涉及到插值、求積分、參數(shù)擬合、解常微分和偏微分微分方程、解線性和非線性方程等。MATLAB是新一代的科學(xué)計(jì)算語(yǔ)言, 在解決上述問(wèn)題上, 相對(duì)于FORTRAN、C 和BASIC等傳統(tǒng)的計(jì)算語(yǔ)言具有明顯的優(yōu)越性。本文針對(duì)應(yīng)用MATLAB 解決化工中的典型問(wèn)題進(jìn)行計(jì)算常用方法和命令做以小結(jié)。1.最小二乘法擬合 1.1 最小二乘擬合直線
函數(shù)
lsline 格式
lsline
%最小二乘擬合直線
h = lsline
%h為直線的句柄 1.2約束線性最小二乘
有約束線性最小二乘的標(biāo)準(zhǔn)形式為
minx1Cx?d222
sub.to
A?x?b
Aeq?x?beq
lb?x?ub
其中:C、A、Aeq為矩陣;d、b、beq、lb、ub、x是向量。在MATLAB5.x中,約束線性最小二乘用函數(shù)conls求解。
函數(shù)
lsqlin
格式
x = lsqlin(C,d,A,b)
%求在約束條件A?x?b下,方程Cx = d的最小二
乘解x。
x = lsqlin(C,d,A,b,Aeq,beq)
%Aeq、beq滿足等式約束Aeq?x?beq,若沒(méi)有不等式約束,則設(shè)A=[ ],b=[ ]。
x = lsqlin(C,d,A,b,Aeq,beq,lb,ub)
%lb、ub滿足lb?x?ub,若沒(méi)有等
式約束,則Aeq=[ ],beq=[ ]。
x = lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0)
% x0為初始解向量,若x沒(méi)有界,則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)化
信息
[x,resnorm,residual,exitflag,output,lambda] = lsqlin(…)
% lambda為解x的Lagrange乘子
1.3 非線性最小二乘
非線性最小二乘(非線性數(shù)據(jù)擬合)的標(biāo)準(zhǔn)形式為
minxf(x)?f1(x)2?f2(x)2???fm(x)2?L
其中:L為常數(shù)
在MATLAB5.x中,用函數(shù)leastsq解決這類問(wèn)題,在6.0版中使用函數(shù)lsqnonlin。
?f1(x)???f2(x)? 設(shè)F(x)????????fm(x)?則目標(biāo)函數(shù)可表達(dá)為minx12F(x)22?1?fi(x)2 2i其中:x為向量,F(xiàn)(x)為函數(shù)向量。函數(shù)
lsqnonlin 格式
x = lsqnonlin(fun,x0)
%x0為初始解向量;fun為fi(x),i=1,2,…,m,fun返回向量值F,而不是平方和值,平方和隱含在算法中,fun的定義與前面相同。
lb?x?ubx = lsqnonlin(fun,x0,lb,ub)
%lb、ub定義x的下界和上界:。
x = lsqnonlin(fun,x0,lb,ub,options)
%options為指定優(yōu)化參數(shù),若x沒(méi)有界,則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矩陣。
多項(xiàng)式 2.1 多項(xiàng)式求值
函數(shù)名稱:polyval 調(diào)用格式:y=polyval(p,x),[y,delta]=polyval(p,x,S)返回多項(xiàng)式p在x點(diǎn)處的取值。X可以是向量也可以是矩陣。[y,delta] = polyval(p,x,S)同時(shí)還生成誤差估計(jì)。2.2 多項(xiàng)式求根
函數(shù)名稱:roots 調(diào)用格式:r=roots(c)
返回一個(gè)元素為多項(xiàng)式c的根的列向量。行向量中包含按降冪排列的多項(xiàng)式的系數(shù),如果c中包含n+1個(gè)元素,則多項(xiàng)式的表達(dá)式為: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ù)插值方法:多項(xiàng)式插值法和基于FFT的插值法。函數(shù)interp1采用多項(xiàng)式插值法,它用多項(xiàng)式擬合所給出的數(shù)據(jù),然后在插值點(diǎn)上根據(jù)多項(xiàng)式算出相應(yīng)的值。調(diào)用格式中,xi為需要插值的位置所組成的向量,yi 為根據(jù)插值算法求得的值所組成的向量。x,Y為已知的數(shù)據(jù)點(diǎn)向量。參數(shù)method用于確定具體的插值方法,包括:
‘linear’表示采用線性插值方法;‘cubic’表示采用三次插值的方法; ‘nearest’表示采用最近點(diǎn)插值法;‘spline’表示用三次樣條插值方法。3.2 二維插值
函數(shù)名稱:interp2 調(diào)用格式
ZI = interp2(X,Y,Z,XI,YI)
返回矩陣ZI,其元素包含對(duì)應(yīng)于參量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)。再按 ’nearest’:最臨近插值; ’spline’:三次樣條插值; ’cubic’:雙三次插值。非線性數(shù)據(jù)(曲線)擬合
非線性曲線擬合是已知輸入向量xdata和輸出向量ydata,并且知道輸入與輸出的函數(shù)關(guān)系為ydata=F(x, xdata),但不知道系數(shù)向量x。今進(jìn)行曲線擬合,求x使得下式成立:
minx1F(x,xdata)?ydata222?1?(F(x,xdatai)?ydatai)2 2i在MATLAB5.x中,使用函數(shù)curvefit解決這類問(wèn)題。函數(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ù)說(shuō)明:
x0為初始解向量;xdata,ydata為滿足關(guān)系ydata=F(x, xdata)的數(shù)據(jù); lb、ub為解向量的下界和上界lb?x?ub,若沒(méi)有指定界,則lb=[ ],ub=[ ];
options為指定的優(yōu)化參數(shù);
fun為擬合函數(shù),其定義方式為:x = lsqcurvefit(@myfun,x0,xdata,ydata),其中myfun已定義為
function F = myfun(x,xdata)F = …
% 計(jì)算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矩陣。
數(shù)值積分
5.1 一元函數(shù)的數(shù)值積分
函數(shù)名稱:
quad、quadl、quad8 調(diào)用格式 q = quad(fun,a,b)
%近似地從a到b計(jì)算函數(shù)fun的數(shù)值積分,誤差為10。給fun輸入向量x,應(yīng)返回向量y,即fun是一單值函數(shù)。q = quad(fun,a,b,tol)
%用指定的絕對(duì)誤差tol代替缺省誤差。tol越大,函數(shù)計(jì)算的次數(shù)越少,速度越快,但結(jié)果精度變小。
q = quad(fun,a,b,tol,trace,p1,p2,…)
%將可選參數(shù)p1,p2,…等傳遞給函數(shù)fun(x,p1,p2,…),再作數(shù)值積分。若tol=[]或trace=[],則用缺省值進(jìn)行計(jì)算。
[q,n] = quad(fun,a,b,…)%同時(shí)返回函數(shù)計(jì)算的次數(shù)n … = quadl(fun,a,b,…)
%用高精度進(jìn)行計(jì)算,效率可能比quad更好。… = quad8(fun,a,b,…)
%該命令是將廢棄的命令,用quadl代替。
5.2 一元函數(shù)的數(shù)值積分
函數(shù)名稱:
dblquad 功能
矩形區(qū)域上的二重積分的數(shù)值計(jì)算
調(diào)用格式
q = dblquad(fun,xmin,xmax,ymin,ymax)
調(diào)用函數(shù)quad在區(qū)域[xmin,xmax, ymin,ymax]上計(jì)算二元函數(shù)z=f(x,y)的二重積分。輸入向量x,標(biāo)量y,則f(x,y)必須返回一用于積分的向量。
q = dblquad(fun,xmin,xmax,ymin,ymax,tol)
用指定的精度tol代替缺省精度10-6,再進(jìn)行計(jì)算。
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。非線性方程組的解
非線性方程組的標(biāo)準(zhǔn)形式為:F(x)= 0 其中:x為向量,F(xiàn)(x)為函數(shù)向量。函數(shù)
fsolve 格式
x = fsolve(fun,x0)
用fun定義向量函數(shù),其定義方式為:先定義方程函數(shù)function F = myfun(x)。
F =[表達(dá)式1;表達(dá)式2;…表達(dá)式m] 保存為myfun.m,并用下面方式調(diào)用:x =
-6fsolve(@myfun,x0),x0為初始估計(jì)值。
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)組初值問(wèn)題的數(shù)值解 參數(shù)說(shuō)明:
solver為命令ode45、ode23,ode113,ode15s,ode23s,ode23t,ode23tb之一。
Odefun 為顯式常微分方程y’=f(t,y),或?yàn)榘换旌暇仃嚨姆匠蘉(t,y)*y’=f(t,y)。命令ode23只能求解常數(shù)混合矩陣的問(wèn)題;命令ode23t與ode15s可以求解奇異矩陣的問(wèn)題。
Tspan 積分區(qū)間(即求解區(qū)間)的向量tspan=[t0,tf]。要獲得問(wèn)題在其他指定時(shí)間點(diǎn)t0,t1,t2,…上的解,則令tspan=[t0,t1,t2,…,tf](要求是單調(diào)的)。
Y0 包含初始條件的向量。
Options 用命令odeset設(shè)置的可選積分參數(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)。對(duì)于標(biāo)量t與列向量y,函數(shù)f=odefun(t,y)必須返回一f(t,y)的列向量f。解矩陣Y中的每一行對(duì)應(yīng)于返回的時(shí)間列向量T中的一個(gè)時(shí)間點(diǎn)。要獲得問(wèn)題在其他指定時(shí)間點(diǎn)t0,t1,t2,…上的解,則令tspan=[t0,t1,t2,…,tf](要求是單調(diào)的)。
[T,Y] = solver(odefun,tspan,y0,options)%用參數(shù)options(用命令odeset生成)設(shè)置的屬性(代替了缺省的積分參數(shù)),再進(jìn)行操作。常用的屬性包括相對(duì)誤差值RelTol(缺省值為1e-3)與絕對(duì)誤差向量AbsTol(缺省值為每一元素為1e-6)。
[T,Y] =solver(odefun,tspan,y0,options,p1,p2…)
將參數(shù)p1,p2,p3,..等傳遞給函數(shù)odefun,再進(jìn)行計(jì)算。若沒(méi)有參數(shù)設(shè)置,則令options=[]。
第二篇:Matlab上機(jī)報(bào)告
Matlab上機(jī)實(shí)習(xí)報(bào)告
這兩周我們進(jìn)行了Matlab的上機(jī)。為了熟練掌握Matlab的各種操縱,學(xué)會(huì)使用Matlab解決復(fù)雜矩陣的運(yùn)算并學(xué)會(huì)用Matlab解決平差中的實(shí)際問(wèn)題,我們以書上的例7-8為例,通過(guò)Matlab編程運(yùn)行來(lái)解決這道題,以熟悉Matlab的各項(xiàng)操縱和編程。
首先,我對(duì)該題進(jìn)行了分析,然后將解題思路和解題過(guò)程中需要的公式寫在了草稿紙上,然后,我比照Matlab的正確語(yǔ)言將各項(xiàng)公式輸進(jìn)了Matlab中,進(jìn)行調(diào)試運(yùn)行的時(shí)候并沒(méi)有一次就成功,因?yàn)榉痔?hào)等符號(hào)的不正確使用,矩陣輸入的一些錯(cuò)誤方式以及數(shù)據(jù)輸入上的一些錯(cuò)誤,一直沒(méi)能能算出正確的結(jié)果,在進(jìn)行了多次的調(diào)試改正后才最終得出了正確的結(jié)果。
通過(guò)這些天的上機(jī)實(shí)習(xí),我學(xué)會(huì)了將矩陣正確輸入Matlab 的方法、學(xué)會(huì)了利用Matlab進(jìn)行復(fù)雜矩陣的轉(zhuǎn)置、求逆等運(yùn)算,也學(xué)會(huì)了一些Matlab專有語(yǔ)言如diag等的應(yīng)用。可以說(shuō)已經(jīng)掌握了Matlab大概的功能,在以后的學(xué)習(xí)中,如果有需要用到Matlab的地方,我相信我也一定能好好使用Matlab來(lái)解決學(xué)習(xí)解題中遇到的問(wèn)題。短短兩周的實(shí)習(xí)很快結(jié)束。從這次實(shí)習(xí)中,我認(rèn)識(shí)到了親身實(shí)踐是我們大學(xué)生活中很有用也很充實(shí)的一步,通過(guò)實(shí)習(xí)能學(xué)到課堂上學(xué)不到的一些東西。在課堂上我們僅僅知道該怎么去做,但沒(méi)有親自實(shí)踐,只能靠想象,所以很多東西當(dāng)時(shí)都很難理解,很多東西不經(jīng)過(guò)實(shí)踐就不會(huì)印象深刻。在上級(jí)之前,讀過(guò)Matlab的相關(guān)書籍,覺(jué)得自己好像會(huì)了,但是在實(shí)際上機(jī)操縱過(guò)程中就會(huì)發(fā)現(xiàn)還是出現(xiàn)了很多這樣或那樣的問(wèn)題。但是,經(jīng)過(guò)上機(jī)的實(shí)踐后,似乎就更容易理解其原理了,而且對(duì)其操縱與使用印象更深刻了。
總體來(lái)說(shuō),這幾次實(shí)習(xí)我受益匪淺。在探索該如何運(yùn)用Matlab課程算法實(shí)踐過(guò)程中,培養(yǎng)了我的邏輯思維能力,增加了實(shí)際編程能力。讓我在體會(huì)到分析實(shí)例與設(shè)計(jì)程序的艱辛的同時(shí),也體會(huì)到了最后成功的喜悅。總而言之,這次Matlab的上機(jī)實(shí)習(xí)收獲頗多,也讓我深刻感受到,時(shí)間也是獲得和掌握知識(shí)的一種好手段。
第三篇:MATLAB上機(jī)實(shí)踐報(bào)告
clear all;
load('Hsoa2ib2.mat')
Hsoa2ib2=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hsoa2ib1.mat')
Hsoa2ib1=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hsoa1ib2.mat')
Hsoa1ib2=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hsoa1ib1.mat')
Hsoa1ib1=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hscb2cb2.mat')
Hscb2cb2=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hscb2cb1.mat')
Hscb2cb1=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hscb1cb2.mat')
Hscb1cb2=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hscb1cb1.mat')
Hscb1cb1=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hsca2cb2.mat')
Hsca2cb2=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hsca2cb1.mat')
Hsca2cb1=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hsca2ca2.mat')
Hsca2ca2=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hsca2ca1.mat')
Hsca2ca1=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hsca1cb2.mat')
Hsca1cb2=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hsca1cb1.mat')
Hsca1cb1=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hsca1ca2.mat')
Hsca1ca2=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hsca1ca1.mat')
Hsca1ca1=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hoa2ca2.mat')
Hoa2ca2=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hoa2ca1.mat')
Hoa2ca1=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hoa1ca2.mat')
Hoa1ca2=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hoa1ca1.mat')
Hoa1ca1=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hcb2ib2.mat')
Hcb2ib2=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hcb2ib1.mat')
Hcb2ib1=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hcb2cb2.mat')
Hcb2cb2=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hcb2cb1.mat')
Hcb2cb1=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hcb1ib2.mat')
Hcb1ib2=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hcb1ib1.mat')
Hcb1ib1=(a4+1i*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hcb1cb2.mat')
Hcb1cb2=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hcb1cb1.mat')
Hcb1cb1=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hca2ca2.mat')
Hca2ca2=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hca2ca1.mat')
Hca2ca1=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hca1ca2.mat')
Hca1ca2=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;load('Hca1ca1.mat')
Hca1ca1=(a4+j*a5);f=a0;clear a0a1a2a3a4a5a6a7a8;
for k=2:401;w=2*pi*f
[Hcaca]=[Hca1ca1(k),Hca1ca2(k);Hca2ca1(k),Hca2ca2(k)]/(-w(k)^2);[Hcbcb]=[Hcb1cb1(k),Hcb1cb2(k);Hcb2cb1(k),Hcb2cb2(k)]/(-w(k)^2);[Hcbib]=[Hcb1ib1(k),Hcb1ib2(k);Hcb2ib1(k),Hcb2ib2(k)]/(-w(k)^2);[Hoaca]=[Hoa1ca1(k),Hoa1ca2(k);Hoa2ca1(k),Hoa2ca2(k)]/(-w(k)^2);
[Hscaca]=[Hsca1ca1(k),Hsca1ca2(k);Hsca2ca1(k),Hsca2ca2(k)]/(-w(k)^2);
[Hscacb]=[Hsca1cb1(k),Hsca1cb2(k);Hsca2cb1(k),Hsca2cb2(k)]/(-w(k)^2);
[Hscbcb]=[Hscb1cb1(k),Hscb1cb2(k);Hscb2cb1(k),Hscb2cb2(k)]/(-w(k)^2);
[Hsoaib]=[Hsoa1ib1(k),Hsoa1ib2(k);Hsoa2ib1(k),Hsoa2ib2(k)]/(-w(k)^2);KsD=inv(Hscaca*transpose(inv(Hscacb))*Hscbcb-Hscacb);Ks11D(k)=KsD(1,1);Ks22D(k)=KsD(2,2);
KsP=inv(Hcbib*inv(Hsoaib)*Hoaca-Hcaca-Hcbcb);Ks11P(k)=KsP(1,1);Ks22P(k)=KsP(2,2);
Ks11(k)=197800+j*w(k)*1344.2;Ks22(k)=189300+j*w(k)*1625.4;end
subplot(2,1,1);
semilogy(f,abs(Ks11D),'--r',f,abs(Ks11P),'-y',f,abs(Ks11),':b');subplot(2,1,2);
semilogy(f,abs(Ks22D),'--r',f,abs(Ks22P),'-y',f,abs(Ks22),':b');grid on,xlabel('頻率'),ylabel('動(dòng)剛度'),title('半對(duì)數(shù)頻譜圖'),legend('直接法','間接法','測(cè)量法');
第四篇:北航matlab上機(jī)實(shí)驗(yàn)報(bào)告
MATLAB基礎(chǔ)上機(jī)指導(dǎo)書
實(shí)驗(yàn)?zāi)康?/p>
MATLAB基礎(chǔ)上機(jī)實(shí)驗(yàn)的目的主要是在深入理解和掌握課程中的基本概念和原理的基礎(chǔ)上培養(yǎng)學(xué)習(xí)者用計(jì)算機(jī)解決實(shí)際問(wèn)題的意識(shí),訓(xùn)練和提高學(xué)生分析問(wèn)題、仿真、程序設(shè)計(jì)和程序調(diào)試能力。實(shí)驗(yàn)要求
1.整個(gè)學(xué)期的上機(jī)實(shí)踐共有4個(gè)。從實(shí)驗(yàn)一的MATLAB的上機(jī)基本操作,到實(shí)驗(yàn)四的GUI設(shè)計(jì),都本著由淺入深、由易到難、逐步深入的原則,給出了不同的上機(jī)程序。一般每個(gè)實(shí)驗(yàn)中有約5-7個(gè)不同難度的程序,按班級(jí)序號(hào)排列組合分組,每組學(xué)生包括5人,按組檢查程序。
2.每次實(shí)驗(yàn)后要求學(xué)生提交上機(jī)報(bào)告,這也是整個(gè)實(shí)驗(yàn)過(guò)程的一個(gè)重要環(huán)節(jié)。實(shí)驗(yàn)結(jié)束后,要整理實(shí)驗(yàn)結(jié)果并認(rèn)真分析和總結(jié),根據(jù)教師要求寫出實(shí)驗(yàn)報(bào)告。實(shí)驗(yàn)報(bào)告一般包括如下內(nèi)容:
⑴ 實(shí)驗(yàn)內(nèi)容:實(shí)驗(yàn)題目與要求。⑵ 程序清單
(3)運(yùn)行結(jié)果:原始數(shù)據(jù)、相應(yīng)的運(yùn)行結(jié)果和必要的說(shuō)明。
(4)分析與思考:調(diào)試過(guò)程及調(diào)試中遇到的問(wèn)題及解決辦法;調(diào)試程序的心得與體會(huì);其他函數(shù)算法的存在與實(shí)踐等。若最終未完成調(diào)試,要認(rèn)真找出錯(cuò)誤并分析原因等。常用命令參考
本節(jié)就一些常用的MATLAB命令進(jìn)行介紹,使初學(xué)者盡快提高M(jìn)ATLAB上機(jī)調(diào)試程序的能力。
1、學(xué)會(huì)用help和doc函數(shù)。
2、輸入輸出文件:save/load
3、解線性方程組AX=B:X=AB
4、作圖時(shí)兩張曲線合并:hold on或者subplot作子圖
5、程序計(jì)算時(shí)間:tic,toc或者clock
6、變量顯示方式更改:format long/short/bank...7、數(shù)組元素求和:sum
8、求數(shù)組長(zhǎng)度:length 求矩陣維數(shù):size或者ndims 矩陣元素個(gè)數(shù):numel
9、函數(shù)作圖:
餅圖:pie/pie3 誤差圖:errorbar 散點(diǎn)圖:scatter/scatter3 直方圖:hist 函數(shù)圖:fplot 動(dòng)畫:movie
10、矩陣分析:
左右翻轉(zhuǎn):fliplr 上下翻轉(zhuǎn):flipud 轉(zhuǎn)置:transpose 矩陣求逆:inv 矩陣范數(shù):norm 條件數(shù):cond 初等變換:rref 特征值:eig/eigs
11、特殊矩陣:
元素全為1的矩陣:ones 元素全為0的矩陣:zeros 單位陣:eye 魔方陣:magic 線性變化數(shù)組:linspace 聚合矩陣:cat/horzcat/vertcat
12、隨機(jī)數(shù):
創(chuàng)建一個(gè)元素服從均勻分布的隨機(jī)數(shù)數(shù)組:rand 創(chuàng)建一個(gè)元素服從正態(tài)分布的隨機(jī)數(shù)數(shù)組:randn 二項(xiàng)分布:binornd 指數(shù)分布:exprnd F分布:frnd 幾何分布:geornd 超幾何分布:hygernd 泊松分布:poissrnd
正態(tài)分布:normrnd 離散均勻分布:unidrnd 連續(xù)均勻分布:unifrnd
13、清屏:clc 清理內(nèi)存:clear
14、字體顯示變更等:preferences
15、得到一個(gè)文件夾的所有文件名:ls
16、語(yǔ)句太長(zhǎng)的話可以再句末加...換行。
實(shí)驗(yàn)一 MATLAB快速入門操作
[實(shí)驗(yàn)?zāi)康腯 1. 熟悉MATLAB的工作環(huán)境。2. 熟悉MATLAB的幫助系統(tǒng)。3. 掌握基本的運(yùn)算表達(dá)。4. 掌握基本的數(shù)學(xué)函數(shù)。5. 掌握基本的字符串使用。[實(shí)驗(yàn)內(nèi)容] 1.執(zhí)行MATLAB的啟動(dòng)和退出。觀看DEMO程序,INTRO程序,HELP文件,練習(xí)MATLAB常用命令在命令窗口中計(jì)算數(shù)學(xué)表達(dá)式,輸入簡(jiǎn)單矩陣,查看工作空間中的變量,命令窗口顯示清除,語(yǔ)句、變量及數(shù)據(jù)的表示,搜索路徑設(shè)置。
2.使用函數(shù)創(chuàng)建字符串?dāng)?shù)組,掌握char、strvcat、strcat之間的區(qū)別。>> c1=char('china','india');>> c3=strvcat('china','india');>> c4=strcat('china','india');char中各部分互相獨(dú)立,strvact豎直連接 strcat直接連接 >> c1=char('china','india')
c1 =
china india
>> c3=strvcat('china','india')
c3 =
china india
>> c4=strcat('china','india')
c4 =
chinaindia 也就是說(shuō)strcat連接兩個(gè)字符串,而strvcat垂直連接兩個(gè)字符串.? i6c?2e3.設(shè)三個(gè)復(fù)數(shù)a=3+4i,b=1+2i,計(jì)算x=ab/c,注意復(fù)數(shù)的表達(dá)方式。
>> a=3+4i,b=1+2i,c=2*exp(pi/6*i)a =
3.0000 + 4.0000i
b =
1.0000 + 2.0000i
c =
1.7321 + 1.0000i
>> X=a*b/c X =
0.3349 + 5.5801i
sin?x??354.計(jì)算下式的結(jié)果,其中x=45°,572
注意函數(shù)參數(shù)的使用類型,掌握復(fù)雜表達(dá)式的計(jì)算。>> a=45/180*pi a =
0.7854
>> b=(sin(a)+35^(1/2))/72^(1/5)b =
2.8158
5.計(jì)算星球之間的萬(wàn)有引力。包括地球和太陽(yáng),地球和月亮之間的距離。具體參數(shù)太陽(yáng)質(zhì)量1.989×10^30千克,地球質(zhì)量5.976×10^27千克,太陽(yáng)和地球的距離***0米,月亮質(zhì)量7.351×10^ 22千克,月亮和地球兩者間距384400000米,萬(wàn)有引力系數(shù)K 6.67×10^-11,見(jiàn)P26 例2-3。
>> M1=1.989e30,M2=5.976e27,M3=7.351e22,d1=1.4960e11,d2=3.844e8 K=6.67e-11
M1 =
1.9890e+030
M2 =
5.9760e+027
M3 =
7.3510e+022
d1 =
1.4960e+011
d2 =
384400000
K =
6.6700e-011
>> F12=M1*M2*K/d1^2
F12 =
3.5426e+025
>> F23=M2*M3*K/d2^2
F23 =
1.9830e+023
?333??,以及數(shù)據(jù)的修改方法,盡量考2336.用兩種方法創(chuàng)建一個(gè)二維數(shù)組?????433??慮計(jì)算效率。在掌握二維數(shù)組基礎(chǔ)上掌握三維數(shù)組的創(chuàng)建方法。
創(chuàng)建:方法1;x=[3,3,3;2,3,3;4,3,3] x =
3 3 2 3 3 4 3 3 方法2 在workspace中點(diǎn)擊 new variable 就會(huì)在下面出現(xiàn)一個(gè)新變量unnamed 雙擊unnamed變量引出一個(gè)空白頁(yè)面,在里面進(jìn)行編輯 >> unnamed
unnamed =
3 3 2 3 3 4 3 3 修改
直接在workspace中點(diǎn)擊需要修改的變量,在相應(yīng)位置修改變量,保存后在命令窗口重新調(diào)用函數(shù) 計(jì)算
[問(wèn)題討論] 1.小結(jié)上機(jī)各個(gè)環(huán)節(jié)所出現(xiàn)的錯(cuò)誤及解決的辦法。
[思考問(wèn)題] 1.仿真是否“真實(shí)”,與什么因素有關(guān)? 仿真是在數(shù)字計(jì)算機(jī)上進(jìn)行試驗(yàn)的數(shù)字化技術(shù),包括數(shù)字和邏輯模型的某些模式,這些模型描述了某一事件或經(jīng)濟(jì)系統(tǒng)在若干周期內(nèi)的特征。仿真常常包括模型建立,仿真模型的建立和仿真試驗(yàn)三個(gè)方面。從以上可以看出,仿真其實(shí)是建立在模型之上,通過(guò)計(jì)算機(jī)或者其他載體,并借助經(jīng)驗(yàn)知識(shí)、統(tǒng)計(jì)數(shù)據(jù)和信息資料等對(duì)真實(shí)或假想的系統(tǒng)進(jìn)行試驗(yàn),得出試驗(yàn)結(jié)果的過(guò)程。
在這點(diǎn)上看,仿真并不真實(shí),因?yàn)樗⒉荒?00%模擬出真實(shí)情況,而實(shí)際上“真實(shí)”的復(fù)雜多變也難以模擬。但是,仿真可以通過(guò)以上的手段在一定范圍內(nèi)對(duì)真實(shí)進(jìn)行模擬和預(yù)測(cè)。其與真實(shí)結(jié)果的相關(guān)性,或者說(shuō)仿真方法的優(yōu)劣性與其系統(tǒng)、模型和載體是密切相關(guān)的。
第五篇:MATLAB上機(jī)實(shí)驗(yàn)實(shí)驗(yàn)報(bào)告
M M ATL L AB B 上機(jī)實(shí)驗(yàn)一
一、實(shí)驗(yàn)?zāi)康?初步熟悉 MATLAB 工作環(huán)境,熟悉命令窗口,學(xué)會(huì)使用幫助窗口查找?guī)椭畔ⅰ?/p>
命令窗口 二、實(shí)驗(yàn)內(nèi)容(1)熟悉MATLAB平臺(tái)得工作環(huán)境.(2)
熟悉MATLAB 得5 個(gè)工作窗口。
(3)MATLAB 得優(yōu)先搜索順序.三、實(shí)驗(yàn)步驟 1、熟悉MATLAB 得5 個(gè)基本窗口 ① mand Window(命令窗口)
② Workspace(工作空間窗口)
③ mand History(命令歷史記錄窗口)
④ Current Directory(當(dāng)前目錄窗口)
⑤ Help Window(幫助窗口)
(1)命令窗口(mand Window)。
在命令窗口中依次輸入以下命令:
>〉x=1 〉> y=[1 2 3
4 5 68 9]; 〉> z1=[1:10],z2=[1:2:5]; >> w=linspace(1,10,10); >〉 t1=ones(3),t2=ones(1,3),t3=ones(3,1)〉〉 t4=ones(3),t4=eye(4)x =1 z1 =
3
9t1 =
1
1
t2 =
1
t3 =
1 t4 =
1
1
1
t4 =
1
0
0
0
0
0
0
0
0
0
0
0
0
思考題: ①
變量如何聲明, , 變量名須遵守什么規(guī)則、就是否區(qū)分大小寫。
答:(1)變量聲明
1、局部變量 每個(gè)函數(shù)都有自己得局部變量,這些變量只能在定義它得函數(shù)內(nèi)部使用。當(dāng)函數(shù)運(yùn)行時(shí),局部變量保存在函數(shù)得工作空間中,一旦函數(shù)退出,這些局部變量將不復(fù)存在。
腳本(沒(méi)有輸入輸出參數(shù),由一系列MATLAB命令組成得M文件)沒(méi)有單獨(dú)得工作空間,只能共享調(diào)用者得工作空間。當(dāng)從命令行調(diào)用,腳本變量存在基本工作空間中;當(dāng)從函數(shù)調(diào)用,腳本變量存在函數(shù)空間中. 2、全局變量 在函數(shù)或基本工作空間內(nèi),用global聲明得變量為全局變量。例如聲明a為全局變量:
>〉global a 聲明了全局變量得函數(shù)或基本工作空間,共享該全局變量,都可以給它曲賦值。
如果函數(shù)得子函數(shù)也要使用全局變量,也必須用global聲明.3、永久變量 永久變量用persistent聲明,只能在M文件函數(shù)中定義與使用,只允許聲明它得函數(shù)存取.當(dāng)聲明它得函數(shù)退出時(shí),MATLAB不會(huì)從內(nèi)存中清除它,例如聲明a為永久變量: 〉〉persistent a(2)變量命名規(guī)則如下: :
始于字母,由字母、數(shù)字或下劃線組成;區(qū)分大小寫;可任意長(zhǎng),但使用前N個(gè)字符.N與硬件有關(guān),由函數(shù)namelengthmax返回,一般N=63; 不能使用關(guān)鍵字作為變量名(關(guān)鍵字在后面給出); 避免使用函數(shù)名作為變量名.如果變量采用函數(shù)名,該函數(shù)失效.(3)區(qū)分大小寫
②
試說(shuō)明分號(hào)、逗號(hào)、冒號(hào)得用法。
答:分號(hào):加上分號(hào)“;“其作用就是將計(jì)算機(jī)結(jié)果存入內(nèi)存,但不顯示在屏幕上,反之,語(yǔ)句結(jié)尾若不加“;”,則表示在語(yǔ)句執(zhí)行后,在將計(jì)算結(jié)果存入內(nèi)存得同時(shí),還將運(yùn)算結(jié)果顯示出來(lái).逗號(hào):分割列表
冒號(hào):從什么到什么,比如1:10意思就是——1到10 ③ ③
l inspace())
稱為“線性等分”函數(shù), , 說(shuō)明它得用法。可使用help命令,格式如下:
>>help linspace
④
數(shù) 說(shuō)明函數(shù) ones())、、zero s()、eye()得用法。
答;(1)ones()函數(shù):全部元素都為 1 得常數(shù)矩陣;(2)zeros()函數(shù):全部元素都為 0 得矩陣;(3)eye()函數(shù):單位矩陣;
(4)linspace()函數(shù):如 a=linspace(n1,n2,n3),表示在線性空
間上,行矢量得值從 n1 到 n2(2)工作空間窗口(Workspace). 單擊工作空間窗口右上角得按鈕,將其從MATLAB 主界面分離出來(lái)。
① 在工作空間查瞧各個(gè)變量,或在命令窗口用who, whos(注意大小寫)查瞧各個(gè) 變量。
② 在工作空間雙擊變量,彈出Array Editor 窗口(數(shù)組編輯器窗口),即可修改變量。
③ 使用save 命令把工作空間得全部變量保存為my_var、mat 文件。
〉〉save my_var、mat
④ 輸入下列命令: 〉〉clear all %清除工作空間得所有變量
觀察工作空間得變量就是否被清空。使用load 命令把剛才保存得變量載入工作空間。
>〉load my_var、mat(yī)
⑤ 清除命令窗口命令: >〉clc(3)歷史命令窗口(mand History)。
打開(kāi)歷史命令窗口,可以瞧到每次運(yùn)行MATLAB 得時(shí)間與曾在命令窗口輸入過(guò)得命 令,練習(xí)以下幾種利用歷史命令窗口重復(fù)執(zhí)行輸入過(guò)得命令得方法。
① 在歷史命令窗口中選中要重復(fù)執(zhí)行得一行或幾行命令,右擊,出現(xiàn)快捷菜單,選擇 Copy,然后再Paste 到命令窗口。
② 在歷史命令窗口中雙擊要執(zhí)行得一行命令,或者選中要重復(fù)執(zhí)行得一行或幾行命令 后,用鼠標(biāo)將其拖動(dòng)到命令窗口中執(zhí)行。
③ 在歷史命令窗口中選中要重復(fù)執(zhí)行得一行或幾行命令,右擊,出現(xiàn)快捷菜單,選擇 Evaluat(yī)e Selection,也可以執(zhí)行。
④ 或者在命令窗口使用方向鍵得上下鍵得到以前輸入得命令。例如,按方向鍵“↑” 一次,就重新將用戶最后一次輸入得命令調(diào)到MATLAB 提示符下。重復(fù)地按方向上鍵 “↑”,就會(huì)在每次按下得時(shí)候調(diào)用再往前一次輸入得命令。類似地,按方向鍵“↓”得時(shí) 候,就往后調(diào)用一次輸入得命令.按方向鍵“←“或者方向鍵“→”就會(huì)在提示符得命令 中左右移動(dòng)光標(biāo),這樣用戶就可以用類似于在字處理軟件中編輯文本得方法編輯這些命令。
(4)
當(dāng)前目錄命令窗口(Current Directory).MATLAB 得當(dāng)前目錄即就是系統(tǒng)默認(rèn)得實(shí)施打開(kāi)、裝載、編輯與保存文件等操作時(shí)得文 件夾。打開(kāi)當(dāng)前目錄窗口后,可以瞧到用“save”命令所保存得my_var、mat 文件就是保存在 目錄C:MATLAB6p5work 下。
(5)幫助窗口(Help Window)。
單擊工具欄得圖標(biāo),或選擇菜單View|Help,或選擇菜單Help|MATLAB Help 都能 啟動(dòng)幫助窗口。
① 通過(guò)Index 選項(xiàng)卡查找log2()函數(shù)得用法,在Search index for 欄中輸入需要查找得 詞匯“l(fā)og2”,在左下側(cè)就列出與之最匹配得詞匯條目,選擇“l(fā)og2[1]”,右側(cè)得窗口就 會(huì)顯示相應(yīng)得內(nèi)容。
② 也可以通過(guò)Search 選項(xiàng)卡查找log2()函數(shù)得用法.Search 選項(xiàng)卡與Index 選項(xiàng)卡 不同,Index 只在專用術(shù)語(yǔ)表中查找,而Search 搜索得就是整個(gè)HTML 幫助文件。
2、MATLAB 得數(shù)值顯示格式設(shè)置 屏幕顯示方式有緊湊(pact)與松散(Loose)兩種,其中Loose 為默認(rèn)方式.>〉a=ones(1,30)
〉>format pact
〉〉a 數(shù)字顯示格式有short、long、short e、long e 等,請(qǐng)參照教材得列表練習(xí)一遍。
〉〉format(yī) long >>pi
〉〉format(yī) short >〉pi
〉>format long 〉〉pi
>>format + 〉〉pi
〉>—pi
3、變量得搜索順序 在命令窗口中輸入以下指令:
>>pi
〉>sin(pi);
>>exist(’pi”)
〉>pi=0;>〉exist(’pi“)
>〉pi
〉〉clear pi 〉>exist('pi’)>>pi
思考題:① 3 次執(zhí)行exist(’pi’)得結(jié)果一樣嗎?如果不一樣,試解釋為什么? 答:不一樣,pi原來(lái)就是庫(kù)存函數(shù),但就是如果被賦值則系統(tǒng)默認(rèn)被賦予得值為pi后來(lái)得值,但就是當(dāng)執(zhí)行clear pi之后所賦得值被清空,因此pi得值又成為3、1416 ② 圓周率 pi 就是系統(tǒng)得默認(rèn)常量,為什么會(huì)被改變?yōu)?0? 答:pi原來(lái)就是庫(kù)存函數(shù),但就是如果被賦值則系統(tǒng)默認(rèn)被賦予得值為 pi 后來(lái)得值,但就是當(dāng)執(zhí)行 clear pi之后所賦得值被清空,因此 pi 得值又成為3、1416
實(shí)驗(yàn)二
MA TLAB語(yǔ)言基礎(chǔ) 一、實(shí)驗(yàn)?zāi)康?基本掌握 MATLAB 向量、矩陣、數(shù)組得生成及其基本運(yùn)算(區(qū)分?jǐn)?shù)組運(yùn)算與矩陣運(yùn)算)、常用得數(shù)學(xué)函數(shù)。交接字符串得操作.二、實(shí)驗(yàn)內(nèi)容(1)向量得生成與運(yùn)算。
(2)矩陣得創(chuàng)建、引用與運(yùn)算。
(3)
多維數(shù)組得創(chuàng)建及運(yùn)算。
(4)字符串得操作。
三、實(shí)驗(yàn)步驟 1、向量得生成與運(yùn)算 1)
向量得生成 ?直接輸入法: A =
>〉 B=[1;2;3;4;5]
B =
1
2
5 ? 冒號(hào)生成發(fā):
〉〉 A=1:2:10 ,B=1:10,C=10:—1:1
A =
3
5
7
B =
5
C =
10
8
4
1 ? 函數(shù)法:
Linspace()就是線性等分函數(shù),logspace()就是對(duì)數(shù)等分函數(shù)。
>〉 A=linspace(1,10),B=linspace(1,30,10)A =
Columns 1 through 91、0000
1、0909
1、1818
1、2727
1、3636
1、4545
1、5455
1、6364
1、7273
Columns 10 through 181、8182
1、9091
2、0000
2、0909
2、1818
2、2727
2、3636
2、4545
2、5455
Columns 19 through 272、6364
2、7273
2、8182
2、9091
3、0000
3、0909
3、1818
3、2727
3、3636
Columns 28 through 36
3、4545
3、5455
3、6364
3、7273
3、8182
3、9091
4、0000
4、0909
4、1818
Columns 37 through 454、2727
4、3636
4、4545
4、5455
4、6364
4、7273
4、8182
4、9091
5、0000
Columns 46 through 545、0909
5、1818
5、2727
5、3636
5、4545
5、5455
5、6364
5、7273
5、8182
Columns 55 through 63
5、9091
6、0000
6、0909
6、1818
6、2727
6、3636
6、4545
6、5455
6、6364
Columns 64 through 72
6、7273
6、8182
6、9091
7、0000
7、0909
7、1818
7、2727
7、3636
7、4545
Columns 73 through 81
7、5455
7、6364
7、7273
7、8182
7、9091
8、0000
8、0909
8、1818
8、2727
Columns 82 through 908、3636
8、4545
8、5455
8、6364
8、7273
8、8182
8、9091
9、0000
9、0909
Columns 91 through 999、1818
9、2727
9、3636
9、4545
9、5455
9、6364
9、7273
9、8182
9、9091
Column 100
10、0000
B =
Columns 1 through 91、0000
4、2222
7、4444
10、666713、8889
17、1111
20、333323、555626、7778
Column 1030、0000 >> A=logspace(0,4,5)A =
1
10
100
1000
10000 練習(xí):
使用 logspace()創(chuàng)建1—4得有 10 個(gè)元素得行向量。
答案:
>〉 A=logspace(1,10,4*pi)
A =1、0e+010 *
Columns 1 through 9
0、0000
0、0000
0、0000
0、0000
0、0000
0、0000
0、0001
0、0005
0、0035
Columns 10 through 120、0231
0、1520
1、0000 2)向量得運(yùn)算 ?維數(shù)相同得行向量只見(jiàn)可以相加減,維數(shù)相同得列向量也可以相加減,標(biāo)量可以與向量直接相乘除。
〉〉 A=[1 2 3 4 5],B=3:7,A =
4
B =
7
>〉 AT=A”,BT=B“, AT =
BT =
6
>〉 E1=A+B, E2=A-B
E1 =
6
10E2 =
—2
—2
—2
〉〉 F=AT—BT, F =
-2
—2
〉〉 G1=3*A, G2=B/3, G1 =
12
15
G2 =1、0000
1、3333
1、6667
2、0000
2、3333 ? 向量得點(diǎn)積與叉積運(yùn)算。
〉〉 A=ones(1,10);B=(1:10); BT=B”;>> E1=dot(A,B)
E1 =
55
〉〉 E2=A*BT
E2 =
〉〉 clear >> A=1:3,B=3:5,A =
3
B =
〉〉 E=cross(A,B)
E = -2
—2 2.矩陣得創(chuàng)建、引用與運(yùn)算
1)矩陣得創(chuàng)建與引用
矩陣就是由元素構(gòu)成得矩陣結(jié)構(gòu),行向量與列向量就是矩陣得特殊形式。
? 直接輸入法:
〉〉 A=[1 2 3;4 5 6]
A =
1
3
4
6
〉〉 B=[ 1 4 75 86 9 ] B =
1
7
8
〉> A(1)
ans =〉〉 A(4:end)
ans =
6 〉〉 B(:,1)ans =
2〉> B(:)ans =
1
8>〉 B(5)
ans =?抽取法 〉> clear 〉> A=[1 2 3 4;5 6 7 8;9 10 11 12;13 14 15 16] A =
3
4
10
12
13
16 >〉 B=A(1:3,2:3)
B =
6
10
11 〉> C=A([1 3],[2 4])
C =
10
12 〉〉 A([1 3;2 4])ans =
9
5? 函數(shù)法: 〉〉 A=ones(3,4)A =
1
1
>〉 B=zero(3)
??? Undefined function or method “zero’ for input arguments of type ”double’、>> B=zeros(3)B =
0
0
0
0
0
0
0
0
0 >> C=eyes(3,2)??? Undefined function or method “eyes’ for input arguments of type ”double’、〉> C=eye(3,2)C =
0
0
0
0 >> D=magic(3)D =
6
拼接法 〉〉 clear 〉> A=ones(3,4)A =
1
1
1
1
>〉 B=zeros(3)
B =
0
0
0
0
0
0
0
0
0 >〉 C=eye(4)C =
0
0
0
0
0
0
0
0
0
0
0
0
>〉 D=[A B] D =
1
0
0
0
0
0
0
0
0
0 >〉 F=[A;C] F =
1
1
1
0
0
0
0
1
0
0
0
0
0
0
0
0
拼接函數(shù)與變形函數(shù)法:
〉〉 clear 〉> A=[0 1;1 1] A =
0
1
1
〉> B=2*ones(2)
B =
2
>> cat(1,A,B,A)ans =
0
1
1
2
2
0
>〉 cat(2 A,B,A)
??? cat(2 A,B,A)Error: Unexpected MATLAB expression、>〉 cat(yī)(2,A,B,A)ans =
0
1
0
1
2
2
1
1 >〉 repmat(A,2,2)ans =
0
1
0
1
1
1
0
0
1
1
1
〉> repmat(A,2)ans =
0
0
1
0
1
0
1
練習(xí):使用函數(shù)法、拼接法、拼接函數(shù)法與變形函數(shù)法,按照要求創(chuàng)建以下矩陣:A 為
得全1矩陣、B 為得 0 矩陣/C 為得單位矩陣、D 為得魔方陣、E 由 C
與D縱向拼接而成,F(xiàn) 抽取 E 得2—--5 行元素生成、G 由 F 經(jīng)變形為得矩陣而得、以 G 為子矩陣用復(fù)制函數(shù)(repmat)生成得大矩陣H。
答案 :
>〉 A=ones(3,4)
A =
1
1
1
1 〉〉 B=zeros(3,3)B =
0
0
0
0
0
0
0
0
0 >〉 C=eye(3)
C =
1
0
0
0
0
0
0
>〉 D=magic(3)D =
5
4
>> E=[C;D] E =
1
0
0
0
0
0
0
8
〉〉 F=(2:5,:)??? F=(2:5,:)Error: Expression or statement is incorrect—-possibly unbalanced(, {, or [、>〉 F=E(2:5,:)F =
0
0
0
0
〉〉 G=respace(E,3,4)
??? Undefined mand/function “respace’、〉>
G=respace(F,3,4)
??? Undefined mand/function ”respace“、〉> G=reshape(F,3,4)
G =
0
0
1
6
0
0
〉〉 H=repmat(G,2,2)H =
0
0
0
5
0
8
0
0
7
0
0
0
3
1
0
1
0
0
1
0
0
0
0
2)矩陣得運(yùn)算 ? 矩陣得加減、數(shù)乘與乘法
已知矩陣: >> A=[1 2
-1], A =
-1 >〉 B=[-1 0
2] B =
0
>〉 A+B ans =
0
4
1 〉〉 2*A ans =
4
-2 >〉 2*A-3*B ans =
-8 〉〉 A*B ans =
4-4
—2 ? 矩陣得逆矩陣 〉〉 format rat;A=[1 0 1;2 1 2;0 4 6] A =
1
0
0
>> A1=inv(A)A1 =
—1/3
2/3
-1/6
-2
1
0
4/3
-2/3
1/6
>〉 A*A1
ans =
0
0
0
0
0
0
?矩陣得除法 >〉 a=[1 2 1;3 1 4;2 2 1],b=[1 1 2],d=b’ a =
1
3
2
b =
1
d =
1
1
>> c1=b*inv(a),c2=b/a c1 =
6/7
3/7
-4/7
c2 =
6/7
3/7
-4/7
>> c3=inv(a)*d, c4=ab c3 =
2/7
-4/7
??? Error using ==〉 mldivide Matrix dimensions must agree、>〉 c3=inv(a)*d,c4=ad c3 =
2/7
-4/7
c4 =
2/7
-4/7
練習(xí): 按下列要求求出各種得矩陣運(yùn)算得值
求矩陣得秩、特征值與特征向量、矩陣得乘冪與開(kāi)方;
矩陣得指數(shù)與對(duì)數(shù)
矩陣得提取與翻轉(zhuǎn) 答案:
〉〉 A=[6 3
4 3
—2 5 7 —4
8-1 —3 —7] A =
6
-4
-1
—3
—7 〉> B=rank(A)B =〉> rb=rank(A)
rb =>> [X,Lamda]=eig(A)
??? Error using ==〉 eig Matrix must be square、〉〉 [X,Lamda]=eigs(A)??? Error using ==〉 eigs A must be a square matrix or a function which putes A*x、〉〉 C=[6 3 4
-2 5 7
—1-3] C =
4
—2
8
—1
—3 >> [X,Lamda]=eigs(C)
X =0、8013
-0、1094
-0、1606
0、3638
—0、6564
0、86690、4749
0、7464
-0、4719 Lamda =9、7326
0
0
0
-3、2928
0
0
0
1、5602 〉〉 [X,Lamda]=eig(C)
X =
0、8013
—0、1094
—0、16060、3638
—0、6564
0、86690、4749
0、7464
-0、4719 Lamda =9、7326
0
0
0
-3、2928
0
0
0
1、5602 〉> [X,Lamda]=eig(C)
X =
0、8013
—0、1094
-0、1606
0、3638
—0、6564
0、8669
0、4749
0、7464
—0、4719 Lamda =9、7326
0
0
0
—3、2928
0
0
0
1、5602 〉> D=A^2 ??? Error using ==> mpower Matrix must be square、〉> D=C^2 D =
33
34
〉〉 E=sqrtm(C)E =
2、2447 + 0、2706i0、6974 — 0、1400i0、9422-0、3494i
-0、5815 + 1、6244i
2、1005-0、8405i
1、7620-2、0970i
1、9719 - 1、8471i
-0、3017 + 0、9557i
0、0236 + 2、3845i >> F=expm(C)F =
1、0e+004 *
1、0653
0、5415
0、6323
0、4830
0、2465
0、2876
0、6316
0、3206
0、3745 〉〉 G=logm(C)Warning: Principal matrix logarithm is not defined for A with
nonpositive real eigenvalues、A non-principal matrix
logarithm is returned、〉 In funm at(yī) 153
In logm at 27 G =
1、7129 + 0、4686i0、5305-0、2425i0、5429-0、6049i
1、1938 + 2、8123i0、3658 — 1、4552i
—0、5514-3、6305i
-0、0748 - 3、1978i
0、7419 + 1、6546i1、8333 + 4、1282i >> H=fliplr(C)H =
5
-2
—1
>> I=triu(C)I =
0
0
0
-3 〉〉 J=tril(C)
J =
0
0
-2
0
-3 >> K=diag(C)K =
6-3 3.多維數(shù)組得創(chuàng)建及運(yùn)算 1)多維數(shù)組得創(chuàng)建 >〉 A1=[1,2,3;4 5 6;7,8,9];A2=reshape([10:18],3,3)A2 =
10
13
16
14
17
12
15〉〉 T1(:,:,1)=ones(3);T1(:,:,2)=zeros(3)T1(:,:,1)
=
1
1
1
T1(:,:,2)=
0
0
0
0
0
0
0
0
0 〉> T2=ones(3,3,2)
T2(:,:,1)=
1
1
1 T2(:,:,2)=
1
1
1 >> T3=cat(3,A1,A2),T4=repmat(A1,[1,1,2])
T3(:,:,1)=
T3(:,:,2)=
10
13
16
17
15T4(:,:,1)
=
2
6
8
T4(:,:,2)=
7
8
2)多維數(shù)組得創(chuàng)建
數(shù)組運(yùn)算用小圓點(diǎn)加在運(yùn)算符得前面表示,以區(qū)分矩陣得運(yùn)算。特點(diǎn)就是兩個(gè)數(shù)組相對(duì)應(yīng)得元素進(jìn)行運(yùn)算。
〉〉 A=[1:6];B=ones(1,6);>> C1=A+B,C2=A—B C1 =
2
C2 =
0
3
>> C3=A、*B,C4=B、/A,C5=A、B C3 =
6 C4 =
1、0000
0、5000
0、3333
0、2500
0、2000
0、1667 C5 = 1、0000
0、5000
0、3333
0、2500
0、2000
0、1667
關(guān)系運(yùn)算或邏輯運(yùn)算得結(jié)果都就是邏輯值.>〉 I=A〉3,C6=A(I)
I =
0
0
0
1
1 C6 =
4
6 〉〉 A1=A-3,I2=A1&A A1 =
—2
—1
0
2
I2 =
1
1
0
1
〉〉 I3=~I I3 =
1
0
0
0 4.字符串得操作 1)字符串得創(chuàng)建
>〉 S1=”Ilike MATLAB’ S1 = Ilike MATLAB >> S2=“I'’m a stuent、” S2 = I“m a stuent、〉> S3=[S2,”and’,S1] S3 = I“m a stuent、andIlike MATLAB 2)求字符串長(zhǎng)度 〉〉 length(S1)ans =>> size(S1)ans =
13)字符串與一維數(shù)值數(shù)組得相互轉(zhuǎn)換 >> CS1=abs(S1)CS1 =
101
32
65
84
66 〉> CS2=double(S1)CS2 =
108
105
101
32
77
65
76
>> char(CS2)
ans = Ilike MATLAB >> setstr(CS2)
ans = Ilike MATLAB 練習(xí):用char()與向量生成得方法創(chuàng)建如下字符串AaBbCc、、、、、、XxYyZz、〉> S1=65:90;S2=97:122;〉〉 C=[S1;S2];>>
C=C(:)’;〉>
S3=double(C);char(S3)ans = AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz 實(shí)驗(yàn)三
MAL TAB B 數(shù)值運(yùn)算 一、實(shí)驗(yàn)?zāi)康?/p>
掌握 MATLAB 得數(shù)值運(yùn)算及其運(yùn)算中所用到得函數(shù),掌握結(jié)構(gòu)數(shù)組與細(xì)胞數(shù)組得操作。
二、實(shí)驗(yàn)內(nèi)容
1)
多項(xiàng)式運(yùn)算。
2)
多項(xiàng)式插值與擬合。
3)
數(shù)值為積分。
4)
結(jié)構(gòu)數(shù)組與細(xì)胞數(shù)組。
三、實(shí)驗(yàn)步驟
1、多項(xiàng)式運(yùn)算
1)
多項(xiàng)式表示。在 MATLAB 中,多項(xiàng)式表示成向量得形式.如: 在 MATLAB 中表示為 >> s=[1 3-5 0 9] 2)
多項(xiàng)式得加減法相當(dāng)于向量得加減法,但必須注意階次要相同。如不同,低階次得要補(bǔ) 0。如多項(xiàng)式與多項(xiàng)式相加。
〉> s1=[0 0 2 3 11] 〉〉 s2=[1 2 —5 4 7] 〉〉 s3=s1+s2 答;s1 =
0
0
3s2 =
—5
4
s3 =
—3
18 3)
多項(xiàng)式得乘、除法分別用函數(shù) conv與得 deconv實(shí)現(xiàn)。
〉> s1=[2 3 11] >> s2=[1 3 —5 4 7] >〉 s3=conv(s1,s2)
>> s4=deconv(s3,s1)答;s1 =
11 s2 =
1
3
4
s3 =
—29
65
s4 =
1
7 4)
多項(xiàng)式求根用函數(shù)roots。
>〉 s1=[2 4 2] >> roots(s1)
答;s1 =
ans =
—1
5)
多項(xiàng)式求值用函數(shù) polyval >> s1=[2 4 1-3] 〉〉 polyval(s1,3)
〉> x=1:10 〉〉 y=polyval(s1,x)答;s1 =
2
-3 ans =
90 x =
1
6
9
10 y =
Columns 1 through 8
193
352
579
886
1285
Columns 9 through 10 練習(xí):求得“商”及余數(shù).〉> s1=[1 0 1];s2=[1 3];s3=[1 1]; 〉> s4=[1 0 2 1]; >> [q,r]=deconv(conv(conv(s1,s2),s3),s4)答;q =
1
4 r =
0
0
-1 2、多項(xiàng)式插值與擬合 有一組實(shí)驗(yàn)數(shù)據(jù)如附表 1—1 所示。
附表 1-1 X 1 2 3 4 5 6 7 8 9 10 Y 16 32 7
1
分別用擬合(二階至三階)與插值(線性與三次樣條)得方法來(lái)估算X=9、5 時(shí) Y 得值。以下就是實(shí)現(xiàn)一階擬合得語(yǔ)句。
〉> x=1:10 >〉 y=[16 32 70 142 260 436 682 1010 1342 1960] 〉> p1=polyfit(x,y,1)
%一階擬合 >> y1=polyval(p1,9、5)
%計(jì)算多項(xiàng)式 P1 在x=9、5 得值 答;x =
2
9y =
Columns 1 through 8
32
70
142
260
436
682
1010
Columns 9 through 10
1342
1960 p1 =
200、9818 -510、4000 y1 =1、3989e+003 3、數(shù)值微積分
1)
差分使用 diff 函數(shù)實(shí)現(xiàn)。
>〉 x=1:2:9 〉〉 diff(x)答;x =
5
ans =
2 2)
可以用因變量與自變量差分得結(jié)果相處得到數(shù)值微分。
〉> x=linspace(0,2*pi,100);>〉 y=sin(x); >〉 plot(x,y)>〉 y1=diff(y)、/diff(x); 〉〉 plot(x(1:end-1),y1)答;
3)
cumsum 函數(shù)求累計(jì)積分,trapz 函數(shù)用梯形法求定積分,即曲線得面積。
〉〉 x=ones(1,10)
>> cumsum(x)>> x=linspace(0,pi,100); >> y=sin(x); 〉〉 trapz(x,y)〉> p=cumsum(y); >> p(100)*pi/(100—1)答;x =
1
1
ans =
9ans =
1、9998 ans =
1、9998 練習(xí):圖 A1就是瑞士地圖,為了算出其國(guó)土面積,首先對(duì)地圖作如下測(cè)量:以由西向東方向?yàn)?X 軸,由南向北方向?yàn)?Y 軸,選擇方便得原點(diǎn),并將從最西邊界點(diǎn)到最東邊界點(diǎn)在 X 軸上得區(qū)間適當(dāng)劃分為若干段,在每個(gè)分點(diǎn)得Y方向測(cè)出南邊界點(diǎn)與北邊界點(diǎn)得 Y 坐標(biāo)Y1與 Y2,這樣就得到表 1,根據(jù)地圖比例尺回到18mm相當(dāng)于 40Km,試由測(cè)量數(shù)據(jù)計(jì)算瑞士國(guó)土近似面積,與其精確值 41228 比較。地圖得數(shù)據(jù)見(jiàn)附表 1—2(單位mm).附表 1—2 X 7 10、5 13 17、5 34 40、5 44、5 48 56 61 68、5 76、5 80、5 91 Y1 44 45 47 5
34 41 45 46 Y2 44 59 7
18 1 18 續(xù)表 X 96 101 104 106、5 111、5 118 123、5 1 36、5 142 146 150 157 158 Y1 43 37 33 28 32 65 55 54 52 50 66 66 68 Y2 121 124 1 21 1 21 121 116 1 22 83 81 82 86 85 68 提示:由高等數(shù)學(xué)得知識(shí),一條曲線得定積分就是它與 x 軸所圍成得面積,那么兩條曲線所圍成得面積可由兩條曲線得定積分相減得到。、結(jié)構(gòu)數(shù)組與細(xì)胞數(shù)組 1)
機(jī)構(gòu)數(shù)組得創(chuàng)建. 〉> student、number=’20050731001’;〉〉 student、name=’Jack”;〉〉 student(2)、number=’20050731002’;〉〉 student(2)、name=’Lucy“; >> student 或者用 struct 函數(shù)創(chuàng)建。
>> student=struct(”number“,{’001”,“002’},”name',{'Jack’,“Lucy’});答;student =
1x2 struct array with fields:
number
name 2)
機(jī)構(gòu)數(shù)組得操作。
〉> student(1)、subject=[]
%添加 subject 域并賦予空值 〉〉 student(1)、score=[] >〉(studeng)〉>fieldnames(studeng)
〉>fieldnames(student)
〉〉 getfield(student,{2},'name')〉〉 student=rmfield(student,”subject’)
%刪除 subject 域 〉〉 student=setfield(student,{1},“score’,90);>> student(2)、score=88;
%比較與上一條語(yǔ)句就是否效果一樣 答;student =
1x2 struct array with fields:
number
name
subject student =
1x2 struct array with fields:
number
name
subject
score ??? Undefined function or variable ’studeng’、練習(xí):創(chuàng)建一結(jié)構(gòu)數(shù)組stusorce,其域?yàn)椋篘o,Name,English,Math,Chinese,Total,Average。結(jié)構(gòu)數(shù)組得大小為 2×2。
3)
細(xì)胞數(shù)組得創(chuàng)建。
〉> A={’How are you!”,ones(3);[1 2;3 4],{“cell’}};
%直接創(chuàng)建
〉〉 B(1,1)={’Hello world”};
%由各個(gè)細(xì)胞元素創(chuàng)建
>> B(1,2)={magic(3)};
>〉 B(2,1)={[1 2 3 4]};答
或者用cell 函數(shù)先創(chuàng)建空得細(xì)胞數(shù)組,然后再給各個(gè)元素賦值 c=cell(1,2); >> c(1,1)={’Hello world’};>> c(1,2)={magic(3)}; 〉〉 c(1,3)={[1 2 3 4]}; 4)
細(xì)胞數(shù)組得操作。
〉> ans1=A(1,1)>> ans2=A(1,1)>〉 whos ans1 ans2 〉〉 celldisp(A)〉> a1=A{2,1}(1,2)>〉 [a2 a3]=deal(A{1:2})
答;ans1 =
’How are you!’ ans2 =
’How are you!’
Name
Size
Bytes
Class
Attributes
ans1
1x1
84
cell
ans2
1x1
84
cell
A{1,1} = How are you!
A{2,1} =
A{1,2} =
1
A{2,2}{1} = cell a1 =a2 = How are you!a3 =
1
2
實(shí)驗(yàn)四
MA LT AB B 符號(hào)運(yùn)算
一、實(shí)驗(yàn)?zāi)康?/span>
掌握符號(hào)變量與符號(hào)表達(dá)式得創(chuàng)建,掌握MALTAB得symbol工具箱得一些基本運(yùn)用。
二、實(shí)驗(yàn)內(nèi)容
1)
符號(hào)變量、表達(dá)式、方程及函數(shù)得表示。
2)
符號(hào)微積分運(yùn)算.
3)
符號(hào)表達(dá)式得操作與轉(zhuǎn)換.4)
符號(hào)微分方程求解.三、實(shí)驗(yàn)步驟1、符號(hào)運(yùn)算得引入
在數(shù)值運(yùn)算中如果求,則可以不斷讓得讓x趨近0,一球得表達(dá)式趨近什么數(shù),但終究不能令 x=0,因?yàn)樵跀?shù)值運(yùn)算中 0 不就是能作除數(shù)得。MATLAB得符號(hào)運(yùn)算能解決這內(nèi)問(wèn)題。輸入如下命令: 〉> f=sym(’sin(pi*x)/x')
>> limit(f,’x“,0)答;f = sin(pi*x)/x ans = pi 2 2、符號(hào)常量、符號(hào)變量、符號(hào)表達(dá)式得創(chuàng)建
1)
使用 sym()創(chuàng)建 輸入以下命令,觀察 Workspace 中 A、B、f就是什么內(nèi)性得數(shù)據(jù),占用多少字節(jié)得內(nèi)存空間。
>〉 A=sym(”1’)
%符號(hào)常量 〉〉 B=sym(’x’)
%符號(hào)變量 >> f=sym(’2*x^2+3*x-1’)
%符號(hào)表達(dá)式 >> clear >> f1=sym(“1+2”)
%有單引號(hào),表示字符串 >〉 f2=sym(1+2)
%無(wú)單引號(hào) >〉 f2=sym(1+2)
〉> f4=sym(“2*x+3’)
%為什么出錯(cuò) 〉〉 x=1 〉〉 f4=sym(2*x+3)
答;A = 1 B = x f = 2*x^2+3*x-1 f1 = 1+2 f2 = 3 f2 = 3 f4 = 2*x+3 x =f4 = 5 通過(guò)瞧 MATLAB 得幫助可知,sym()得參數(shù)可以使字符串或就是數(shù)值類型,無(wú)論就是哪種類型都會(huì)生成符號(hào)類型數(shù)據(jù)。
2)
使用 syms創(chuàng)建 〉> clear >〉 syms x y z 〉> x,y,z 〉〉 f1=x^2+2*x+1 >〉 f2=exp(y)+exp(z)^2 >> f3=f1+f2 答;x = x y = y z = z f1 = x^2+2*x+1 f2 = exp(y)+exp(z)^2 f3 = x^2+2*x+1+exp(y)+exp(z)^2 3 3、符號(hào)矩陣創(chuàng)建
>〉 syms a1 a2 a3 a4 〉〉 A=[a1 a2;a3 a4] 〉> A(1),A(3)答;A = [ a1,a2] [ a3, a4] ans = a1 ans = a2 4 4、符號(hào)算術(shù)運(yùn)算
1)
符號(hào)向量相乘、相除 符號(hào)量相成與數(shù)值量相乘一樣,分成矩陣乘與數(shù)組乘。
〉> a=sym(5);b=sym(7); 〉> c1=a*b >〉 c2=a/b >> a=sym(5);B=sym([3 4 5]);>〉 C1=a*B,C2=aB >> syms a b >> A=[5 a;b 3];B=[2*a b;2*b a];〉> C1=A*B,C2=A、*B >〉 C3=AB,C4=A、/B 答;c1 =
35 c2 = 5/7 C1 = [ 15, 20, 25] C2 = [ 3/5, 4/5,1] C1 = [ 10*a+2*a*b,5*b+a^2] [
2*a*b+6*b,b^2+3*a] C2 = [
10*a,a*b] [ 2*b^2,3*a] C3 = [
2*a*(b—3)/(—15+a*b),(a^2-3*b)/(—15+a*b)] [
2*b*(a-5)/(-15+a*b), —(5*a-b^2)/(-15+a*b)] C4 = [ 5/2/a,a/b] [
1/2, 3/a] 2)
符號(hào)數(shù)值任意精度控制與運(yùn)算 任意精度得 VPA 運(yùn)算可以使用命令 digits(設(shè)定默認(rèn)得精度)與vpa(對(duì)指定對(duì)象以新得精度進(jìn)行計(jì)算)來(lái)實(shí)現(xiàn)。
>〉 a1=sym(’2*sqrt(5)+pi')
〉> a=sym(’2*sqrt(5)+pi’)〉〉 b=sym(2*sqrt(5)+pi)
>> digits >> vpa(a)>> digits(15)>〉 vpa(a)〉〉 c1=vpa(a,56)
〉〉 c2=vpa(b,56)
答 a1 = 2*sqrt(5)+pi a = 2*sqrt(5)+pi b = 8572296331135796*2^(-50)
Digits = 32 ans = 7、637263128 ans = 7、637 c1 = 7、6372631285535581572696
c2 = 7、6372726175781250000000 注意觀察c1 與c2 得數(shù)值類型,c1 與 c2 就是否相等。
3)
符號(hào)類型與數(shù)值類型得轉(zhuǎn)換 使用命令sym可以把數(shù)值型對(duì)象轉(zhuǎn)換成有理數(shù)性符號(hào)對(duì)象,命令vpa可以講數(shù)值型對(duì)象轉(zhuǎn)換為任意精度得 VPA 型符號(hào)對(duì)象.使用 double,numeric 函數(shù)可以將有理數(shù)型與 VPA 型符號(hào)對(duì)象轉(zhuǎn)換成數(shù)值對(duì)象、〉> clear >〉 a1=sym('2*sqrt(5)+pi’)
>〉 b1=double(a1)
%符號(hào)轉(zhuǎn)數(shù)值 >> b2=isnumeric(b1)
%判斷就是否轉(zhuǎn)換成了數(shù)值 >> a2=vpa(a1,70)
%數(shù)值轉(zhuǎn)符號(hào) 答;a1 = 2*sqrt(5)+pi b1 =7、6137 b2 =
1 a2 = 7、6372631285535589083128858 5 5、、符號(hào)表達(dá)式得操作與轉(zhuǎn)換
1)獨(dú)立變量得確定原則 獨(dú)立變量得確定原則:在符號(hào)表達(dá)式中默認(rèn)變量就是惟一得.MATLAB 會(huì)對(duì)單個(gè)英文小寫字母(除 i、j外)進(jìn)行搜索,且以 x 為首選獨(dú)立變量。如果表達(dá)式中字母不唯一,且無(wú) x,就選在字母表最接近x 得字母.如果有相連得字母,則選擇在字母表中較后得那一個(gè)。例如:中,y 就是默認(rèn)獨(dú)立變量。,t 就是默認(rèn)獨(dú)立變量。
輸入以下命令,觀察并分析結(jié)果。
>> clear >〉 f=sym(”a+b+i+j+x+y+xz’)
>〉 findsym(f)
〉> findsym(f,1)>〉 findsym(f,2)>> findsym(f,3)
>〉 findsym(f,4)〉〉 findsym(f,5)>〉 findsym(f,6)答;f = a+b+i+j+x+y+xz ans = a, b, j,x,xz, y ans = x ans = x,xz ans =
x,xz,y ans = x,xz,y,j ans = x,xz,y,j,b ans = x,xz,y,j,b,a 2)符號(hào)表達(dá)式得化簡(jiǎn) 符號(hào)表達(dá)式化簡(jiǎn)主要包括表達(dá)式美化(pretty)、合并同類項(xiàng)(collcet)、多項(xiàng)式展開(kāi)(expand)、因式分解(factor)、化簡(jiǎn)(simple或 simplify)等函數(shù)。
①合并同類項(xiàng)(collect)。分別按 x 得同冪項(xiàng)與e指數(shù)同冪項(xiàng)合并表達(dá)式: . 〉〉 syms x t; >〉 f=(x^2+x^exp(—t)+1)*(x+exp(-t));〉〉 f1=collect(f)〉〉 f2=collect(f,’exp(-t)“)答;f1 = x^3+exp(-t)*x^2+(x^exp(-t)+1)*x+(x^exp(-t)+1)*exp(-t)
f2 =(x^2+x^exp(-t)+1)*exp(-t)+(x^2+x^exp(—t)+1)*x ②對(duì)顯示格式加以美化(pretty)。針對(duì)上例,用格式美化函數(shù)可以使顯示得格式更符合數(shù)學(xué)書寫習(xí)慣。
>〉 pretty(f1)>〉 pretty(f2)
答;f1 = x^3+exp(-t)*x^2+(x^exp(—t)+1)*x+(x^exp(—t)+1)*exp(-t)
f2 =(x^2+x^exp(-t)+1)*exp(-t)+(x^2+x^exp(—t)+1)*x >〉
pretty(f1)pretty(f2)
3
2
exp(-t)
exp(-t)
x
+ exp(—t)
x
+(x
+ 1)
x +(x
+ 1)exp(—t)
2
exp(—t)
exp(-t)
(x
+ x
+ 1)exp(-t)+(x
+ x
+ 1)x 注意與直接輸出得 f1 與 f2 對(duì)比。
③多項(xiàng)式展開(kāi)(expand)。展開(kāi)成 x 不同次冪得多項(xiàng)式、〉> syms x 〉> f=(x—1)^12;〉> expand(f)〉〉 pretty(expand(f))
答;ans = 1+x^12-12*x^11+66*x^10—220*x^9+495*x^8—792*x^7+924*x^6-792*x^5+495*x^4-220*x^3+66*x^2—12*x
7
6
5
+ x
- 12 x
+ 66 x
— 220 x
+ 495 x
x
+ 924 x
- 792 x
+ 495 x
- 220 x
+ 66 x
- 12 x ④ 因式分解(factor)。將表達(dá)式做因式分解。
>> syms x;f=x^12—1; 〉> pretty(factor(f))
答;ans = 1+x^12—12*x^11+66*x^10—220*x^9+495*x^8-792*x^7+924*x^6—792*x^5+495*x^4—220*x^3+66*x^2-12*x
12
11
8
6
5
+ x
— 12 x
+ 66 x
— 220 x
+ 495 x
x
+ 924 x
— 792 x
3
+ 495 x
— 220 x
+ 66 x
- 12 x 〉〉 syms x;f=x^12—1;pretty(factor(f))
2
2
(x-1)(1 + x
+ x)(1 + x)
(1 — x + x)(1 + x)(x
— x
+ 1)⑤化簡(jiǎn)(simple或 simplify)。
將函數(shù)化簡(jiǎn).〉〉 clear 〉〉 syms x;f=(1/x^3+6/x^2+12/x+8)^(1/3); 〉> g1=simple(f)>〉 g2=simplify(f)
答;g1 =(2*x+1)/x g2 =((2*x+1)^3/x^3)^(1/3)6 6、符號(hào)表達(dá)式得變量替換
subs 函數(shù)可以對(duì)符號(hào)表達(dá)式中得符號(hào)變量進(jìn)行替換 >> clear >> f=sym(’(x+y)^2+4*x+10’)〉〉 f1=subs(f,’x',’s')
%使用 s 替換x >〉 f2=subs(f,”x+y’,“z’)答;f =(x+y)^2+4*x+10 f1 =(s+y)^2+4*s+10 f2 = z^2+4*x+10 7、符號(hào)極限、符號(hào)積分與微分
1)
求極限函數(shù)得調(diào)用格式 limit(F,x,a)
%返回符號(hào)對(duì)象 F 當(dāng) x→a 時(shí)得極限 limit(F,a)
%返回符號(hào)對(duì)象 F 當(dāng)獨(dú)立變量*→a 時(shí)得極限
limit(F)
%返回符號(hào)對(duì)象 F 當(dāng)獨(dú)立變量→0(a=0)時(shí)得極限 limit(F,x,a,’right’)
%返回符號(hào)對(duì)象 F 當(dāng) x→a 時(shí)得右極限 limit(F,x,a,’left”)
%返回符號(hào)對(duì)象F當(dāng) x→a 時(shí)得左極限 例一:
〉〉 clear >> f=sym(“sin(x)/x+a*x”)
>〉 limit(f,“x’,0)
%以 x 為自變量求極限 >> limit(f,”a’,0)
%以 a 為自變量求極限 >> limit(f)
%在默認(rèn)情況下以 x 為自變量求極限 >> findsym(f)
%得到變量并且按字母表順序排列 答‘f = sin(x)/x+a*x ans = 1 ans = sin(x)/x ans = 1 ans = a,x 例二: >> clear >〉 f=sym('sqrt(1+1/n));
〉〉 limit(f,n,inf)
%求 n 趨于無(wú)窮大時(shí)得極限
2)
求積分函數(shù)得調(diào)用格式 int(F)
%求符號(hào)對(duì)象 F 關(guān)于默認(rèn)變量得不定積分 int(F,v)
%求符號(hào)對(duì)象 F 關(guān)于指定變量 v 得不定積分 int(F,a,b)
%求符號(hào)對(duì)象 F 關(guān)于默認(rèn)變量得從 a 到 b 得定積分 int(F,v,a,b)
%求符號(hào)對(duì)象 F 關(guān)于指定變量得從 a 到b得定積分 3)
求微分方程得調(diào)用格式 diff(F)
%求符號(hào)對(duì)象 F 關(guān)于默認(rèn)變量得微分 diff(F,v)
%求符號(hào)對(duì)象 F 關(guān)于指定變量 v 得微分 diff(F,n)
%求符號(hào)對(duì)象 F 關(guān)于默認(rèn)變量得 n 階微分,n 為自然數(shù) 1、2、3…… diff(F,v,n)%求符號(hào)對(duì)象 F 關(guān)于指定變量 v 得 n 階微分 8 8、符號(hào)方程求解
1)常規(guī)方程求解函數(shù)得調(diào)用格式 g=solve(eq)
%求方程(或表達(dá)式或字串)eq 關(guān)于默認(rèn)變量得解
g=solve(eq,var)
%求方程(或表達(dá)式或字串)eq 關(guān)于指定變量 var 得解 g=solve(eq1,eq2,…、,eqn,var1,var2,…,varn)
%求方程(或表達(dá)式或字串)eq1,eq2,eq3,……eqn 關(guān)于指定變量組var1,var2,……,varn)得解 求一元二次方程得解.其求解方法有多種形式:
① seq=solve(“a*x^2+b*x+c')
② seq=solve(’a*x^2+b*x+c=0”)③ eq=’a*x^2+b*x+c“;④ eq=”a*x^2+b*x+c=0’; seq=solve(eq)
⑤sym x a b c
eq=a*x^2+b*x+c seq=solve(eq)
2)常微分方程求解 求解常微分方程得函數(shù)就是 dsolve。應(yīng)用此函數(shù)可以求得常微分方程(組)得通解,以及給定邊界條件(或初始條件)后得特解。
常微分方程求解函數(shù)得調(diào)用格式:
r=dsolve(“eq1,eq2,…’,’cond1,cond2,…’,’v’)r=dsolve(’eq1’,’eq2”,…,“cond1’,’cond2’,…,’v”)說(shuō)明: ① 以上兩式均可給出方程 eq1,、qeq2 對(duì)應(yīng)初始條件 cond1、cond2 之下得一 v 作為解變量得各微分方程得解。
② 常微分方程解得默認(rèn)變量為 t。
③ 第二式中最多可接受得輸入式就是 12 個(gè)。
④ 微分方程得表達(dá)方法。
在用 MATLAB 求解常微分方程時(shí),用大寫字母 Dy表示,用D2y表示,依此類推。
邊界條件以類似于 y(a)=b 給出。其中 y 為因變量,a、b 為常數(shù)、如果初始條件給得不夠,求出得解為含有 C1、C2 等待定常數(shù)得通解。
例一 求微分方程得通解、練習(xí):(1)求。
(2)求函數(shù)得積分;求函數(shù)得導(dǎo)數(shù)(3)計(jì)算定積分(4)求下列線性方程組得解
(5)求解但 y(0)=2,在 z(0)=7 時(shí),微分方程組得解。
實(shí)驗(yàn)五
MATLA B 程序設(shè)計(jì)
一、實(shí)驗(yàn)?zāi)康?/span>
掌握 MATLAB 程序設(shè)計(jì)得主要方法,熟練編寫 MATLAB函數(shù)、二、實(shí)驗(yàn)內(nèi)容
(1)M 文件得編輯。
(2)程序流程控制結(jié)構(gòu)。
(3)子函數(shù)調(diào)用與參數(shù)傳遞。
(4)局部變量與全局變量。
三、實(shí)驗(yàn)步驟1、M M 文件得編輯
選擇MATLAB 得菜單,打開(kāi)新得M文件進(jìn)行編輯,然后輸入以下內(nèi)容,并保存文件名為 expl、m。
s=0;for n=1:100
s=s+n;end s 答;s =
5050 保存好文件后,在命令窗口輸入expl 即可運(yùn)行該腳本文件,主義觀察變量空間。緊接著創(chuàng)建 M 函數(shù)文件,然后輸入以下內(nèi)容,并保存文件名為 expl2、m。
function s=expl2(x)
s=0;for n=1:x
s=s+n; end
保存好文件后,在命令窗口輸入
>〉 clear 〉> s=expl2(100)以 open 命令可以打開(kāi) M 文件進(jìn)行修改。
〉〉open conv
%打開(kāi) conv 函數(shù) 2 2、程序流程控制結(jié)構(gòu)
1)
for 循環(huán)結(jié)構(gòu)
>〉 for n=1:10 n end 答;n =n =n =n =n =n =
6 n =n =
n =n =
另一種形式得 for 循環(huán): 〉> n=10:—1:5;>〉 for i=n
%循環(huán)得次數(shù)為向量 n 得列數(shù) i end 答;i =
10 i =i =i =i =i =2)
while 循環(huán)結(jié)構(gòu) 在命令窗口輸入:
clear x=1;while 1 x=x*2 end 將會(huì)瞧到 MATLAB 進(jìn)入死循環(huán)因?yàn)?while 判斷得值恒為真,這時(shí)須按 Ctrl+C鍵來(lái)中斷運(yùn)行,并且可瞧到 x 得值為無(wú)窮大。
練習(xí):
(1)請(qǐng)把 exp2、m函數(shù)文件用 while 循環(huán)改寫。
(2)用公式求得近似值,直到最后一項(xiàng)得絕對(duì)值小于為止,試編寫M腳本文件、3)
if-else—end 分支結(jié)構(gòu)
if—else—end 分支結(jié)構(gòu)有如下 3 種形式。
(a)
if
表達(dá)式 語(yǔ)句組 1 end(b)
if
表達(dá)式 語(yǔ)句組 1 else 語(yǔ)句組2 end(c)
if
表達(dá)式 A
語(yǔ)句組 1 else if 表達(dá)式 B 語(yǔ)句組 2 else if 語(yǔ)句組 3 …… else
語(yǔ)句組 n end 4)
switch—case結(jié)構(gòu) 創(chuàng)建 M 腳本文件 exp3、m,輸入以下內(nèi)容并在命令窗口中運(yùn)行。
%功能:判斷鍵盤輸入得數(shù)就是奇數(shù)還就是偶數(shù) n=input(’n=');if isempty(n)
error(’please input n');
n=input(“n=’);end switch mod(n,2)
case 1
A=’奇數(shù)'
case 0
A=’偶數(shù)” End 答;n=input('n=’); if isempty(n)
error('please input n’);
n=input(“n=’); end switch mod(n,2)
case 1
A=”奇數(shù)“
case 0
A=”偶數(shù)' end n=1 A = 奇數(shù) 3、子函數(shù)與參數(shù)傳遞
有一個(gè)函數(shù),試編寫實(shí)現(xiàn)該函數(shù)得函數(shù)文件.function g=expl4(x)
%主函數(shù) g=0;for n=1:x
g=g+fact(n);
%調(diào)用子函數(shù) end
function y=fact(k)
%子函數(shù) y=1; for n=1:k
y=y*n; end 輸入?yún)?shù)可以有函數(shù) nargin 計(jì)算,下面得例子 sinplot(),當(dāng)知輸入一個(gè)參數(shù) w 時(shí),sinplot()函數(shù)會(huì)給p賦予默認(rèn)值 0。4、局部變量與全局變量
自程序執(zhí)行開(kāi)始到退出 MATLAB,始終存放在工作空間,可被任何命...