版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1 Matlab經(jīng)驗(yàn)之談1.1 使用demo指令查看例子1.2 Out of Memory在MATLAB的command window中輸入feature ('memstats'),可以得到內(nèi)存信息。輸入memory可以得到大略的。1.2.1 升級(jí)內(nèi)存和升級(jí)64位系統(tǒng)1.2.2 增加虛擬內(nèi)存如何提升虛擬內(nèi)存?系統(tǒng)虛擬內(nèi)存的提升是否意味著matlab虛擬內(nèi)存的提升?方法一:利用win7本身設(shè)置。計(jì)算機(jī)右鍵屬性高級(jí)系統(tǒng)設(shè)置高級(jí)設(shè)置高級(jí)更改取消自動(dòng)管理自定義大小方法二:用下面方法可使win7 32位OS下用于matlab的虛擬內(nèi)存增加到3G。設(shè)置:開(kāi)始-所有程序-附件,右擊命令提示符
2、,選擇“以管理員身份運(yùn)行”,輸入:bcdedit /set IncreaseUserVa 3072 回車(chē),重啟電腦。取消:開(kāi)始-所有程序-附件,右擊命令提示符,選擇“以管理員身份運(yùn)行”,輸入:bcdedit /deletevalue IncreaseUserVa 回車(chē),重啟電腦。1.2.3 采用pack(在命令行輸入 pack 整理內(nèi)存空間)1.2.4 使用稀疏矩陣sparse1.2.5 遇到的大的文件分塊/分行讀取文件1.3 加快程序的運(yùn)行速度1.3.1 向量化編程1.3.2 預(yù)定義變量1.3.3 利用預(yù)置函數(shù),盡量不自己編程1.4 Matlab各個(gè)版本的兼容性問(wèn)題本人安裝了2009b和20
3、14b(a是上半年的,b是下半年的)。統(tǒng)一一下,好像差異還蠻多的。1.4.1 使用polyfit是遇到差異在win7系統(tǒng)中在2009b 中運(yùn)行sym2poly無(wú)問(wèn)題。在win10系統(tǒng)中在2009b中運(yùn)行sym2poly基本不能有正確結(jié)果,提取的系數(shù)每次都變,搞不懂為什么,可能高版本的matlab與win10更加兼容。在win10系統(tǒng)中在2014b中運(yùn)行sym2poly無(wú)問(wèn)題。1.4.2 使用simulink時(shí)遇到差異1.4.2.1 總體模型報(bào)錯(cuò)2009b中建立的mdl模型到2014b中報(bào)錯(cuò),需要新建一個(gè)mdl,把原模型復(fù)制到其中,并使用2014b的powergui。同樣,在2014b中建立的m
4、dl模型在2009b中完全沒(méi)法用。2014b的simulink模型后綴名為slx或者mdl。哎,還是m文件比較穩(wěn)定。1.4.2.2 simpowersystems的移動(dòng)2014b中的simpowersystems移動(dòng)至simscape的子目錄下。1.4.2.3 2014b中simulink的scope變強(qiáng)大1.4.3 使用GUI時(shí)遇到差異2009b中建立的GUI可以在2014b中打開(kāi)并正常使用,但是GUI在2014b中做任何改動(dòng)后回到2009b,不能正常使用。所以利用GUI創(chuàng)建的界面要注意版本問(wèn)題。網(wǎng)上說(shuō),利用m文件創(chuàng)建的uicontrols沒(méi)有這個(gè)問(wèn)題,更靈活。(BTW,這樣每次響應(yīng)都要用循
5、環(huán)來(lái)判斷,也很煩?。?.5 濾波器設(shè)計(jì)工具箱1.5.1 步驟a.打開(kāi)濾波器設(shè)計(jì)工具箱:fdatool;b.在界面中設(shè)置Resongse Type、Design Method、階數(shù)order、采樣頻率Fs和其他;c.注意:一般情況下order可以選擇Minimum Order。但如果設(shè)計(jì)的濾波器采樣頻率很高或者其他情況,導(dǎo)致這樣選擇時(shí)速度很慢,可以指定階數(shù)order;另外采樣頻率Fs基本上與需要濾波的信號(hào)的仿真頻率相等;d.設(shè)計(jì)好的濾波器可以生成m文件(FileàGenerate M-file)或者函數(shù)句柄(FileàExportàExport As Objects
6、),以便使用,使用格式為:y2=filter(濾波m函數(shù)或函數(shù)句柄,y1)1.5.21.6 曲線擬合工具箱(cftool或者sftool)1.6.1 cftool1.6.2 sftool1.6.3 如何利用command window或者m文件實(shí)現(xiàn)曲線擬合利用fit命令,最基本的命令如下,其中l(wèi)ibname就是對(duì)應(yīng)cftool里的type of fit(擬合類(lèi)型)。cfun = fit(xdata,ydata,libname)其中l(wèi)ibname選項(xiàng)可以用cflibhelp命令查看,出來(lái)cftool中預(yù)定義的幾種擬合類(lèi)型,也可以任意指定函數(shù),但是這樣就要設(shè)置初始值,詳情help fit。如指數(shù)擬
7、合分為fit(xdata,ydata,exp1)和fit(xdata,ydata,exp2),分別為單指數(shù)和雙指數(shù)擬合。例如TRV的工頻擬合和擬合系數(shù)的選取:>> temp gof=fit(x',y','exp2')temp = General model Exp2: temp(x) = a*exp(b*x) + c*exp(d*x) Coefficients (with 95% confidence bounds): a = 421.6 (395.4, 447.7) b = -1.022e-005 (-1.081e-005, -9.624e-006
8、) c = 781.2 (753.8, 808.6) d = -7.954e-008 (-1.933e-007, 3.42e-008)gof = sse: 0.4131 rsquare: 1.0000 dfe: 6 adjrsquare: 1.0000 rmse: 0.2624>> temp.aans = 421.5943>> temp.bans = -1.0216e-0051.6.3.1 polyfit的centering和scalingpolyfit是多項(xiàng)式擬合,如果數(shù)據(jù)變化比較快,直接擬合可能會(huì)warning。如為T(mén)RV擬合多項(xiàng)式,如下:curve1= polyf
9、it(x_1c_a,y_1c_a,n_x);在這種情況下,使用如下命令不會(huì)警告,使用了數(shù)據(jù)的平均值(mean)和方差(std)進(jìn)行數(shù)據(jù)的縮放。但是要注意縮放后的數(shù)據(jù)擬合的多項(xiàng)式要經(jīng)過(guò)處理才能被原始數(shù)據(jù)使用。curve1,mu= polyfit(x_1c_a,y_1c_a,n_x);這個(gè)問(wèn)題可見(jiàn)論壇的帖子:1.7 符號(hào)計(jì)算工具箱1.7.11.7.21.8 并行計(jì)算工具箱1.8.11.8.21.9 GUI相關(guān)1.9.1 GUI文件名的修改在兩種情況下需要對(duì)已經(jīng)建立的GUI文件名進(jìn)行修改:1. 命名不合適;2. 直接在以前的編寫(xiě)的GUI上改編成其他的程序(里面很多功能不需要更改),但是GUI名需要修
10、改修改的方法(未驗(yàn)證):1. 用Guide打開(kāi)GUI,file-save as,重命名GUI,會(huì)自動(dòng)生成并打開(kāi)新的fig文件和m文件,有關(guān)的callback屬性全部自動(dòng)修改。然后再將子函數(shù)或者子文件copy過(guò)去(2007a及之后可行)。2. 手動(dòng)修改,逐個(gè)修改函數(shù)名1.9.2 在已有的GUI界面上添加新的GUI界面1.10 繪圖高級(jí)繪圖函數(shù):plot,plot3,loglog,semilogx,semilogy,plotyy,zplot(zplot3)底層繪圖函數(shù):line,patch,fill,area1.10.1 畫(huà)圖和畫(huà)圖工具使用GUI工具創(chuàng)建和定義圖形:plot工具箱調(diào)用命令plott
11、ools(GUI界面的編輯圖形工具,方便)包括3個(gè)panel:Figure Palette,Plot Browser,Property Editor(figureàview)1.10.2 數(shù)據(jù)探索工具使用GUI工具交互式提取圖形信息工具包括:Data Cursor,(縮放圖形 zoom in and out),(移動(dòng)圖形),(3D旋轉(zhuǎn))等。1.10.3 圖形注釋注:在MATLAB中,axes是創(chuàng)建坐標(biāo)軸對(duì)象,axis是修改坐標(biāo)軸范圍注釋內(nèi)容包括:text,arrow,colorbar,對(duì)齊,line,legend,rectangle,ellipse等注釋工具包括:GUI和函數(shù)如何使注
12、釋跟隨坐標(biāo)軸動(dòng),使用pin:1.10.3.1 text annotation文本注釋Adding Text Annotations to Graphs文本注釋可以用command(text和gtext函數(shù))命令,也可以用plotedit工具箱。給一個(gè)figure添加文本注釋?zhuān)粌H可以利用text的string,還可以利用title,xlabel,ylabel,zlabel函數(shù)。1.10.4 基礎(chǔ)畫(huà)圖命令1.10.4.1 創(chuàng)建figurea.創(chuàng)建figurefigure創(chuàng)建新的figure并使它為當(dāng)前figurefigure(h)使h對(duì)應(yīng)的figure為當(dāng)前的figureb.一個(gè)figure上創(chuàng)
13、建多個(gè)plotsubplotc.使目標(biāo)axes為當(dāng)前axes方法一:用鼠標(biāo)點(diǎn)擊當(dāng)前目標(biāo)方法二:subplot(m,n,i)命令方法三:subplot(h)命令d.改變figure的配色方案函數(shù)colordefcolordef whitecolordef blackcolordef none1.10.4.2 使用高級(jí)畫(huà)圖函數(shù)plot;plot3;loglog;semilogx;semilogy;plotyy;1.10.4.3 matrix的plot1.10.4.4 繪制虛部和復(fù)數(shù)(imaginary和complex)real part和imaginary part實(shí)部和虛部1.10.4.5 雙Y
14、軸繪圖plotyy1.10.4.6 設(shè)置坐標(biāo)軸特性a.坐標(biāo)軸設(shè)置基本命令axescreates a new axes object with the specified characteristicsaxisSets values that affect the current axes object (the most recently created or the last clicked on).getsetgcab.坐標(biāo)軸范圍和刻度半自動(dòng)范圍:axis(-Inf 5 2 2.5)坐標(biāo)軸刻度標(biāo)記:set(gca,'ytick',2 2.1 2.2 2.3 2.4 2.5)
15、c.如何改變已經(jīng)存在的曲線的特性d.設(shè)置縱橫比axis normal;axis square;axis equal;axis equal tight;1.10.5 創(chuàng)建特殊圖形1.10.5.1 bar and area Graph柱狀圖命令:bar,harh,bar3,bar3h,area1.10.5.2 Pie Chart命令:pie1.10.5.3 Histgram命令:hist,rose1.10.5.4 Discrete Data Graph命令:stem,stem3,stairs1.10.5.5 Direction and Velocity Vector Graph命令:compass
16、(與polar的區(qū)別),feather,quiver,quiver31.10.5.6 Contour Plot命令:contour,contour3,contourf,contourc,meshc,surfc,clabel1.10.5.7 Interactive Plotting命令:ginput,waitforbuttonpress1.10.5.8 Animation制作動(dòng)畫(huà)有三種方式,每種方式適用于不同的情況1:保存圖片序列,并重播(適用于每一幀很復(fù)雜的movie)2:重復(fù)擦除和繪制對(duì)象3:對(duì)對(duì)象的XData,YData,ZData,重新賦值1.10.6 顯示位圖你知道位圖和矢量圖的區(qū)別嗎
17、?(見(jiàn)文檔)1.10.7 打印和輸出圖片1.10.8 圖形對(duì)象句柄1.10.9 figure特性1.10.10 axes特性1.10.11 專(zhuān)題:Graphics1.10.11.1 3-D Visualization1.10.11.2 Creating Graphical User Interfaces1.11 text annotation文本注釋Adding Text Annotations to Graphs文本注釋可以用command(text和gtext函數(shù))命令,也可以用plotedit工具箱。給一個(gè)figure添加文本注釋?zhuān)粌H可以利用text的string,還可以利用title
18、,xlabel,ylabel,zlabel函數(shù)。1.11.11.11.21.11.31.12 What Is Model-Based Design?(基于模型設(shè)計(jì))2 BOOK-MatlabProgramming for Engineers1.1 matlab介紹a) 介紹了matlab的優(yōu)缺點(diǎn)。優(yōu)點(diǎn)無(wú)法盡數(shù),缺點(diǎn)是:matlab為解釋型語(yǔ)言,因此運(yùn)算速度較c,c+等編譯型語(yǔ)言慢;正版matlab價(jià)格很貴b) matlab各個(gè)窗口(workspace,command window,command history,current folder,editor etc)的作用,docking/und
19、ocking windows方式c) 關(guān)于如何set path。方法一:fileàset path。方法二:運(yùn)用built-in函數(shù):userpath、addpath(添加directory to matlab search path),path(display all matlab search path),path2rc(Add current directory to MATLAB search path),rmpath(Remove directory from MATLAB search path),cd(display current directory)。d) 一些重要
20、的指令。clc(清空command window的指令),clear(variables),clf(清楚figure window),help vs lookfor,ctrl+C(終止執(zhí)行,regain control),diary filename,diary off/on1.2 matlab基礎(chǔ)1.2.1 變量和數(shù)組變量和數(shù)組的定義,調(diào)用。matlab數(shù)據(jù)類(lèi)型主要包括double(浮點(diǎn)數(shù)floating number)、char(字符串string)、邏輯值(logical value(true/false)。1.2.2 變量賦值(assign)變量賦值的四種方法(assignment s
21、tatement,shortcut expression,built-in function,keyboard input)1.2.3 多維度數(shù)組多維數(shù)組在內(nèi)存中的存儲(chǔ)順序和多維數(shù)組的調(diào)用(access)1.2.4 子數(shù)組a) end函數(shù)b) 用matrix或者vector給數(shù)組中子數(shù)組的賦值,維數(shù)必須matchc) 用scalar給數(shù)組中子數(shù)組的賦值,不用考慮dimension,子數(shù)組中所有位置的元素等于這個(gè)scalar1.2.5 一些預(yù)定義的數(shù)值some predefined values such as pi,nan,inf,eps,clock,date,nas etc。在數(shù)學(xué)中,復(fù)數(shù)中
22、的虛部一般用i;在工程中,復(fù)數(shù)中的虛部一般用j,因?yàn)橐碗娏鱥區(qū)分。1.2.6 數(shù)據(jù)的顯示a) 不適用分號(hào)(leave the semicolon off the end of a statement)b) 利用fileàpreference或者format command改變數(shù)據(jù)格式c) 利用display/disp函數(shù)(通常結(jié)合num2str或int2str等)d) 利用fprintf函數(shù)(注意:此函數(shù)不能顯示復(fù)數(shù)的虛部)1.2.7 數(shù)據(jù)文件這里只簡(jiǎn)述save和load兩個(gè)函數(shù)。a) save數(shù)據(jù)可以保存為.mat文件(save filename variable),保存了變量名
23、,變量類(lèi)型和數(shù)據(jù),但是僅能在matlab環(huán)境下共享數(shù)據(jù)可以保存為.dat文件(save -ascii filename.dat variable),僅僅保存了數(shù)據(jù),但是可以供其他軟件使用,但是貌似只能將單一的char或者double保存為dat文件,如何是混合兩種數(shù)據(jù)類(lèi)型的cell則不能保存為ASCII碼的dat文件b) loadload .mat文件,可以保存mat文件中的所有信息,包括變量名(注意這里的變量名是之前進(jìn)行命名的)等load除mat文件以外的文件,都將其看作ASCII文件。當(dāng)然也可以通過(guò)load mat filename.dat將其強(qiáng)制以mat打開(kāi),但可能會(huì)報(bào)錯(cuò)。而且將字符串s
24、ave為dat文件再用load打開(kāi)后,文件中是ASCII對(duì)應(yīng)的十進(jìn)制數(shù),使用要注意啊。此外,由于load出來(lái)的變量信息中不包含變量名信息,所以變量名與所load的文件同名。1.2.8 標(biāo)量和數(shù)組運(yùn)算標(biāo)量(scalar)運(yùn)算就用代數(shù)(algebra)知識(shí)就行了數(shù)組的運(yùn)算分為數(shù)組運(yùn)算(點(diǎn)乘element-wise)和矩陣運(yùn)算。矩陣運(yùn)算可以用來(lái)求解linear simultaneous equation。1.2.9 運(yùn)算的優(yōu)先級(jí)Hierarchy of operationThe rules generally follow the normal rules of algebra1.2.10 matl
25、ab內(nèi)建函數(shù)a) 選擇性結(jié)果matlab內(nèi)建函數(shù)的返回值不止一個(gè),看你如何調(diào)用,所以調(diào)用一個(gè)函數(shù)時(shí),可以help一下。b) 內(nèi)建函數(shù)的輸入可以使數(shù)組arrayc) 常用的matlab函數(shù),習(xí)慣使用Browser(matlab是支持復(fù)數(shù)運(yùn)算的,看sqrt和roots的區(qū)別)1.2.11 plot函數(shù)簡(jiǎn)單介紹notice:數(shù)的求解用的element-wisea) plot基本應(yīng)用,包括注釋?zhuān)W(wǎng)格線什么的b) 打印plot(print函數(shù))c) 將plot出的figure window保存為各種格式的圖片d) 在一個(gè)figure里同時(shí)對(duì)多個(gè)函數(shù)作圖e) 線的顏色,線的符號(hào),線的形式,圖例(老版本用數(shù)
26、字表示位置,新位置不看,具體看每個(gè)版本的help)f) 對(duì)數(shù)坐標(biāo)1.2.12 three examples基本的編程習(xí)慣:data dictionary,discription of the script file,comment and the unit。1.2.13 調(diào)試程序a) 語(yǔ)法錯(cuò)誤b) 運(yùn)行時(shí)錯(cuò)誤c) 邏輯錯(cuò)誤編寫(xiě)好的程序的第一步:所有變量初始化,不確定優(yōu)先級(jí)時(shí)利用parentheses來(lái)確定,確認(rèn)built-in函數(shù)的使用1.3 分支語(yǔ)句和程序設(shè)計(jì)1.3.1 自上而下的編程方法簡(jiǎn)介程序設(shè)計(jì)的五個(gè)步驟:a) 明確你所要解決的問(wèn)題b) 定義程序的輸入和輸出c) 設(shè)計(jì)程序的算法d) 把
27、算法轉(zhuǎn)化為matlab語(yǔ)言e) 測(cè)試matlab程序(包括單元測(cè)試,子程序聯(lián)合測(cè)試,完整測(cè)試(分為alpha版本和beta版本)在大編程項(xiàng)目中:1/3的時(shí)間用來(lái)計(jì)劃做什么,如何做;1/6的時(shí)間用來(lái)編程;1/2的時(shí)間用來(lái)測(cè)試。1.3.2 偽代碼的使用偽代碼不就是注釋嘛?1.3.3 邏輯數(shù)據(jù)類(lèi)型邏輯數(shù)據(jù)類(lèi)型(true/false)由兩種運(yùn)算符產(chǎn)生:關(guān)系運(yùn)算符和邏輯運(yùn)算符。邏輯值在內(nèi)存中只占一個(gè)比特位(Byte),而一般的,如double數(shù)據(jù)要占據(jù)8Byte。邏輯數(shù)據(jù)類(lèi)型和數(shù)值可以混合使用,而不報(bào)錯(cuò)。在應(yīng)該使用數(shù)值的語(yǔ)句中如果使用了邏輯數(shù)據(jù)類(lèi)型true/false,true/false會(huì)作為1/0來(lái)
28、使用;同樣,在應(yīng)該使用邏輯數(shù)據(jù)類(lèi)型的語(yǔ)句中如果使用了數(shù)值,非零數(shù)值會(huì)作為true來(lái)使用,0會(huì)作為false來(lái)使用。注意:real函數(shù)將邏輯數(shù)據(jù)轉(zhuǎn)化為數(shù)值;logical函數(shù)將數(shù)值轉(zhuǎn)化為邏輯數(shù)據(jù)。邏輯運(yùn)算的結(jié)果在command window里顯示的是0/1,但是在workspace里可以看到是logical value。1.3.3.1 關(guān)系運(yùn)算符關(guān)系運(yùn)算符可用來(lái)比較數(shù)值或者字符串。比較數(shù)組時(shí),可以是大小相等的兩個(gè)數(shù)組或者其中一個(gè)是scalar比較字符串時(shí),兩個(gè)字符串的長(zhǎng)度要相等a) 關(guān)系運(yùn)算符=和=運(yùn)用時(shí)的注意點(diǎn)舍入誤差(roundoff error)pi是無(wú)理數(shù),所以理論上sin(pi)=0所
29、以判斷數(shù)值的相等時(shí),用abs(a-b)<=eps(nearly equal)1.3.3.2 邏輯運(yùn)算符邏輯運(yùn)算符可用來(lái)比較一個(gè)或者兩個(gè)邏輯操作對(duì)象。邏輯與運(yùn)算(&和&&)&可以比較數(shù)組和標(biāo)量,且計(jì)算兩個(gè)operand后才給出比較結(jié)果;&&只可以進(jìn)行邏輯位運(yùn)算(matlab實(shí)數(shù)進(jìn)行邏輯運(yùn)算時(shí),非零實(shí)數(shù)看作true/1,零看作false/0),如果第一個(gè)operand為false,則不需執(zhí)行第二個(gè)operand,可以減小程序運(yùn)行時(shí)間;邏輯或運(yùn)算(|和|)區(qū)別同邏輯與運(yùn)算;邏輯運(yùn)算符也可以用來(lái)比較實(shí)數(shù)matlab實(shí)數(shù)進(jìn)行邏輯運(yùn)算時(shí),非零實(shí)數(shù)看作t
30、rue/1,零看作false/0;邏輯運(yùn)算不支持復(fù)數(shù)或虛數(shù)運(yùn)算的優(yōu)先級(jí)邏輯運(yùn)算的優(yōu)先級(jí)比較低的,見(jiàn)表格。還是用parentheses比較好啊a) 邏輯函數(shù)isnan ischar isempty isinf isnumeric logical1.3.4 分支語(yǔ)句if結(jié)構(gòu) switch結(jié)構(gòu) try/catch結(jié)構(gòu)1.3.4.1 if結(jié)構(gòu)1.3.4.2 if結(jié)構(gòu)舉例1.3.4.3 使用if結(jié)構(gòu)的注意點(diǎn)如果有許多mutually exclusive options,使用if+elseif結(jié)構(gòu)優(yōu)于nested(嵌套)if construct。1.3.4.4 switch結(jié)構(gòu)結(jié)構(gòu)switchcase c
31、ase_exp1,case_exp2,case_exp3 otherwise(這是可選的)end1.3.4.5 try/catch結(jié)構(gòu)1.3.5 plot函數(shù)upgradea) 坐標(biāo)軸的控制axisb) 使用hold on命令在同一窗口畫(huà)圖c) 創(chuàng)建多個(gè)畫(huà)圖窗口。使用figure(n)或者鼠標(biāo)來(lái)激活當(dāng)前工作窗口。使用gcf來(lái)返回當(dāng)前窗口的編號(hào)d) 子圖像subplote) 畫(huà)線的增強(qiáng)控制除了1.2.11的線的顏色,線的符號(hào),線的形式設(shè)置之外:LineWidth:線寬MarkerEdgeColor:線符號(hào)的邊緣顏色MarkerFaceColor:線符號(hào)的填充顏色MarkerSize:線符號(hào)的大小
32、f) 文本字符串(text)的增強(qiáng)控制除了1.2.11的title,axis lables之外:可以設(shè)置加粗,斜體,字體,字體大小等,輸入GREEK letter,數(shù)學(xué)符號(hào),和其他轉(zhuǎn)義字符(escape sequence)g) 極坐標(biāo)圖像(polar)polar(theta,r)h) 使用matlab注釋工具annotation和保存圖像matlab可以使用工具欄的和改變線的顏色,粗細(xì),線型,線的標(biāo)記符號(hào)和添加箭頭文本等等。也可以使用quiver/quiver3添加箭頭。注:quiver是用來(lái)畫(huà)特定點(diǎn)的速度矢量圖也可以使用text(x,y,leftarrow或者uparrow)等添加箭頭。1.
33、3.6 調(diào)試程序方法upgrade1.4 循環(huán)(for和while)1.4.1 while1.4.2 for1.4.3 邏輯數(shù)組和向量化1.4.4 Matlab Profile效能評(píng)測(cè)器1.4.5 附加例子1.5 用戶自定義函數(shù)1.5.1 matlab函數(shù)介紹1.5.2 matlab變量傳遞機(jī)制:pass-by-value scheme1.5.3 選擇性參數(shù)nargin這個(gè)函數(shù)返回調(diào)用這個(gè)函數(shù)時(shí)所需要的實(shí)際輸入?yún)?shù)的個(gè)數(shù)nargout這個(gè)函數(shù)返回調(diào)用這個(gè)函數(shù)時(shí)所需要的實(shí)際輸出參數(shù)的個(gè)數(shù)nargchk如要一個(gè)函數(shù)調(diào)用被調(diào)用時(shí)參數(shù)過(guò)多或過(guò)少,那么nargchk 函數(shù)將返回一個(gè)標(biāo)準(zhǔn)錯(cuò)誤信息error
34、顯示錯(cuò)誤信息,并中止函數(shù)以免它產(chǎn)生這個(gè)錯(cuò)誤。如果參數(shù)錯(cuò)誤是致命的,這個(gè)函數(shù)將會(huì)被調(diào)用。warning顯示警告信息并繼續(xù)執(zhí)行函數(shù),如果參數(shù)錯(cuò)誤不是致命的,執(zhí)行還能繼續(xù),則這個(gè)將會(huì)被調(diào)用。inputname這個(gè)函數(shù)將會(huì)返回對(duì)于特定參數(shù)個(gè)數(shù)的實(shí)際變量名。1.5.4 使用全局變量共享數(shù)據(jù)global注意:rand和randn1.5.5 使用Persistent memory保存自定義函數(shù)變量1.5.6 函數(shù)的函數(shù)1.5.7 子函數(shù),私有函數(shù)和內(nèi)嵌函數(shù)1.5.7.1 子函數(shù)(Subfunction)1.5.7.2 私有函數(shù)(Private function)1.5.7.3 內(nèi)嵌函數(shù)(Nested fun
35、ction)Matlab7.0及之后的版本中,用到內(nèi)嵌函數(shù)時(shí)一定要與end配對(duì)使用1.6 附加數(shù)據(jù)類(lèi)型和畫(huà)圖命令1.6.1 復(fù)數(shù)數(shù)據(jù)1.6.1.1 復(fù)數(shù)變量的表示1.6.1.2 對(duì)復(fù)數(shù)進(jìn)行關(guān)系運(yùn)算操作1.6.1.3 支持復(fù)數(shù)運(yùn)算的函數(shù)a) 數(shù)據(jù)類(lèi)型的轉(zhuǎn)換。可以將復(fù)數(shù)去除虛部,實(shí)部存為doubleb) 絕對(duì)值函數(shù)(abs)和相位函數(shù)(angle)1.6.1.4 對(duì)復(fù)數(shù)數(shù)據(jù)進(jìn)行畫(huà)圖a) 實(shí)部和虛部分別畫(huà)圖b) 幅值和相位分別畫(huà)圖1.6.2 字符串函數(shù)1.6.2.1 字符串轉(zhuǎn)化函數(shù)(char和double)1.6.2.2 二維字符串?dāng)?shù)組的創(chuàng)建(char)1.6.2.3 字符串的連接(strcat和s
36、trvcat)1.6.2.4 字符串的比較a) 比較兩個(gè)字符串,看是否相等(strcmp、strcmpi、strncmp、strncmpi)b) 判斷單個(gè)字符是否相等(用關(guān)系運(yùn)算符=、=、>等等)c) 判斷單個(gè)字符是不是字符,是大寫(xiě)還是小寫(xiě),是不是數(shù)字等等(isletter、isspace、isstrprop)1.6.2.5 在一個(gè)字符串中查找/替換字符findstr、strmatch、strrep、strtok 1.6.2.6 字符串的大小寫(xiě)轉(zhuǎn)換(upper和lower)1.6.2.7 刪除字符串中的whitespace使用strtrim注意:deblank刪除的是字符串后面的空格st
37、rtrim刪除的是字符串前面和后面的空格whitespace包括:“any character that separates tokens in MATLAB: a space,a tab, a linefeed, carriage return, etc.”1.6.2.8 數(shù)字轉(zhuǎn)換為字符串int2str、num2str、mat2str、sprintf等,還包括各種數(shù)據(jù)的轉(zhuǎn)換如dec2hex,dec2bin等1.6.2.9 字符串轉(zhuǎn)換為數(shù)字eval,str2double和sscanf.1.6.3 多維數(shù)組創(chuàng)建和調(diào)用1.6.4 附加復(fù)數(shù)類(lèi)型(單精度single和整數(shù)integer)雖然他們可以節(jié)
38、省存儲(chǔ)空間,但是一般不用。但是matlab是在7.0版本之后才開(kāi)始支持這種數(shù)據(jù)的,并且很不完善,所以除了特別用途,如圖像處理,一般不用這種類(lèi)型的數(shù)據(jù)。1.6.5 附加二維畫(huà)圖命令a) stem plot(針頭圖),stair plot(階梯圖),bar plot(條形圖),pie plot(餅圖)和compass plot(羅盤(pán)圖)其中餅圖還可以通過(guò)pie(data,explode)指定某塊略微獨(dú)立于整個(gè)餅圖b) 函數(shù)畫(huà)圖利用ezplot和fplot就可以只用函數(shù)就能畫(huà)圖。一般用fplot,更豐富。c) 柱狀圖(hist)柱狀圖是用來(lái)顯示一系列數(shù)值的分布。1.6.6 三維畫(huà)圖a) plot3:
39、用于兩個(gè)應(yīng)變量,一個(gè)自變量b) surface、mesh、contour:用于一個(gè)應(yīng)變量,兩個(gè)自變量1.7 稀疏矩陣,元胞數(shù)組,結(jié)構(gòu),函數(shù)句柄1.7.1 稀疏矩陣稀疏矩陣的特性稀疏矩陣的產(chǎn)生稀疏矩陣的操作1.7.2 元胞數(shù)組cell1.7.2.1 創(chuàng)建元胞數(shù)組a) 使用賦值語(yǔ)句b) 使用cell函數(shù)進(jìn)行預(yù)分配1.7.2.2 使用大括號(hào)直接創(chuàng)建元胞結(jié)構(gòu)1.7.2.3 查看元胞數(shù)組變量celldisp顯示數(shù)據(jù)cellplot圖形顯示1.7.2.4 擴(kuò)展元胞數(shù)組預(yù)分配元胞數(shù)組的大小可以節(jié)省運(yùn)算時(shí)間1.7.2.5 刪除元胞數(shù)組的元素1.7.2.6 使用元胞數(shù)組的數(shù)據(jù)1.7.2.7 字符串元胞數(shù)組cel
40、lstr可以把二維字符串?dāng)?shù)組變?yōu)樽址麛?shù)組char可以把字符串元胞數(shù)組變?yōu)槎S字符串?dāng)?shù)組1.7.2.8 元胞數(shù)組的重要性varargin和varargout的應(yīng)用varargin將輸入?yún)?shù)保存為cellvarargout將輸出參數(shù)保存為cell1.7.3 結(jié)構(gòu)數(shù)組結(jié)構(gòu)數(shù)組里每一個(gè)元素都有自己的名字,而不是用下標(biāo)來(lái)表示。這個(gè)元素成為field(域)從大到小分別為structureunitfield1.7.3.1 結(jié)構(gòu)數(shù)組的創(chuàng)建a) 使用賦值語(yǔ)句b) 使用struct函數(shù)進(jìn)行預(yù)分配1.7.3.2 在結(jié)構(gòu)數(shù)組中添加field使用賦值語(yǔ)句1.7.3.3 從結(jié)構(gòu)數(shù)組中刪除field使用rmfield
41、1.7.3.4 結(jié)構(gòu)數(shù)組中數(shù)據(jù)的調(diào)用1.7.3.5 getfield和setfield函數(shù)使用getfield和setfield函數(shù)來(lái)獲取和設(shè)置結(jié)構(gòu)數(shù)組中的field1.7.3.6 動(dòng)態(tài)field名1.7.3.7 對(duì)結(jié)構(gòu)數(shù)組使用size函數(shù)1.7.3.8 內(nèi)嵌結(jié)構(gòu)數(shù)組1.7.4 函數(shù)句柄1.7.4.1 函數(shù)句柄的創(chuàng)建和使用使用使用str2func函數(shù)句柄的畫(huà)圖plotfunc1.7.4.2 函數(shù)句柄的重要性1.7.4.3 函數(shù)句柄和內(nèi)嵌函數(shù)1.7.4.4 舉例:常微分方程求解1.8 輸入輸出函數(shù)1.8.1 textread函數(shù)textread可以用來(lái)讀取dat、txt等ASCII files文
42、件中所需要的不同類(lèi)型的數(shù)據(jù)(load只可以讀取一種類(lèi)型的數(shù)據(jù))。注意:好像textread不能用來(lái)讀取xls文件1.8.2 更多關(guān)于save和load進(jìn)一步說(shuō)明a) save filename content options:保存workspace中的所有變量或者選擇變量。b) whos -file test_matfile.mat:在不load文件mat前,查看mat文件中的變量。c) load filename options content:把mat文件中所有或者部分變量導(dǎo)入到workspace中。一般如果都在matlab環(huán)境里使用數(shù)據(jù),保存為mat格式就行了,這樣包含了所有的信息,其他
43、的格式多少會(huì)丟失一部分?jǐn)?shù)據(jù)。變量的存儲(chǔ)有很多格式,詳細(xì)要查看options的設(shè)置。1.8.3 Matlab文件過(guò)程簡(jiǎn)介Matlab的文件讀取機(jī)制叫做文件標(biāo)識(shí)file id。1.8.4 文件的打開(kāi)和關(guān)閉(fopen和fclose)text文件要加tbinary文件要加b1.8.5 二進(jìn)制I/O函數(shù)(fwrite和fread)fwrite是按列寫(xiě)入的?fread讀取的時(shí)候要設(shè)定幾行幾列,否則默認(rèn)的是按列讀取的1.8.6 格式化I/O函數(shù)(fprintf和fscanf)1.8.6.1 fprintf函數(shù)1.8.6.2 格式指定轉(zhuǎn)換符的理解%d %f %c等等之類(lèi)。1.8.6.3 格式字符串的使用從左
44、至右,字符串格式與輸出變量一一對(duì)應(yīng)。1.8.6.4 sprintf函數(shù)與fprintf函數(shù)類(lèi)似,但是sprintf函數(shù)用于將指定格式的數(shù)據(jù)按照字符串輸出至Matlab指定的變量,不在command window中顯示。1.8.6.5 fscanf函數(shù)fscanf讀取的時(shí)候要除了要設(shè)定字符串格式,還要設(shè)定幾行幾列,否則默認(rèn)的是按列或行讀取的,各種情況不一樣,傻傻分不清1.8.6.6 fgetl函數(shù)沒(méi)用過(guò)1.8.6.7 fgets函數(shù)沒(méi)用過(guò)1.8.7 格式化和二進(jìn)制I/O函數(shù)的比較格式化文件無(wú)格式化文件(Binary)1.8.8 文件位置和狀態(tài)函數(shù)exist函數(shù)(好像在這一系列中最有用):判斷一個(gè)
45、文件或變量等是否已經(jīng)存在以確定是否覆蓋ferror函數(shù):顯示對(duì)應(yīng)的fid指針的文件的錯(cuò)誤信息feof函數(shù):判斷對(duì)應(yīng)的fid指針對(duì)應(yīng)的文件是否為最后一個(gè)文件ftell函數(shù):顯示當(dāng)前文件的位置frewind函數(shù):把fid對(duì)應(yīng)的文件的fid指針排列到最前面fseek函數(shù):可以任意設(shè)置文件的位置fid問(wèn):文件指針和fid是一個(gè)東西嗎?1.8.9 textscan函數(shù)與textread函數(shù)類(lèi)似,但是更加強(qiáng)大,可以規(guī)定每一列的格式,只有一個(gè)返回量,元胞數(shù)組cell。excel也是可以的。textscan可以讀取任意file fid的文件,而fid可以用fseek改變。1.8.10 uiimport函數(shù)GU
46、I界面的數(shù)據(jù)導(dǎo)入,不用自己編寫(xiě)啦1.8.11 總結(jié)回顧:第八章主要介紹了文件I/O操作,以便在matlab環(huán)境或者matlab環(huán)境之外的數(shù)據(jù)共享。a) textread和textscan函數(shù):都是為了從用其它語(yǔ)言或者表格里讀取ASCII數(shù)據(jù),textscan比textread運(yùn)行更快,更靈活,所以textscan首選。b) load和save調(diào)用和存取的mat文件保存變量的信息最多,可移植性最強(qiáng),所以一般不需要與matlab之外環(huán)境進(jìn)行數(shù)據(jù)交換時(shí),數(shù)據(jù)I/O以load和save為首選。c) Matlab有兩種I/O命令:二進(jìn)制和格式化。各有優(yōu)劣。d) 文件的打開(kāi)和關(guān)閉用fopen和fclose
47、函數(shù);二進(jìn)制文件的讀取用fwrite和fread函數(shù);格式化文件的讀取用fprinf和fscanf函數(shù);將文件讀取為字符串用fgetl和fgets函數(shù)。e) exist,ferror,feof,ftell,frewind,fseek函數(shù)。1.8.11.1 好的編程習(xí)慣總結(jié)a) 除非我們必須與非MATLAB 程序進(jìn)行數(shù)據(jù)交換,存儲(chǔ)和加載文件時(shí),都應(yīng)用mat 文件格式。這種格式是高效的且移植性強(qiáng),它保存了所有MATLAB 數(shù)據(jù)類(lèi)型的細(xì)節(jié)。b) 在使用fopen語(yǔ)句時(shí),一定要注意指定合適的權(quán)限,這取決于你是要讀取數(shù)據(jù),還是要寫(xiě)入數(shù)據(jù)。好的編程習(xí)慣可以幫助你避免(類(lèi)似于覆蓋的)錯(cuò)誤。c) 在文件打開(kāi)操
48、作后檢查它的狀態(tài)以確保它被成功打開(kāi)。如果文件打開(kāi)失敗,提示用戶解決方法。d) 對(duì)于那些必須進(jìn)行人工檢查的數(shù)據(jù),或?qū)τ谀切┍仨氃诓煌挠?jì)算機(jī)上運(yùn)行的數(shù)據(jù),用格式化文件創(chuàng)建數(shù)據(jù)。對(duì)于那些不需要進(jìn)行人工檢查的數(shù)據(jù)且在相同類(lèi)型的計(jì)算機(jī)創(chuàng)建并運(yùn)行的數(shù)據(jù),用無(wú)格式文件創(chuàng)建數(shù)據(jù),當(dāng)I/O 速度緩慢時(shí),用格式化文件創(chuàng)建數(shù)組。e) 未經(jīng)用戶同意,不要用新數(shù)據(jù)覆蓋原用的文件。1.8.11.2 第八章的5個(gè)Examplea) Example.1讀取二進(jìn)制數(shù)據(jù)(Writing and Reading Binary Data)b) Example.2產(chǎn)生信息表格(Generating Table of Informat
49、ion)c) Example.3格式化和二進(jìn)制I/O的比較(Comparing Formatted and Binary I/O)d) Example.4打開(kāi)一個(gè)輸出文件(Opening an Output File)e) Example.5用一組帶有噪聲的測(cè)量值擬合一條直線(Fitting a Line to a Set of Noisy Measurements)1.9 圖形句柄(只使用axes,line,text等不需人機(jī)交互的屬性)句柄圖形(Handle graphics)是用來(lái)控制matlab圖形對(duì)象(Graphics Object)屬性的底層圖形函數(shù)的集合。它們可以:a) 方便程序
50、員靈活控制已創(chuàng)建的plots和graphs;b) 為程序創(chuàng)建圖形用戶界面(GUI)。1.9.1 Matlab圖形系統(tǒng)Matlab是以圖形對(duì)象的等級(jí)系統(tǒng)(hierarchical system of graphics objects)為基礎(chǔ),每一個(gè)圖形對(duì)象都有一個(gè)唯一的編號(hào),叫handle。每一個(gè)圖形對(duì)象(包括line,figure,axes,text string等)都有自己的屬性。所有的圖形對(duì)象都是按照父對(duì)象和子對(duì)象的等級(jí)系統(tǒng)組織起來(lái)的。子對(duì)象可以繼承父對(duì)象的大多數(shù)屬性。Matlab的最高層圖形對(duì)象叫做root,可以看作電腦的整個(gè)屏幕,root的handle是0,root可以用來(lái)控制屏幕?(
51、不懂)root下面有很多的figures,每個(gè)figure都有balabalabala等圖形對(duì)象。在第八章里,只講述figure里部分不需要交互的屬性,如line,axes等。1.9.2 對(duì)象句柄對(duì)象的句柄可以通過(guò)(一般情況下為了便于區(qū)分,句柄都以h開(kāi)頭):handle=figure;(生成figure并將句柄賦值給handle)handle=gcf;(獲取當(dāng)前figure句柄)handle=gca;(獲取當(dāng)前axes句柄)handle=gco;(獲取當(dāng)前object句柄)1.9.3 對(duì)象屬性的檢測(cè)與修改每個(gè)對(duì)象都有很多屬性,每個(gè)屬性都有屬性名和相應(yīng)的屬性值。屬性名是字符串,屬性值可以是數(shù)值,
52、也可以是字符串。在這里,屬性名是不區(qū)分大小寫(xiě)的。1.9.3.1 在創(chuàng)建對(duì)象時(shí)改變對(duì)象屬性(對(duì)象創(chuàng)建函數(shù)包括:figure,axes,line和plot)配對(duì)使用(屬性名,屬性值)1.9.3.2 在創(chuàng)建對(duì)象后利用語(yǔ)句statement改變對(duì)象屬性使用get,set函數(shù)1.9.3.3 在創(chuàng)建對(duì)象后利用GUI屬性編輯器(property editor)改變對(duì)象屬性a) 利用figure上的b) 在command window里鍵入propedit(HandleList);c) 在command window里鍵入propedit;1.9.4 使用set函數(shù)列出所有可能的屬性xxx=set(hndl)
53、返回當(dāng)前對(duì)象的所有屬性,并以結(jié)構(gòu)數(shù)組的形式存入xxx;xxx=set(hndl,LineStyle)返回當(dāng)前對(duì)象的LineStyle屬性,存入xxx;1.9.5 用戶自定義數(shù)據(jù)創(chuàng)建對(duì)象的自定義屬性setappdata()getappdata()isappdata()rmappdata()1.9.6 查找對(duì)象a) 對(duì)于已經(jīng)創(chuàng)建并且知道handle的對(duì)象,可以使用get和set來(lái)改變對(duì)象屬性;b) 對(duì)于已經(jīng)創(chuàng)建但是由于某種原因未知handle的對(duì)象,可以利用gcf,gca,gco和findobj來(lái)重新獲取handle。(注意:使用findobj時(shí),都是從root開(kāi)始從上往下搜索,所以很費(fèi)時(shí)。要限制
54、搜索范圍噠)1.9.7 用鼠標(biāo)選擇對(duì)象Matlab根據(jù)stacking order選擇對(duì)象本節(jié)重要的函數(shù)waitforbuttonpress1.9.8 位置和單位1.9.8.1 figure對(duì)象的位置利用left bottom width height向量,分別是相對(duì)于計(jì)算機(jī)屏幕左下角的。注意Units的單位是inches | centimeters | normalized | points | pixels | characters 中的哪一個(gè),建議使用normalized(歸一化值)1.9.8.2 axes和uicontrol對(duì)象的位置使用同figure的位置,但是axes和uicont
55、rol是相對(duì)于他們所在figure的左下角的。同樣要注意單位。1.9.8.3 text對(duì)象的位置text對(duì)象的位置是由x y或者x y z確定的,text對(duì)象是相對(duì)于相應(yīng)的axes的坐標(biāo)原點(diǎn)的。同樣要注意單位(用的是坐標(biāo)軸的單位)。1.9.9 打印設(shè)置設(shè)置紙張,單位之類(lèi)的。1.9.10 Default和Factory屬性可以用用來(lái)操作父對(duì)象的屬性,使得他的子對(duì)象都有相似的屬性,這是為了方便使用來(lái)的屬性,暫時(shí)應(yīng)該用不到。1.9.11 圖形對(duì)象屬性本書(shū)無(wú)法羅列,利用matlab的help查看更多圖形對(duì)象和相關(guān)屬性。1.9.12 總結(jié)axes;figure;findobj;gca;gcf;gco;get;getappdata;isappdata;rmappdata;set;setappdata;wai
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 物業(yè)部年終總結(jié)
- 護(hù)士心得體會(huì)范文大全(15篇)
- 物流安全生產(chǎn)責(zé)任書(shū)
- 高考地理二輪復(fù)習(xí)考前搶分專(zhuān)題識(shí)圖技能專(zhuān)練圖像四統(tǒng)計(jì)圖表含答案
- 新教材高考地理二輪復(fù)習(xí)三10個(gè)長(zhǎng)效熱點(diǎn)綜合專(zhuān)項(xiàng)訓(xùn)練熱點(diǎn)10生活情境中的地理含答案
- 天津市河西區(qū)2024-2025學(xué)年高二上學(xué)期期中質(zhì)量調(diào)查英語(yǔ)試卷(無(wú)答案)
- 2024年下學(xué)期城南區(qū)八年級(jí)地理期中試卷
- 歐姆定律(一)基礎(chǔ)強(qiáng)化(強(qiáng)化訓(xùn)練)(解析版)-2022年中考物理一輪復(fù)習(xí)講義+強(qiáng)化訓(xùn)練
- 音樂(lè)常識(shí)知識(shí)考試題及答案
- 上海地區(qū)高考語(yǔ)文五年高考真題匯編-古詩(shī)詞賞析
- 2014cad入門(mén)基礎(chǔ)課件
- 家鄉(xiāng)亳州介紹
- 冬小麥備播與播種技術(shù)
- lu《雨巷》 (共45張)課件
- 我的家鄉(xiāng)當(dāng)涂介紹課件
- 低視力學(xué)課件
- 《醫(yī)學(xué)倫理學(xué)》課程教案
- 人教版八年級(jí)數(shù)學(xué)下冊(cè)單元測(cè)試題全套(含答案)
- 2022-2023學(xué)年高中政治統(tǒng)編版必修一:第四課 只有堅(jiān)持和發(fā)展中國(guó)特色社會(huì)主義才能實(shí)現(xiàn)中華民族偉大復(fù)興 課件(22張)
- 各種樣式聘書(shū)模板范本
- H3C ONEStor存儲(chǔ)技術(shù)白皮書(shū)
評(píng)論
0/150
提交評(píng)論