




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
MATLAB應用
第一講MATLAB語言概述
一、MATLAB語言的發(fā)展
matlab語言是由美國的CleveMoler博士于20世紀70年代后期開發(fā)的。設計者的初衷是為解決“線性代數”課程的矩陣運算問題。取名MATLAB即
MatrixLaboratory
矩陣實驗室的意思。
20世紀七十年代后期,時任美國新墨西哥大學計算機科學系主任的CleveMoler教授出于減輕學生編程負擔的動機,為學生設計了一組調用LINPACK(解線性代數方程)和EISPACK(解特征值問題)庫程序的“通俗易用”的接口,此即用FORTRAN編寫的萌芽狀態(tài)的MATLAB。
經幾年的校際流傳,在斯坦福大學JohnLittle的推動下,由Little、Moler、SteveBangert合作,于1984年成立了MathWorks公司,并把MATLAB正式推向市場。從這時起,MATLAB的內核采用C語言編寫,而且除原有的數值計算能力外,還新增了數據圖形顯示功能。 MATLAB以商品形式出現后,僅短短幾年,就以其良好的開放性和運行的可靠性,使原先控制領域里的封閉式軟件包(如英國的UMIST,瑞典的LUND和SIMNON,德國的KEDDC)紛紛淘汰,而改以MATLAB為平臺加以重建。在時間進入20世紀九十年代的時候,MATLAB已經成為國際控制界公認的標準計算軟件。
到九十年代初期,在國際上30多個數學類科技應用軟件中,MATLAB在數值計算方面獨占鰲頭,而Mathematica和Maple則分居符號計算軟件的前兩名。MathWorks公司于1993年推出了基于Windows平臺的MATLAB4.0。4.x版在繼承和發(fā)展其原有的數值計算和圖形可視能力的同時,出現了以下幾個重要變化:(1)推出了SIMULINK,一個交互式操作的動態(tài)系統建模、仿真、分析集成環(huán)境。(2)推出了符號計算工具包。一個以Maple為“引擎”的SymbolicMathToolbox1.0。此舉結束了國際上數值計算、符號計算孰優(yōu)孰劣的長期爭論,促成了兩種計算的互補發(fā)展新時代。(3)構作了Notebook。MathWorks公司瞄準應用范圍最廣的Word,運用DDE和OLE,實現了MATLAB與Word的無縫連接,從而為專業(yè)科技工作者創(chuàng)造了融科學計算、圖形可視、文字處理于一體的高水準環(huán)境。從1997年春的5.0版起,后歷經5.1、5.2、5.3、6.0、6.1等多個版本的不斷改進,MATLAB“面向對象”的特點愈加突出,數據類型愈加豐富,操作界面愈加友善。2002年初夏所推6.5版的最大特點是:該版本采用了JIT加速器,從而使MATLAB朝運算速度與C程序相比肩的方向前進了一大步。
用Matlab編寫程序猶如在演算紙上排列出公式與求解問題,所以又被稱為演算紙式科學算法語言用戶只需簡單地列出數學表達式,其結果便以數值或圖形方式顯示出來。MATLAB是一種的高級語言直譯式,比其它程序設計語言容易。MATLAB語言與其它語言的關系仿佛和C語言與匯編語言的關系一樣計算機語言的發(fā)展數值運算解析運算管理、可視化智能化標志著計算機語言向“智能化”方向發(fā)展,被稱為第四代編程語言。MATLAB已經不僅僅是一個“矩陣實驗室”了,它集科學計算、圖象處理;聲音處理于一身,并提供了豐富的Windows圖形界面設計方法。MATLAB語言是功能強大的計算機高級語言,它以超群的風格與性能風靡全世界,成功地應用于各工程學科的研究領域。MATLAB在美國已經作為大學工科學生必修的計算機語言之一(FORTRAN,C,MATLAB)近年來,MATLAB語言已在我國推廣使用,現在已應用于各學科研究部門和許多高等院校MATLAB語言不受計算機硬件的影響二、matlab能在各領域做什么工業(yè)研究與開發(fā)數學教學,特別是線性代數數值分析和科學計算方面的教學與研究電子學、控制理論和物理學等工程和科學學科方面的教學與研究經濟學、化學和生物學等計算問題的所有其他領域中的教學與研究例用一個簡單命令求解線性系統
3x1+x2-x3=3.6x1+2x2+4x3=2.1-x1+4x2+5x3=-1.4A=[31-1;124;-145];b=[3.6;2.1;-1.4];x=A\bx=1.4818-0.4606e0.3848對于線性系統有Ax=blinex例用簡短命令計算并繪制在0x6范圍內的sin(2x)、sinx2、sin2x。x=linspace(0,6)y1=sin(2*x),y2=sin(x.^2),y3=(sin(x)).^2;plot(x,y1,x,y2,x,y3)plot3sinx用四種方法描述cos(x)*sin(y)圖形三、MATLAB語言的特點與功能
MATLAB自問世以來,就是以數值計算稱雄。MATLAB進行數值計算的基本單位是復數數組(或稱陣列)。由于它不需定義數組的維數,并給出矩陣函數、特殊矩陣專門的庫函數,使之在求解諸如信號處理、建模、系統識別、控制、優(yōu)化等領域的問題時,顯得大為簡捷、高效、方便,這是其它高級語言所不能比擬的。MATLAB語言的特點:
語言簡潔緊湊,語法限制不嚴,程序設計自由度大,可移植性好DEC/UNIXVMSHP/HP-UXIBM-PC/WINDOWSOS2IBMRS/AIXPC/LINUXSGI/IRIXSUN/OSSOLARIS可互相移植
運算符、庫函數豐富圖形功能強大
exmov.m
界面友好、編程效率高擴展性強MATLAB語言的特點
語言簡潔緊湊,語法限制不嚴,程序設計自由度大,可移植性好MATLAB語言的功能:強大的數值(矩陣)運算功能廣泛的符號運算功能高級與低級兼?zhèn)涞膱D形功能(計算結果的可視化功能)可靠的容錯功能應用靈活的兼容與接口功能信息量豐富的聯機檢索功能1.矩陣運算功能MATLAB提供了豐富的矩陣運算處理功能,是基于矩陣運算的處理工具。變量
矩陣,運算
矩陣的運算例如C=A+B,A,B,C都是矩陣,是矩陣的加運算即使一個常數,Y=5,MATLAB也看做是一個1
1的矩陣
abplus2.符號運算功能符號運算即用字符串進行數學分析允許變量不賦值而參與運算用于解代數方程、微積分、復合導數、積分、二重積分、有理函數、微分方程、泰勒級數展開、尋優(yōu)等3.豐富的繪圖功能與計算結果的可視化具有高層繪圖功能——二維、三維繪圖具有底層繪圖功能——句柄繪圖使用plot函數可隨時將計算結果可視化階梯圖4.圖形化程序編制功能動態(tài)系統進行建模、仿真和分析的軟件包用結構圖編程,而不用程序編程只需拖幾個方塊、連幾條線,即可實現編程功能5.豐富的MATLAB工具箱MATLAB主工具箱符號數學工具箱SIMULINK仿真工具箱控制系統工具箱信號處理工具箱圖象處理工具箱通訊工具箱系統辨識工具箱神經元網絡工具箱金融工具箱許多學科,在MATLAB中都有專用工具箱,現已有30多個工具箱,但MATLAB語言的擴展開發(fā)還遠遠沒有結束,各學科的相互促進,將使得MATLAB更加強大6.MATLAB的兼容功能可與C語言、FORTRAN語言跨平臺兼容用函數CMEX、FMEX實現此功能不推薦使用7.MATLAB的容錯功能非法操作時,給出提示,并不影響其操作1/0Warning:Dividebyzeroans=Inf8.MATLAB的開放式可擴充結構
matlab所有函數都是開放的用戶可按自己意愿隨意更改正因為此功能,使得matlab的應用越來越廣泛9.強大的聯機檢索幫助系統可隨時檢索matlab函數可隨時查詢matlab函數的使用方法
經過近20年實踐,人們已經意識到:MATLAB作為計算工具和科技資源,可以擴大科學研究的范圍、提高工程生產的效率、縮短開發(fā)周期、加快探索步伐、激發(fā)創(chuàng)造活力。
語言簡潔緊湊,語法限制不嚴,程序設計自由度大,可移植性好運算符、庫函數豐富圖形功能強大界面友好、編程效率高擴展性強MATLAB語言的特點
MATLAB語言的功能強大的數值(矩陣)運算功能廣泛的符號運算功能高級與低級兼?zhèn)涞膱D形功能(計算結果的可視化功能)可靠的容錯功能應用靈活的兼容與接口功能信息量豐富的聯機檢索功能四、MATLAB安裝、啟動與界面InstallationCommandsOnUNIXsystems:install
OnPCs:setup.exeOnMac:InstallForMacOSX
NoteforMac:IfinstallingfromdownloadsandnotfromtheDVD,downloadallproductfilestothematlab_installerfolderbeforelaunchingInstallForMacOSX.打開介質安裝雙擊安裝注意注意啟動MATLAB開機執(zhí)行程序
"C:\ProgramFiles\MATLAB\R2010a\bin\matlab.exe"用鼠標雙擊桌面的matlab圖標)即可打開matlab命令平臺工作窗出現以后,即可進行各種操作待機狀態(tài)操作桌面的缺省外貌
MATLAB會將運算結果直接存入一變數ans,代表MATLAB運算后的答案,并顯示其數值屏幕上。如果在結尾加上”;”,則計算結果不會顯示在指令視窗上,要得知計算值只須鍵入該變數值即可。
MATLAB利用了↑↓二個游標鍵可以將所下過的指令叫回來重復使用。按下↑則前一次指令重新出現,之后再按Enter鍵,即再執(zhí)行前一次的指令。而↓鍵的功用則是往后執(zhí)行指令。其它在鍵盤上的幾個鍵如→←,Delete,Insert,其功能則顯而易見,試用即知。當要暫時執(zhí)行作業(yè)系統(例如Dos)的指令而還要執(zhí)行MATLAB,可以利用!加上原作業(yè)系統的指令,例如!dir,!formata:。
Ctrl-C(即同時按Ctrl及C二個鍵)可以用來中止執(zhí)行中的MATLAB的工作。有三種方法可以結束MATLAB1.exit
2.quit
3.直接關閉MATLAB的命令視窗(Commandwindow)五、matlab與dos兼容命令1.dir—
可列出指定目錄下的文件和子目錄清單例如:dir可顯示當前目錄下的所有文件dirc:\matlabdirc:\matlab\*.m2.cd—可改變當前工作目錄
cd——
顯示當前子目錄
cdc:\matlab\toolboxcd..——退出當前子目錄到上一級目錄
cd\——回到根目錄
ls等同于dirpwd等同于cd
typemyfile.m
與dos下的用法完全一樣3.type—可顯示指定文件的全部內容4.delete—刪除指定文件
deleteabc—刪除當前目錄下的abc文件
deletec:\matlab\aaa.m
注意:只可刪除用戶文件,其它文件不要輕易刪除,否則系統會癱瘓
;,[]\/!
…clearclcshgcdpwdlsdirtypedeleteexitquit六、matlab的數據與變量變量查詢函數who與whos作用都是列出在matlab工作空間中已經駐留的變量名清單不同的是whos在給出駐留變量的同時,還給出他們的維數及性質變量及其命名規(guī)則1.
變量名的大小寫是敏感的。2.變量的第一個字符必須為英文字母,而且不能超過63個字符。3.變量名可以包含下連字符、數字,但不能為空格符、標點。P7-82.永久變量
在matlab工作內存中,駐留了幾個由系統本身在啟動時定義的變量,我們稱為永久變量永久變量用who指令是查看不到的,只可隨時調用ans預設的計算結果的變量名epsMATLAB定義的正的極小值=2.2204e-16pi內建的π值pi等inf∞值,無限大NaN無法定義一個數目i或j虛數單位i=jrealmax最大的正實數realmin最小的正實數realmax最大的正整數realmin最小的負整數nargin
輸入變元數目nargout
輸出變元數目七、文件系統命令
what
按擴展名分類列出文件*.m
、*.mex、*.mat分別是當前目錄中所有matlab程序文本文件、二進制執(zhí)行文件、數據文件which
列出指定文件所在的目錄
whichtest.m
顯示test.m所在的路徑
path(path,’c:\mydir’)
將根目錄下的mydir臨時納入搜索路徑可將你需要的目錄永久納入matlab搜索路徑打開c:\matlab\matlabrc.m文件在所有搜索路徑后加上‘c:\mydir\;’,…!mdd:\tsy;diaryd:\tsy\tsy.txt;dir;ss=linspace(2,9);diaryeditd:\tsy\tsy.txt八、matlab聯機幫助命令
help功能提供matlab大部分主題的在線幫助信息help
顯示help
主題一覽表helpplot3
顯示有關三維做圖指令幫助信息help[]
顯示特殊字符與符號幫助信息helphelp
顯示help的幫助信息雖然help可以隨時提供幫助,但必須知道準確的函數名稱。當不能確定函數名稱時,help就無能為力了。
lookfor函數—它可提供通過一般的關鍵詞,搜索出一組與之相關的命令lookforfourier
尋找含有傅立葉變換的相關指令help、lookfor兩個指令構成了matlab語言相當完善的在線幫助查詢系統lookforfouri
對所有m文件中幫助文件的第一行包含fouri的關鍵字進行搜索。如FFTDiscreteFouriertransform加上-all就進行全文搜索。九、matlab的演示功能
intro
入門演示
demo
在線演示小結一、初步了解matlab二、熟悉matlab界面,進行簡單操作。1.參數設置(清楚、漢字)2.diary(目錄、文件格式)3.變量與文件存儲(save--load,diary,edit)4.command與edit(命令與文件及修改)5.書寫格式(書上格式,command格式)6.關于自帶原程序符號運算的功能符號表達式、符號矩陣的創(chuàng)建符號線性代數因式分解、展開和簡化符號代數方程求解符號微積分符號微分方程一、符號運算的基本操作什么是符號運算 與數值運算的區(qū)別
※
數值運算中必須先對變量賦值,然后才能參與運算。
※
符號運算無須事先對獨立變量賦值,運算結果以標準的符號形式表達。
特點:運算對象可以是沒賦值的符號變量可以獲得任意精度的解SymbolicMathToolbox——符號運算工具包通過調用MuPAD軟件實現符號計算的。
MuPADMuPAD(MultiProcessingAlgebraDataTool)是一個商用計算機代數系統。最初由德國帕德博恩大學(Universit?tPaderborn)BennoFuchsteiner教授的MuPAD研究小組開發(fā)而成,1997年以來,其開發(fā)由該研究小組與德國SciFaceSoftware有限公司共同承擔。?。?!以前和maple軟件搭檔。從MATLABR2008b開始,符號計算的默認計算引擎就不再使用Maple,而使用MuPAD。
。
2.符號變量與符號表達式f='sin(x)+5x'f——符號變量名sin(x)+5x——符號表達式'
'——符號標識符號表達式一定要用''單引號括起來matlab才能識別。''的內容可以是符號表達式,也可以是符號方程。例:
f1='ax^2+bx+c'——二次三項式
f2='ax^2+bx+c=0'——方程
f3='Dy+y^2=1'——微分方程※符號表達式或符號方程可以賦給符號變量,以后調用方便;也可以不賦給符號變量直接參與運算3.符號矩陣的創(chuàng)建數值矩陣A=[1,2;3,4]A=[a,b;c,d]——不識別
用matlab函數sym創(chuàng)建矩陣(symbolic
的縮寫)命令格式:A=sym('[]')※符號矩陣內容同數值矩陣
※需用sym指令定義
※需用''標識例如:A=sym('[a,2*b;3*a,0]')A=[a,2*b][3*a,0]
這就完成了一個符號矩陣的創(chuàng)建。注意:符號矩陣的每一行的兩端都有方括號,這是與matlab數值矩陣的一個重要區(qū)別。符號數字和符號常數【例2.1-1】a=pi+sqrt(5) sa=sym('pi+sqrt(5)')Ca=class(a)Csa=class(sa) vpa(sa-a)
用字符串直接創(chuàng)建矩陣
模仿matlab數值矩陣的創(chuàng)建方法需保證同一列中各元素字符串有相同的長度。例:A=['[a,2*b]';'[3*a,0]']
A=[a,2*b][3*a,0]類別?symsabAn=[a,2*b;3*a,0]
符號矩陣的修改
直接修改可用、鍵找到所要修改的矩陣,直接修改
Pa=sym(‘para’,’Flag’)symsabcparaFlagsymsuvwza5f=sym('3');Eq=sin(f)*u*z^2+v*z+f*w-a5;symvar(Eq)result_1=solve(Eq)result_2=solve(Eq,z)
符號常數符號變量符號表達式符號變量認定求解符號變量例格式只有三種:復數、實數和正數符號計算中的算符數值運算中,所有矩陣運算操作指令都比較直觀、簡單。例如:a=b+c;a=a*b;A=2*a^2+3*a-5等。符號運算符號與數值運算的算符相同+-*\/^;+-.*.\./.^;關系運算沒有大于、小于、大于等于、小于等于只有==~=二、符號運算符號矩陣運算的函數:與數值類函數和指令對應的同名符號類函數和指令借助mfun調用的50多個經典特殊函數(誤差函數、貝塞爾函數等)借助evalin和feval調用的數量巨大的MuPAD庫函數符號對象的識別【例2.1-5】。cleara=1;b=2;c=3;d=4;Mn=[a,b;c,d] Mc='[a,b;c,d]' Ms=sym(Mc)
SizeMn=size(Mn)SizeMc=size(Mc)SizeMs=size(Ms)
CMn=class(Mn)CMc=class(Mc)CMs=class(Ms)isa(Mn,'double')isa(Mc,'char')isa(Ms,'sym')
whosMnMcMs
清除變量和撤銷假設【例2.1-6】symsxclear%清除MuPAD對x的假設,與clearx有別f=x^3+4.75*x+2.5;rf=solve(f,x)%求出全部根evalin(symengine,‘getprop(x)’)%獲得MuPAD內存中x的假設symsxreal %定義為實型rfr=solve(f,x)
evalin(symengine,‘getprop(x)’) %獲得MuPAD內存中x的假設clearx symsxg=x^2+x+5;rg=solve(g,x) %受前面x的定義影響而無解symsxclear %清除MuPAD對x的假設rg=solve(g,x)
clearall reset(symengine)%重啟MuPAD引擎,清空MuPAD內存 Da=1.2;Dw=1/3; symssaswsxsysz symsABpositive symsCreal
whos
syms%顯示當前MATLAB內存中全部符號變量
evalin(symengine,'anames(Properties)') %顯示MuPAD內存中全部變量
clearA syms %顯示當前MATLAB內存中全部符號變量
evalin(symengine,'anames(Properties)')%顯示MuPAD內存中全部變量 symsBclear %清除MuPAD對B的假設syms
%顯示當前MATLAB內存中全部符號變量evalin(symengine,'anames(Properties)')
%顯示MuPAD內存中全部變量符號幫助體系:
helpSymName求助符號指令
docmfunlist展現所有可以調用的函數及格式
doc(symengine)引出MuPAD的幫助瀏覽器展現所有可以調用的函數MuPAD幫助瀏覽器mfunlistdoc(symengine)將數值矩陣轉化為符號矩陣函數調用格式:sym(A)A=[1/3,2.5;1/0.7,2/5]A=0.33332.50001.42860.4000sym(A)ans=[1/3,5/2][10/7,2/5]
雙精度數字向符號數字轉換類別?sym(Num,’r’)r有理分數表達符號數字
f二進制近似表達符號數字
e帶估計誤差的廣義有理表達
d十進制浮點近似表達符號數字
雙精度數字向符號數字轉換3.符號數字向雙精度數字轉換double(An)符號數字An轉換為雙精度數字double(‘An’)把字符串數字轉換為ASCII數組任意精度算術運算digits(n)——設置可變精度,缺省16位vpa(x,n)——顯示可變精度計算digits(25)vpa(1/2+1/3)ans=.83333333333333333333333333.符號表達式的基本操作【例2.2-2】symsxf=(1/x^3+6/x^2+12/x+8)^(1/3)g1=simple(f)
f=(12/x+6/x^2+1/x^3+8)^(1/3)g1=((2*x+1)^3/x^3)^(1/3)diff(f)—對缺省變量求微分diff(f,v)—對指定變量v求微分diff(f,v,n)—對指定變量v求n階微分int(f)—對f表達式的缺省變量求積分int(f,v)—對f表達式的v變量求積分int(f,v,a,b)—對f表達式的v變量在(a,b)
區(qū)間求定積分3.符號微分與積分變換表達式中的置換操作公因子法簡化表達【例2.2-3】。(1)clear A=sym('[ab;cd]') [V,D]=eig(A) (2)subexpr([V;D]) %提取公因式 who %
(3)Dw=subexpr(D,‘w’) %公因式替換(4)[RVD,w]=subexpr([V;D],‘w’) %合成矩陣公因式通用置換指令【例2.2-4】(1)clearsymsabx;f=a*sin(x)+b(2)f1=subs(f,sin(x),'log(y)') class(f1) (3)f2=subs(f,a,3.11) class(f2) (4)f3=subs(f,{a,b,x},{2,5,sym('pi/3')}) class(f3)通用置換指令【例2.2-4】((5)format formatcompact f4=subs(f,{a,b,x},{2,5,pi/3}) class(f4)(6)f5=subs(f,x,0:pi/2:pi)class(f5)(7)t=0:pi/10:2*pi;f6=subs(f,{a,b,x},{2,3,t}) plot(t,f6)symsatx;f=[a,t^3;t*cos(x),log(x)];df=diff(f) %求矩陣f對x的導數dfdt2=diff(f,t,2) %求矩陣f對t的二階導數dfdxdt=diff(diff(f,x),t) %求二階混合導數symsxyzF2=int(int(int(x^2+y^2+z^2,z,sqrt(x*y),x^2*y),y,sqrt(x),x^2),x,1,2)VF2=vpa(F2) %積分結果用32位數字表示int('被積表達式','積分變量','積分上限',
'積分下限')——定積分——缺省時為不定積分mtaylor(f,n)——泰勒級數展開ztrans(f)——Z變換iztrans(f)——反Z變換laplace(f)——拉氏變換ilaplace(f)——反拉氏變換fourier(f)——付氏變換ifourier(f)——反付氏變換
例.計算二重不定積分F=int(int('x*exp(-x*y)','x'),'y')F=1/y*exp(-x*y)例2.計算f='x*exp(-x*10)'的Z變換
F=ztrans(f)F=z*exp(-10)/(z-exp(-10))^2>>symsxy>>F=int(int(x*exp(-x*y),x),y)F=1/y*exp(-x*y)>>symsx>>f=x*exp(-x*10);>>F=ztrans(f)>>F=ztrans(x*exp(-x*10);F=z*exp(-10)/(z-exp(-10))^2
>>a=[01;-2-3];>>symss>>b=(s*eye(2)-a)b=[s,-1][2,s+3]>>B=inv(b)[(s+3)/(s^2+3*s+2),1/(s^2+3*s+2)][-2/(s^2+3*s+2),s/(s^2+3*s+2)]
>>
b11=ilaplace(sym(b,1,1));b(1,1)=b11;>>b12=ilaplace(sym(b,1,2));b(1,2)=b12;>>b21=ilaplace(sym(b,2,1));b(2,1)=b21;>>b22=ilaplace(sym(b,2,2));b(2,2)=b22;>>bb=[-exp(-2*t)+2*exp(-t),exp(-t)-exp(-2*t)][-2*exp(-t)+2*exp(-2*t),2*exp(-2*t)-exp(-t)]
4.符號代數方程求解matlab符號運算能夠解一般的線性方程、非線性方程及一般的代數方程、代數方程組。當方程組不存在符號解時,又無其他自由參數,則給出數值解。命令格式:solve(f)——求一個方程的解solve(f1,f2,…fn)——求n個方程的解
例.f=ax2+bx+c求解f='a*x^2+b*x+c';solve(f)——對缺省變量x求解ans=[1/2/a*(-b+(b^2-4*a*c)^(1/2))][1/2/a*(-b-(b^2-4*a*c)^(1/2))]計算機格式一般格式例.符號方程cos(x)=sin(x)
和tan(2*x)=sin(x)分別求解
f1=solve('cos(x)=sin(x)'), f1= 1/4*pisolve(f,'b')——對指定變量b求解ans=-(a*x^2+c)/x例.解方程組x+y+z=1x-y+z=22x-y-z=1g1='x+y+z=1',g2='x-y+z=2',g3='2*x-y-z=1'f=solve(g1,g2,g3)f=solve('x+y+z=1','x-y+z=2','2*x-y-z=1')f=z=5/6,y=-1/2,x=2/3f=solve('x+y+z=1','x-y+z=2','2*x-y-z=1')f=x:[1x1sym] f.x ans=2/3 y:[1x1sym] f.y ans=-1/2z:[1x1sym] f.z ans=5/6
[x,y,z]=solve('x+y+z=1','x-y+z=2','2*x-y-z=1')x=2/3y=-1/2z=5/65.符號微分方程求解
——用一個函數可以方便地得到微分方程的符號解符號微分方程求解指令:dsolve命令格式:dsolve(f,g)f——微分方程,可多至12個微分方程的求解;g為初始條件默認自變量為'x',可任意指定自變量't','u'等微分方程的各階導數項以大寫字母D表示或或或y的一階導數——Dyy的二階導數——D2yy的n階導數——
Dny[y1,y2…]=dsolve(x1,x2,…xn)——返回 微分方程的解一階微分方程dsolve('Dx=y','Dy=x','x(0)=0','y(0)=1')ans=x(t)=sin(t),y(t)=cos(t)二階微分方程dsolve('D2y=-a^2*y','y(0)=1','Dy(pi/a)=0')ans=cos(a*x)
exfuhaojie例.y=dsolve('D2y+2*Dy+2*y=0','y(0)=1','Dy(0)=0')y=exp(-x)*cos(x)+exp(-x)*sin(x)ezplot(y)——方程解y(t)的時間曲線圖求該方程的解exfuhaodso求極限symsx,limit(1/x,x,0),limit(1/x,x,0,'left'),limit(1/x,x,0,'right'),基本內容創(chuàng)建數組和尋訪數組運算關系與邏輯操作數組也是變量
注意其命名規(guī)則符號運算有優(yōu)勢數值運算適應計算機的科學計算
symstx ft=t^2*cos(t) sx=int(ft,t,0,x) dt=0.05; t=0:dt:5; Ft=t.^2.*cos(t); Sx=dt*cumtrapz(Ft); t(end-4:end) Sx(end-4:end) plot(t,Sx,'.k','MarkerSize',12)xlabel('x'),ylabel('Sx'),gridon
可以是任何matlab表達式,可以是實數,也可以是復數,復數可用特殊函數i,j輸入
a=[123;456]x=[2pi/2;sqrt(3)3+5i]
一、數組直接創(chuàng)建注意:只要是賦過值的變量,不管是否在屏幕上顯示過,都存儲在工作空間中,以后可隨時顯示或調用。變量名盡可能不要重復,否則會覆蓋。當一個指令或矩陣太長時,可用???續(xù)行冒號的作用
用于生成等間隔的向量,默認間隔為1。用于選出矩陣指定行、列及元素。循環(huán)語句T0=1:2:6;T=[1,2;2,100];T1=T(:);T2=T(:,1);a1=1:6 a2=0:pi/4:pi a3=1:-0.1:0 b1=linspace(0,pi,4) b2=logspace(0,3,4)c1=[2pi/2sqrt(3)3+5i]rand('twister',0) c2=rand(1,5)一維數組創(chuàng)建與尋訪1)逐個輸入a1=[123]2)冒號生成a2=1:43)定數采樣a3=linspace(1,10,3)a4=logspace(1,1000,2)尋訪下標法(end)2.用matlab函數創(chuàng)建空陣[]—matlab允許輸入空陣,當一項操作無結果時,返回空陣。rand——
隨機矩陣eye——
單位矩陣zeros——全部元素都為0的矩陣ones——全部元素都為1的矩陣
還有伴隨矩陣(compan)、稀疏矩陣(sparse,full)、魔方矩陣(magic)、對角矩陣(diag)、希爾伯特矩陣(hilb)、帕斯卡矩陣(pascal)等矩陣的創(chuàng)建。注意:matlab嚴格區(qū)分大小寫字母,因此a與A是兩個不同的變量。
matlab函數名必須小寫。二維數組創(chuàng)建與尋訪1)直接輸入a1=[12;34]2)用m文件創(chuàng)建exm.mAa=[1234;…7,8,9,10;…691116];尋訪全下標;單下標;sub2indind2sub例如a=[120;305;789]a=120305789a(3,3)=0a=120305780exm.mAa=[1234;...7,8,9,10;...91116];Aa尋訪及修改全下標;單下標:endAa(:,2);Aa(3,:);Aa(:,end);Aa(2:end,end);randoneseyezerospascalmagicA=zeros(2,6) A(:)=1:12 A(2,4) A(8)A(:,[1,3]) A([1,2,5,6]') A(:,4:end)A(2,1:2:5)=[-1,-3,-5]B=A([1,2,2,2],[1,3,5])L=A<3 A(L)=NaN a=1:8 A=reshape(a,4,2) A=reshape(A,2,4) b=diag(A) B=diag(b)D1=repmat(B,2,4)D1([1,3],:)=[]把matlab工作空間中一些有用的數據長久保存下來的方法是生成mat數據文件。
save——
將工作空間中所有的變量存到matlab.mat文件中。二、數據的保存與獲取默認文件名savedata——將工作空間中所有的變量存到data.mat文件中。
savedataab——將工作空間中a和b變量存到data.mat文件中。
下次運行matlab時即可用load指令調用已生成的mat文件。load——loaddata——loaddataab——即可恢復保存過的所有變量mat文件是標準的二進制文件,還可以ASCII碼形式保存和加載。
savedataab–asciiloaddataab–ascii
以二進制的方式儲存變數,通常檔案會比較小,而且在載入時速度較快,但是就無法用普通的文書軟體(例如pe2或記事本)看到檔案內容。若想看到檔案內容,則必
須加上-ascii選項。
savefilenamex-ascii:將變數x以八位數存到名為filename的ASCII檔案。
二進制和ASCII檔案的比較
在save命令使用-ascii選項后,會有下列現象:
save命令就不會在檔案名稱后加上mat的副檔名。因此以副檔名mat結尾的檔案通常是MATLAB的二進位資料檔。
通常只儲存一個變數。若在save命令中加入多個變數,仍可執(zhí)行,但所產生的檔案則無法以簡單的load命令載入。有關load命令的用法。
原有的變數名稱消失。因此在將檔案以load載入時,會取用檔案名稱為變數名稱。
對于復數,只能儲存其實部,而虛部則會消失。
對于相同的變數,ASCII檔案通常比二進制檔案大。
若非有特殊需要,我們應該盡量以二進制方式儲存資料。
A=1:3,a=10:-1:1;saved:\tsy\tsyA.txtA-ascii;saved:\tsy\tsyaa;dird:\tsypause;clear;pause;loadd:\tsy\tsyA.txt;loadd:\tsy\tsya;
數組運算指元素對元素的算術運算,與通常意義上的由符號表示的線性代數矩陣運算不同1).數組加減(+,-)a+ba-b3.數組運算對應元素相加減(與矩陣加減等效)2).數組乘除(
,./,.\)ab——a,b兩數組必須同階,兩數組相應元素相乘。a=[123;456;789];b=[246;135;7910];a.*bans=281841530497290a=[123;456;789];b=[246;135;7910];a*bans=253746558510985133172a./b=b.\aa.\b=b./aa./b=b.\a—
都是a的元素被b的對應元素除a.\b=b./a—
都是b的元素被a的對應元素除例:a=[123];b=[456];c1=a.\b;c2=b./ac1=4.00002.50002.0000c2=4.00002.50002.0000——
給出a,b對應元素間的商.3).數組乘方(.^)—
元素對元素的冪例:a=[123];b=[456];z=a.^2z=1.004.009.00z=a.^bz=1.0032.00729.00
MATLAB常用數學函數MATLAB常用數學函數關系運算
關系符號意義<<=>>===~=小于小于或等于大于大于或等于等于不等于邏輯運算&|~xor同真一真0真真假為真
allanyisnanisinfisfinite全真一真判斷非數無窮大有限find
ind=find(X)查找矩陣X中的非零元,記錄其下標位置于ind中,舉個例子,如果X=[120330040103]那么find(X)的結果ind=[1246101112]',這是按列來的,從第一列依次往后面數,等同于Y=[130201000343];ind=find(Y);那么為了更準確的得到行和列的指標,那么你可以輸出兩個結果,也就是[row,col]=find(X),row代表行指標,col代表列指標,不甘心的話,還可以輸出三個[row,col,val]=find(X),第三個val表示查找到對應位置非零元的值。類似的,ind=find(X,k)返回前k個非零元的指標
ind=find(X,k,‘last’)返回后k個非零元的指標。一般情況下,find和邏輯矩陣用的很多,比方說,一個矩陣A中,想找到其中大于100數的位置和值,那么就可以用
[row,col]=find(A>100);那么A(row,col)就是那些大于100的數值了。找到A中大于100,小于1000數的位置,可以輸入[row,col]=find(A>100&A<1000);基本內容數值微積分代數方程求解概率分布和統計多項式運算和卷積創(chuàng)建矩陣(數組)直接創(chuàng)建函數創(chuàng)建
randeyezerosonesmagicdiagpascalpeaks…一維(矩陣)數組創(chuàng)建與尋訪1)逐個輸入a1=[123]2)冒號生成a2=1:43)定數采樣a3=linspace(1,10,3)a4=logspace(1,1000,2)尋訪下標法(end)二維數組(矩陣)創(chuàng)建與尋訪1)直接輸入a1=[12;34]2)用m文件創(chuàng)建exm.mAa=[1234;…7,8,9,10;…691116];尋訪全下標;單下標;sub2indind2sub矩陣的修改直接修改尋訪并修改(函數;全下標;單下標)
矩陣加、減(+,-)運算規(guī)則:相加、減的兩矩陣必須有相同的行和列兩矩陣對應元素相加減。允許參與運算的兩矩陣之一是標量。標量與矩陣的所有元素分別進行加減操作。矩陣運算2.矩陣乘()除運算規(guī)則:A矩陣的列數必須等于B矩陣的行數標量可與任何矩陣相乘。a=[123;456;780];b=[1;2;3];c=a*bc=143223
矩陣運算d=[-1;0;2];f=pi*df=-3.141606.2832
矩陣除的運算在線性代數中沒有,有矩陣逆的運算,在matlab中有兩種矩陣除運算\/矩陣除的運算在線性代數中沒有矩陣除的運算,有矩陣逆的運算,在matlab中有兩種矩陣除運算\/a=peaks(3)a=0.0001-0.2450-0.0000-0.03650.98100.03310.00000.29990.0000b=magic(3)b=816357492zuochu=a/bzuochu=0.0150-0.0055-0.0259-0.06600.03330.0978-0.01830.00670.0317youchu=b\ayouchu=0.0053-0.1586-0.0048-0.00080.06840.0007-0.00690.15920.0063zuochu==youchuans=000000000zuochu~=youchuans=111111111注意矩陣的維數關系!a^p——a自乘p次冪
方陣>1的整數3.矩陣乘方——a^n,a^p,p^a對于p的其它值,計算將涉及特征值和特征向量,如果p是矩陣,a是標量a^p使用特征值和特征向量自乘到p次冪;如a,p都是矩陣,a^p則無意義。矩陣運算a=[1,2,3;4,5,6;7,8,9];a^2ans=303642668196102126150
a^0.5ans=
0.4498+0.7623i0.5526+0.2068i0.6555-0.3487i1.0185+0.0842i1.2515+0.0228i1.4844-0.0385i1.5873-0.5940i1.9503-0.1611i2.3134+0.2717i※當一個方陣有復數特征值或負實特征值時,非整數冪是復數陣。inv——
矩陣求逆det——
行列式的值eig——
矩陣的特征值diag
——
對角矩陣
’
——
矩陣轉置sqrtm——
矩陣開方4.矩陣的其它運算矩陣運算5.矩陣的一些特殊操作矩陣的變維
a=[1:12];b=reshape(a,3,4)c=zeros(3,4);c(:)=a(:)矩陣的變向
rot90:旋轉;fliplr:左右翻;flipud:上下翻矩陣的抽取
diag:抽取主對角線;tril:抽取主下三角;
triu:抽取主上三角矩陣的擴展repmat(A,1,3)復制b=1:15;b=reshape(b,3,5)b=147101325811143691215diag(b)ans=159tril(b),ans=100002500036900triu(b)ans=147101305811140091215+-*/\^sqrtmexpmlogm關系運算
關系符號意義<<=>>===~=小于小于或等于大于大于或等于等于不等于邏輯運算&|~xor同真一真0真真假為真
allanyisnanisinfisfinite全真一真判斷非數無窮大有限find
一、數值微積分近似數值極限及導數數值求和與近似數值積分計算精度可控的數值積分函數極值的數值求解常微分方程的數值解近似數值極限及導數diffgradientx=eps;L1=(1-cos(2*x))/(x*sin(x)), %errorL2=sin(x)/x, %巧等L1=0L2=1symstf1=(1-cos(2*t))/(t*sin(t));f2=sin(t)/t;Ls1=limit(f1,t,0)Ls2=limit(f2,t,0)Ls1=2Ls2=1
近似數值極限及導數d=pi/100;t=0:d:2*pi;x=sin(t);dt=5*eps; %x_eps=sin(t+dt);dxdt_eps=(x_eps-x)/dt; %plot(t,x,'LineWidth',5)holdonplot(t,dxdt_eps)holdofflegend('x(t)','dx/dt')xlabel('t')
數值求和與近似數值積分cleard=pi/8; %t=0:d:pi/2; %y=0.2+sin(t); %s=sum(y); %s_sa=d*s; %s_ta=d*trapz(y); %
disp(['sum求得積分',blanks(3),'trapz求得積分'])disp([s_sa,s_ta])sum求得積分
trapz求得積分
1.57621.3013sum,cumsum,trapz,cumtrapz列向求和計算精度可控的數值積分quadquad1dblquadtriplequad注意積分限函數極值的數值求解尋優(yōu)函數:fminbnd—
求單變量函數極小值fminsearch—
單純形法求多變量函數極小值fminunc—
擬牛頓法求多變量函數極小值fzero——
變量函數0值例對邊長為3m的正方形鐵板,四角裁剪相等的正方形制成無蓋水槽,問如何剪法時水槽容積最大jiancai.mfunctionf=myfun(x)f=-(3-2*x).^2*x;x=fminbnd(@jiancai,0,1.5)例求最小值F=inline('sin(x)+3');Xm=fminunc(F,4)例求解Xz=fzero(inline('sin(3*x)'),2)例:f(x)=‘x2+3x+2’在[-55]區(qū)間的最小值f=fminbnd('x^2+3*x+2',-5,5)最大值怎么求解常微分方程數值解微分方程求解的仿真算法有多種,常用的有Euler(歐拉法)、RungeKutta(龍格-庫塔法。Euler法稱一步法,用于一階微分方程當給定仿真步長時:所以
yn+1=yn+h·f(xn,yn)n=0,1,2…y(x0)=y0RungeKutta法龍格-庫塔法:實際上取兩點斜率的平均斜率來計算的,其精度高于歐拉算法。龍格-庫塔法:ode23ode45
k1=hf(xn,yn)k2=hf(xn+h,yn+k)例:x+(x2-1)x+x=0為方便令x1=x,x2=x分別對x1,x2求一階導數,整理后寫成一階微分方程組形式
x1=x2x2=x2(1-x12)-x1建立m文件解微分方程······建立m文件functionxdot=wf(t,x)xdot=zeros(2,1)xdot(1)=x(2)xdot(2)=x(2)*(1-x(1)^2)-x(1)給定區(qū)間、初始值;求解微分方程t0=0;tf=20;x0=[00.25]';[t,x]=ode23('wf',t0,tf,x0)plot(t,x),figure(2),plot(x(:,1),x(:,2))命令格式:[T,Y]=ODE23(ODEFUN,TSPAN,Y0)建立m文件functiondxdt=wf(t,x)dxdt=[x(2);x(2)*(1-x(1)^2)-x(1)];求解微分方程[t,x]=ode23(‘wf’,[030],[0;0.25]);plot(t,x);figure(2)plot(x(:,1),x(:,2))exdot2matlab中有兩種除運算左除和右除。對于方程ax+b,a為an×m矩陣,有三種情況:當n=m時,此方程成為“恰定”方程當n>m時,此方程成為“超定”方程當n<m時,此方程成為“欠定”方程
matlab定義的除運算可以很方便地解上述三種方程二、代數方程求解1.恰定方程組的解方程ax+b(a為非奇異)x=a-1
b
矩陣逆兩種解:x=inv(a)
b—
采用求逆運算解方程x=a\b—
采用左除運算解方程方程ax=ba=[12;23];b=[8;13];
x=inv(a)*b
x=a\bx=x=2.002.003.003.00
=
ax=b例:x1+2x2=82x1+3x2=132.超定方程組的解方程ax=b,m<n時此時不存在唯一解。方程解(a'a)x=a'bx=(a'
a)-1a'b——
求逆法
x=a\b——matlab用最小二乘法找一個準確基本解。例:x1+2x2=12x1+3x2=23x1+4x2=3a=[12;23;34];b=[1;2;3];
解1x=a\b
解2x=inv(a'
a)
a'
b
x=x=1.00
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 住宅室內裝修合同
- 三農村基層法治建設與實踐方案
- 模板安裝施工方案
- 建筑施工工程承包合同條例
- 鋪筑施工方案
- 洗手間防水卷材的施工方案
- 《大數據技術導論》-教案
- 安徽省宿州市靈璧縣2024-2025學年上學期八年級數學期末試卷(原卷版+解析版)
- 自貢賓館消防施工方案
- 年產1000噸微生物菌劑項目環(huán)評報告表
- 電梯采購合同范本
- 2025年官方二手房交易協議
- 2025年山東泰山財產保險股份有限公司招聘筆試參考題庫含答案解析
- 2025年度珠寶店珠寶首飾設計研發(fā)合作協議
- 非遺數字化保護的可行性研究
- 農村自建房施工合同范本(包工包料)
- 污水處理設施運維服務投標方案(技術標)
- 2025年復工復產安全開工第一課專題培訓
- 軍兵種基礎知識
- 2025年上半年江蘇省無錫瀚瀾水利科技限公司招聘7人易考易錯模擬試題(共500題)試卷后附參考答案
- 我的家鄉(xiāng)衢州
評論
0/150
提交評論