matlab3程序設(shè)計(jì).ppt_第1頁(yè)
matlab3程序設(shè)計(jì).ppt_第2頁(yè)
matlab3程序設(shè)計(jì).ppt_第3頁(yè)
matlab3程序設(shè)計(jì).ppt_第4頁(yè)
matlab3程序設(shè)計(jì).ppt_第5頁(yè)
已閱讀5頁(yè),還剩78頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第三章MATLAB程序設(shè)計(jì) 一 matlab的工作模式 1 指令驅(qū)動(dòng)模式 通常matlab以指令驅(qū)動(dòng)模式工作即在matlab窗口下 當(dāng)用戶輸入單行指令時(shí) matlab立即處理這條指令 并顯示結(jié)果 這就是matlab命令行方式 命令行操作時(shí) matlab窗口只允許一次執(zhí)行一行上的一個(gè)或幾個(gè)語(yǔ)句 x1 0 10 x2 0 3 11 x3 11 5 3 0 x1 012345678910 x2 0369x3 11 50008 50005 50002 5000在matlab窗口輸入數(shù)據(jù)和命令進(jìn)行計(jì)算時(shí) 當(dāng)處理復(fù)雜問題和大量數(shù)據(jù)時(shí)是不方便的 因此應(yīng)編輯m文件 2 m文件m文件的語(yǔ)法類似于c語(yǔ)言 但有自身特點(diǎn) 它只是一個(gè)簡(jiǎn)單的ASCII碼文本文件 執(zhí)行程序時(shí)逐行解釋運(yùn)行程序 matlab是解釋性的編程語(yǔ)言 m文件有兩類 獨(dú)立的m文件 稱程序文件 可調(diào)用m文件 稱函數(shù)文件 1 程序文件 簡(jiǎn)單的m文件程序文件實(shí)際上是一串指令的集合 與在命令窗口逐行執(zhí)行文件中的所有指令 其結(jié)果是一樣的 沒有輸入輸出參數(shù) 2 matlab內(nèi)置函數(shù)文件matlab自定義的函數(shù)文件稱內(nèi)置函數(shù)文件調(diào)用內(nèi)置函數(shù)的方法 使用函數(shù)名并給出相應(yīng)的入口 出口參數(shù)即可 例如 sin m函數(shù) 用typesin查不到 調(diào)用格式 y sin 2 x 實(shí)際應(yīng)用中 x 0 2 pi 180 2 pi y sin 2 x plot x y 3 函數(shù)m文件 需要輸入變量 返回輸出變量matlab用戶可以根據(jù)需要編輯自己的m文件 它們可以像庫(kù)函數(shù)一樣方便的調(diào)用 從而極大地?cái)U(kuò)展了matlab的能力 各種工具箱的內(nèi)部函數(shù)基本都是M函數(shù)文件 用戶也可以自己編寫一組M函數(shù)文件組成工具箱對(duì)于某一類特殊問題 如創(chuàng)建了許多m函數(shù)文件 則可形成新的工具箱 這種用matlab語(yǔ)言創(chuàng)建定義新的matlab函數(shù)的功能 正體現(xiàn)了matlab語(yǔ)言強(qiáng)大的擴(kuò)展功能 二 文本編輯窗MATLAB文本編輯器的功能就是完成編寫 修改和調(diào)試這種文件程序就要用到M文件編輯器 調(diào)試器 文本編輯器 調(diào)試器的啟動(dòng)可以從命令窗口中或當(dāng)前目錄窗口中選擇新建或打開文件按鈕進(jìn)入 或在命令窗口中鍵入 edit 回車 其編輯模式如下圖所示 在文本編輯器中 文字的不同顏色顯示表明文字的不同屬性 綠色 注解 黑色 程序主體 紅色 屬性值的設(shè)定 藍(lán)色 控制流程 編輯功能與大多數(shù)編輯器類似 都有復(fù)制 粘貼 查找 加注釋 縮進(jìn)等功能具有程序調(diào)試功能 設(shè)置斷點(diǎn) 單步執(zhí)行 連續(xù)執(zhí)行等在運(yùn)行程序之前 必須設(shè)置好MATLAB的工作路徑 使得所要運(yùn)行的程序及運(yùn)行程序所需要的其他文件處在當(dāng)前目錄之下 只有這樣 才可以使程序得以正常運(yùn)行 否則可能導(dǎo)致無(wú)法讀取某些系統(tǒng)文件或數(shù)據(jù) 從而程序無(wú)法執(zhí)行 文本編輯器的相關(guān)菜單功能 SaveandRun 保存并運(yùn)行程序 直到遇到下一個(gè)斷點(diǎn) 對(duì)應(yīng)工具按鈕為 SingleStep 單步執(zhí)行 對(duì)應(yīng)工具按鈕為 StepIn 運(yùn)行當(dāng)前程序行 如果當(dāng)前行調(diào)用了另外一個(gè)函數(shù) 則跳轉(zhuǎn)到這個(gè)函數(shù)里 對(duì)應(yīng)的工具按鈕為 ExitDebugMode 退出調(diào)試模式 工具按鈕為 Set ClearBreakpoint 設(shè)置 清除斷點(diǎn) ClearAllBreakpoints 清除所有的斷點(diǎn) 文本編輯器的參數(shù)設(shè)置 三 MATLBA程序的基本設(shè)計(jì)原則 1 后面的內(nèi)容是程序的注解 要善于運(yùn)用注解使程序更具可讀性 2 養(yǎng)成在主程序開頭用clear指令清除變量的習(xí)慣 以消除工作空間中其他變量對(duì)程序運(yùn)行的影響 但注意在子程序中不要用clear 3 參數(shù)值要集中放在程序的開始部分 以便維護(hù) 要充分利用MATLAB工具箱提供的指令來(lái)執(zhí)行所要進(jìn)行的運(yùn)算 在語(yǔ)句行之后輸入分號(hào)使其及中間結(jié)果不在屏幕上顯示 以提高執(zhí)行速度 4 input指令可以用來(lái)輸入一些臨時(shí)的數(shù)據(jù) 而對(duì)于大量參數(shù) 則通過建立一個(gè)存儲(chǔ)參數(shù)的子程序 在主程序中用子程序的名稱來(lái)調(diào)用 5 程序盡量模塊化 也就是采用主程序調(diào)用子程序的方法 將所有子程序合并在一起來(lái)執(zhí)行全部的操作 6 充分利用Debugger來(lái)進(jìn)行程序的調(diào)試 設(shè)置斷點(diǎn) 單步執(zhí)行 連續(xù)執(zhí)行 并利用其他工具箱或圖形用戶界面 GUI 的設(shè)計(jì)技巧 將設(shè)計(jì)結(jié)果集成到一起 7 設(shè)置好MATLAB的工作路徑 以便程序運(yùn)行 8 MATLAB程序的基本組成結(jié)構(gòu) 說(shuō)明清除命令 清除workspace中的變量和圖形 clear close 定義變量 包括全局變量的聲明及參數(shù)值的設(shè)定逐行執(zhí)行命令 指MATLAB提供的運(yùn)算指令或工具箱 提供的專用命令控制循環(huán) 包含for ifthen switch while等語(yǔ)句逐行執(zhí)行命令 繪圖命令 將運(yùn)算結(jié)果繪制出來(lái) M程序文件以 m格式進(jìn)行存取 包含一連串的MATLAB指令和必要的注釋 M程序文件中的命令格式和前后位置 與在命令窗口中輸入的沒有任何區(qū)別 需要在工作空間中創(chuàng)建并獲取變量 也就是說(shuō)處理的數(shù)據(jù)為命令窗口中的數(shù)據(jù) 沒有輸入?yún)?shù) 也不會(huì)返回參數(shù) 程序運(yùn)行時(shí)只需在工作空間中鍵入其名稱即可 使用helpxxx時(shí)將返回程序開始處的注釋信息 四 M程序文件 命令文件包括兩部分 注釋文件和程序文件 二階系統(tǒng)時(shí)域響應(yīng)曲線 阻尼系數(shù)為0 3x 0 0 1 20 y 1 1 sqrt 1 0 3 2 exp 0 3 x sin sqrt 1 0 3 2 x acos 0 3 plot x y 程序部分 畫出分段函數(shù)所表示的曲面 Thisisaexample a 2 b 2 clf CLFClearcurrentfigurex a 0 2 a y b 0 2 b fori 1 length y forj 1 length x ifx j y i 1z i j 0 5457 exp 0 75 y i 2 3 75 x j 2 1 5 x j elseifx j y i 1z i j 0 5457 exp 0 75 y i 2 3 75 x j 2 1 5 x j elsez i j 0 7575 exp y i 2 6 x j 2 endendendaxis a a b b min min z max max z colormap flipud winter surf x y z 五 M函數(shù)文件 第一行 函數(shù)聲明行 functiony dfw1 r p res r 1 p0 p 1 y sum res 輸出參數(shù) 函數(shù)名 輸入?yún)?shù) 可以沒有輸入?yún)?shù) 函數(shù)名要遵守Matlab變量名的命名規(guī)則 M函數(shù)存盤時(shí)的文件名與函數(shù)名相同 從函數(shù)返回的惟一信息包含在輸出參數(shù)中 要確保函數(shù)中包含一條給輸出參數(shù)賦值的語(yǔ)句 可以沒有輸出參數(shù) function輸出形參列表 函數(shù)名 輸入形參列表 注釋說(shuō)明部分 可選 函數(shù)體語(yǔ)句 必須 第一行為引導(dǎo)行 表示該M文件是函數(shù)文件函數(shù)名的命名規(guī)則與變量名相同 必須以字母開頭 當(dāng)輸出行參多于一個(gè)時(shí) 用方括號(hào)括起來(lái)函數(shù)必須是一個(gè)單獨(dú)的M文件函數(shù)文件名必須與函數(shù)名一致以百分號(hào)開始的語(yǔ)句為注釋語(yǔ)句 函數(shù)文件由function語(yǔ)句引導(dǎo) 函數(shù)可以接受輸入變量 并將運(yùn)算結(jié)果送到輸出變量函數(shù)具有單獨(dú)的工作空間 函數(shù)體內(nèi)使用的除返回和輸入變量外的所有變量都是局部變量 只在函數(shù)工作空間中存在 局部變量不保存在Matlab工作空間中 只在函數(shù)運(yùn)行期間有效當(dāng)函數(shù)執(zhí)行到最后一條命令或遇到return命令后 就結(jié)束函數(shù)的執(zhí)行 同時(shí)函數(shù)工作空間的變量被清除 函數(shù)基本格式 1 函數(shù)定義行 關(guān)鍵字function function out1 out2 filename in1 in2 輸入和輸出 返回 的參數(shù)個(gè)數(shù)分別由nargin和nargout兩個(gè)MATLAB保留的變量來(lái)給出 2 第一行幫助行 即H1行以 開頭 作為lookfor指令搜索的行 3 函數(shù)體說(shuō)明及有關(guān)注釋以 開頭 用以說(shuō)明函數(shù)的作用及有關(guān)內(nèi)容 作為help指令顯示的行 如果不希望顯示某段信息 可在它的前面加空行 4 函數(shù)體語(yǔ)句 functiony tt zeta tt 二階系統(tǒng)時(shí)域響應(yīng)曲線 其他注釋 zeta阻尼系數(shù)x 0 0 1 20 y 1 1 sqrt 1 zeta 2 exp zeta x sin sqrt 1 zeta 2 x acos zeta plot x y 用于lookfor x y是局部變量 help 在MATLAB中 調(diào)用函數(shù)的常用形式是 輸出參數(shù)1 輸出參數(shù)2 函數(shù)名 輸入?yún)?shù)1 輸入?yún)?shù)2 函數(shù)調(diào)用可以嵌套 一個(gè)函數(shù)可以調(diào)用別的函數(shù) 甚至調(diào)用它自己 遞歸調(diào)用 1 函數(shù)調(diào)用 a 1 b 3 c 1 x1x2 FindRoots a b c function x1x2 FindRoots a b c a x 2 b x c 0 x1 b b 2 4 a c 0 5 2 a x2 b b 2 4 a c 0 5 2 a 函數(shù)調(diào)用的一般格式 輸出實(shí)參列表 函數(shù)名 輸入實(shí)參列表 函數(shù)調(diào)用時(shí) 實(shí)參的順序應(yīng)與函數(shù)定義時(shí)的形參的順序一致 函數(shù)調(diào)用 functiony dfw1 r p 函數(shù)定義 形參 z dfw1 x k 實(shí)參 1 nargin函數(shù)體內(nèi)獲取實(shí)際輸入變量的個(gè)數(shù)2 nargout函數(shù)體內(nèi)獲取實(shí)際輸出變量的個(gè)數(shù)3 nargin fun 函數(shù)體外獲取定義輸入變量數(shù)4 nargout fun 函數(shù)體外獲取實(shí)際輸出變量數(shù)5 varargin獲得輸入變量的各元素內(nèi)容6 varargout獲得輸出變量的各元素內(nèi)容見文件mysum m MATLAB在函數(shù)調(diào)用上有一個(gè)與眾不同之處 函數(shù)所傳遞的參數(shù)具有可調(diào)性 函數(shù)文件examp m functionfout examp a b c ifnargin 1fout a elseifnargin 2fout a b elseifnargin 3fout a b c 2 end 程序文件mydemo m x 1 3 y 1 2 3 examp x examp x y examp x y 3 函數(shù)通過輸入和輸出參數(shù)與其它M文件進(jìn)行數(shù)據(jù)傳遞 當(dāng)函數(shù)調(diào)用完畢后 該函數(shù)文件中定義的所有局部變量都將被釋放 即全部被清除 函數(shù)文件中的變量都是局部的 即一個(gè)函數(shù)文件中定義的變量不能被另一個(gè)函數(shù)文件或其它M文件使用 2 局部變量 函數(shù)文件運(yùn)行時(shí) matlab會(huì)專門開辟一個(gè)臨時(shí)工作區(qū)間 稱為函數(shù)工作區(qū)間 如果在M函數(shù)中 調(diào)用某個(gè)M程序文件 那么該程序文件運(yùn)行時(shí)產(chǎn)生的所有變量都存放于該函數(shù)空間中 而不是存放在Matlab空間 變量名列表中的各個(gè)變量用空格隔開 不能用逗號(hào) 全局變量給函數(shù)間的數(shù)據(jù)傳遞帶來(lái)了方便 但卻破壞了函數(shù)對(duì)變量的封裝 降低了程序的可讀性 因而在結(jié)構(gòu)化程序設(shè)計(jì)中 全局變量是不受歡迎的 特別是當(dāng)程序較大 子程序較多時(shí) 全局變量將個(gè)程序調(diào)試和維護(hù)帶來(lái)不便 故不提倡使用全局變量 global變量名列表 3 全局變量 如果在若干個(gè)M文件中 都把某個(gè)變量定義為全局變量 則這些函數(shù)將公共使用這一變量 所有函數(shù)都可以對(duì)它進(jìn)行存取和修改操作 globalabca 18 3036b 3816 44c 46 13fori 1 11t 373 2 10 i 1 psat i antoine t end 函數(shù) Antoine mfunctionp vap antoine t globalabcp vap exp a b t c function num1 num2 num3 test3 varargin globalfirstlevelsecondlevelnum1 0 num2 0 num3 0 list zeros nargin fori 1 narginlist i sum varargin i list i list i length varargin i iflist i firstlevelnum1 num1 1 elseiflist i secondlevelnum2 num2 1 elsenum3 num3 1 endend globalfirstlevelsecondlevel firstlevel 85 secondlevel 75 a b c test3 90 89 60 79 89 60 99 98 100 a 1b 2c 0 4 子函數(shù) 函數(shù)文件中可以含有一個(gè)或多個(gè)子函數(shù)子函數(shù)由function語(yǔ)句引導(dǎo)主函數(shù)必須位于最前面 子函數(shù)出現(xiàn)的次序任意子函數(shù)只能被主函數(shù)和位于同一個(gè)函數(shù)文件中的其它子函數(shù)調(diào)用除了用global定義的全局變量外 子函數(shù)中的變量都是局部變量 子函數(shù)與主函數(shù)及其它子函數(shù)之間通過輸入 輸出參數(shù)進(jìn)行數(shù)據(jù)傳遞主函數(shù)與子函數(shù)的工作空間相互獨(dú)立用help和lookfor命令不能提供子函數(shù)的幫助信息 functiontest 注釋tt 0 3 holdon tt 0 5 tt 0 707 functiony tt zeta 二階系統(tǒng)時(shí)域響應(yīng)曲線 zeta阻尼系數(shù)x 0 0 1 20 y 1 1 sqrt 1 zeta 2 exp zeta x sin sqrt 1 zeta 2 x acos zeta plot x y function avg med main fun x 主函數(shù)n length x avg sub fun1 x n med sub fun2 x n functiona sub fun1 x n 子函數(shù)a sum x n functionm sub fun2 x n 子函數(shù)x sort x ifrem n 2 1m x n 1 2 elsem x n 2 x n 2 1 2 end MATLAB的搜索過程 matlab在一個(gè)文件中碰到指令cow時(shí) 1 檢查cow是否變量 2 檢查cow是否內(nèi)建函數(shù) 3 檢查cow是否子函數(shù) 4 檢查cow是否私用函數(shù) 私用函數(shù)指位于private目錄上的M文件函數(shù) 私用函數(shù)只能被private目錄的直接父目錄上的M函數(shù)文件所調(diào)用 5 檢查cow是否當(dāng)前目錄上的文件 先找 p 再找 m 6 檢查搜索路徑上是否有cow 六 程序流程結(jié)構(gòu) 一 M 文件中輸入 輸出命令 直接賦值輸入 提示對(duì)話輸入 input命令 x 2 x input 請(qǐng)輸入?yún)?shù)x a 1 2 3 4 a input 請(qǐng)輸入矩陣a s anystring s input Pleaseinputs s 直接輸出 格式控制輸出 fprintf命令 xfprintf x 0f y 5f n pi pi disp a b fprintf x 5g y 10 5g n N pi 例 輸入一個(gè)人的姓名 xm input What syourname s 例 求一元二次方程a2 bx c 0的根 a input a b input b c input c d b b 4 a c x b sqrt d 2 a b sqrt d 2 a 將該程序以aa m文件存盤 然后運(yùn)行aa m文件 keyboard 停止程序執(zhí)行 把控制權(quán)交給鍵盤 輸入return并回車后繼續(xù)程序執(zhí)行 return 結(jié)束函數(shù)執(zhí)行 返回主程序 若想強(qiáng)行終止程序或中斷死循環(huán) 按下Ctrl C鍵 pause函數(shù) 暫停程序的執(zhí)行 調(diào)用格式 pause 延遲秒數(shù) 注 如果省略延遲時(shí)間 直接使用pause 則將暫停程序 直到用戶按任一鍵后程序繼續(xù)執(zhí)行 二 選擇結(jié)構(gòu) 選擇結(jié)構(gòu)的語(yǔ)句有if語(yǔ)句和switch語(yǔ)句 1 if語(yǔ)句格式一 if條件語(yǔ)句組end 格式二 if條件語(yǔ)句組1else語(yǔ)句組2end 格式三 if條件1語(yǔ)句組1elseif條件2語(yǔ)句組2 elseif條件m語(yǔ)句組melse語(yǔ)句組m 1end 例輸入三角形的三條邊 求面積 A input 請(qǐng)輸入三角形的三條邊 ifA 1 A 2 A 3 elsedisp 不能構(gòu)成一個(gè)三角形 end運(yùn)行 請(qǐng)輸入三角形的三條邊 456 9 9216 輸入一個(gè)字符 若為大寫字母 則輸出其后繼字符 若為小寫字母 則輸出其前導(dǎo)字符 若為其他字符則原樣輸出 c input s ifc A end 建立符號(hào)函數(shù)sign x x input x ifx 0sn 1 elseifx 0sn 0 elsesn 1 endfprintf x 5f sn 0f n x sn 2switch語(yǔ)句 switch語(yǔ)句根據(jù)變量或表達(dá)式的取值不同 分別執(zhí)行不同的語(yǔ)句 其格式為 switch表達(dá)式case值1語(yǔ)句組1case值2 語(yǔ)句組2 case值m語(yǔ)句組motherwise語(yǔ)句組m 1end 例根據(jù)變量num的值來(lái)決定顯示的內(nèi)容 num input 請(qǐng)輸入一個(gè)數(shù) switchnumcase 1disp Iamateacher case0disp Iamastudent case1disp Youareateacher otherwisedisp Youareastudent end 三 循環(huán)結(jié)構(gòu) 實(shí)現(xiàn)循環(huán)結(jié)構(gòu)的語(yǔ)句 for語(yǔ)句和while語(yǔ)句 1 for語(yǔ)句 格式 for循環(huán)變量 表達(dá)式1 表達(dá)式2 表達(dá)式3循環(huán)體語(yǔ)句end注 其中表達(dá)式1的值為循環(huán)變量的初值 表達(dá)式2的值為步長(zhǎng) 表達(dá)式3的值為循環(huán)變量的終值 步長(zhǎng)為1時(shí) 表達(dá)式2可以省略 求1 n 100的和y 0 fori 1 100f 1 2 i 1 y y f end 求奇數(shù)和 s 1 3 5 2k 1 n input 請(qǐng)輸入n s 0 fori 1 2 ns s i fprintf i 0f s 0f n i s end 2 while語(yǔ)句格式為 while 條件表達(dá)式 循環(huán)體語(yǔ)句end循環(huán)控制語(yǔ)句 breakcontinuewhile循環(huán)和for循環(huán)的區(qū)別在于 while循環(huán)結(jié)構(gòu)的循環(huán)體被執(zhí)行的次數(shù)不是確定的 而for結(jié)構(gòu)中循環(huán)體的執(zhí)行次數(shù)是確定的 求e e 1 1 1 2 1 3 1 n 1 0e 8p p i r 1 p e e r fprintf i 0f r 9f e 9f n i r e i i 1 end 求 1 y3break endi i 1 endn i 1y y f break終止最內(nèi)層的for或while語(yǔ)句 執(zhí)行end后面的語(yǔ)句 通常與if結(jié)構(gòu)結(jié)合使用continue結(jié)束本次for或while循環(huán) 繼續(xù)進(jìn)行下次循環(huán) 通常與if結(jié)構(gòu)結(jié)合使用 break語(yǔ)句和continue語(yǔ)句舉例求 100 200 之間第一個(gè)能被21整除的整數(shù) forn 100 200ifrem n 21 0continueendbreakendn 3 循環(huán)的嵌套 如果一個(gè)循環(huán)結(jié)構(gòu)的循環(huán)體又包括一個(gè)循環(huán)結(jié)構(gòu) 就稱為循環(huán)的嵌套 或稱為多重循環(huán)結(jié)構(gòu) 多重循環(huán)的嵌套層數(shù)可以是任意的 可以按照嵌套層數(shù) 分別叫做二重循環(huán) 三重循環(huán)等 處于內(nèi)部的循環(huán)叫作內(nèi)循環(huán) 處于外部的循環(huán)叫作外循環(huán) 求 100 1000 以內(nèi)的全部素?cái)?shù) n 0 form 100 1000flag 1 j m 1 i 2 whilei jend i i 1 endifflagn n 1 prime n m endendprime 變量prime存放素?cái)?shù) 函數(shù)可以嵌套調(diào)用 即一個(gè)函數(shù)可以被其它函數(shù)調(diào)用 甚至可以被它自身調(diào)用 此時(shí)稱為遞歸調(diào)用 必須確保有一個(gè)終止條件來(lái)結(jié)束遞歸過程 七 遞歸函數(shù) 函數(shù)文件factor mfunctionf factor n if n 1 f 1 elsef n factor n 1 end main m 計(jì)算s 1 2 3 4 5 s 0 fori 1 5s s factor i endfprintf s g n s 例 利用函數(shù)的遞歸調(diào)用計(jì)算n 例 數(shù)字全排列問題 全排列是將一組數(shù)按一定順序進(jìn)行排列 如果這組數(shù)有n個(gè) 那么全排列數(shù)為n 個(gè) 如N 3時(shí) 共有以下6種排列方式 123 132 213 231 312 321 1 回溯法 使用遞歸實(shí)現(xiàn) 每個(gè)數(shù)的取法都有N個(gè)方向 1 2 N 當(dāng)取夠N個(gè)數(shù)時(shí) 輸出一個(gè)排列 然后退后一步 取前一個(gè)數(shù)的下一個(gè)方向 即前一個(gè)數(shù) 1 并且要保證所有數(shù)字不能重復(fù) 當(dāng)前數(shù)字的所有方向都取完時(shí) 繼續(xù)退一步 一直重復(fù)到第一個(gè)數(shù)為止 functionqpl huisu list k ifk length list disp list elsefornum 1 length list ifall list num list k num qpl huisu list k 1 endendend clc clearall list zeros size 1 4 qpl huisu list 1 2 遞歸算法 以 1 2 3 4 5 為例說(shuō)明 1 一個(gè)數(shù)的全排列就是其本身 2 首先看最后兩個(gè)數(shù)4 5 它們的全排列為45和54 即以4開頭的5的全排列和以5開頭的4的全排列 3 再看后三個(gè)數(shù)3 4 5 它們的全排列為 345 354 435 453 534 543即以3開頭的和 4 5 的全排列的組合 以4開頭的和 3 5 的全排列的組合和以5開頭的和 3 4 的全排列的組合 為了更容易理解 將數(shù)組中的所有的數(shù)分別與第一個(gè)數(shù)交換 這樣就總是在處理后n 1個(gè)數(shù)的全排列 可以推斷 設(shè)一組數(shù) 全排列為 1 2345 2 1345 3 2145 4 2315 5 2341 12 345 13 245 14 325 15 342 123 45 124 35 125 34 1234 5 1235 4 r 1 r 3 r 2 r 5 r 4 k 1 5 k 3 5 k 2 5 k 4 5 12345 12354 functionqpl list r ifr length list disp list elsefork r length list list r k list k r qpl list r 1 list r k list k r endend clc clearall list 1 4qpl list 1 八 Matlab計(jì)時(shí)函數(shù)介紹 1 calendar 返回當(dāng)前日歷2 calendar year month 反回指定的年月日歷 3 calendar data 返回公元0000年算起的天數(shù)的日歷 4 cputime 以秒返回cpu當(dāng)前時(shí)間 5 tic toc啟用 關(guān)閉計(jì)時(shí)器 6 clock yearmonthdayhourminuteseconds 作用 計(jì)算運(yùn)行程序所用的時(shí)間 tic 你的Matlab程序 time toc Matlab程序的運(yùn)行時(shí)間 t0 clock 你的Matlab程序 time etime clock t0 Matlab程序的運(yùn)行時(shí)間 t0 cputime 你的Matlab程序 time cputime t0 Matlab程序的運(yùn)行時(shí)間 Matlab計(jì)時(shí)函數(shù)的調(diào)用 九 程序設(shè)計(jì)優(yōu)化 以矩陣為操作主體以向量運(yùn)算代替循環(huán)運(yùn)算 提倡矩陣操作tic x 1 fori 1 1000 y i sin x x x 0 1 pi end tocelapsed time 0 0500tic x 1 0 1 pi 1000 pi y sin x tocelapsed time 0 0100 在多重循環(huán)的情況下 建議外循環(huán)執(zhí)行循環(huán)次數(shù)少的 內(nèi)循環(huán)執(zhí)行循環(huán)次數(shù)多的 例 生成5 10000的Hilbert矩陣 其中hi j 1 i j 1 Test2 mticforj 1 10000fori 1 5H i j 1 i j 1 endendtoc Test1 mticfori 1 5forj 1 10000H i j 1 i j 1 endendtoc test1elapsed time 0 2970 test2elapsed time 0 6100 大型矩陣預(yù)先定維大型矩陣動(dòng)態(tài)的定維會(huì)降低程序運(yùn)行效率 所以 應(yīng)預(yù)先估計(jì)變量的最大維數(shù) 用zeros或ones等進(jìn)行預(yù)先定維 tic H zeros 5 10000 fori 1 5forj 1 10000H i j 1 i j 1 endendtoc tic H zeros 5 10000 fori 1 5H i 1 i i 9999 endtoc test1elapsed time 0 2970 test2elapsed time 0 0310 優(yōu)先考慮內(nèi)在函數(shù)采用有效算法提高內(nèi)存使用效率主要的命令 clear 清除變量 pack 將變量存在磁盤再載入 quit 退出Matlab環(huán)境 save 將變量數(shù)據(jù)存入文件 load 將文件數(shù)據(jù)加載進(jìn)入工作空間 十 數(shù)據(jù)類型 1 數(shù)值型double64 bit雙精度single32 bit單精度int3232 bitsignedint1616 bitsignedint88 bitsigneduint3232 bitunsigneduint1616 bitunsigneduint88 bitunsignedformatlong改變小數(shù)點(diǎn)后顯示位數(shù) 字符串用單引號(hào)輸入或賦值 字符串作為字符數(shù)組存儲(chǔ) 每個(gè)字符占兩個(gè)字節(jié)字符串的每個(gè)字符都是都是字符數(shù)組的一個(gè)元素 s symbolic s symbolic size s ans 18 s 3 ans m 2 字符串型 字符串的轉(zhuǎn)換double字符串轉(zhuǎn)換為數(shù)值代碼char將ASCII轉(zhuǎn)化為字符串num2str數(shù)字轉(zhuǎn)換為字符串int2str整數(shù)轉(zhuǎn)換為字符串mat2str矩陣轉(zhuǎn)換為字符串str2num轉(zhuǎn)換字符串為數(shù)字str2double將字符串矩陣轉(zhuǎn)換成雙精度數(shù)sprintf將數(shù)據(jù)格式化成字符串str2mat 將多個(gè)字符串組合為矩陣 doub

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論