




已閱讀5頁,還剩25頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
2019/7/10,1,第三部分 自定義函數(shù),Matlab,2019/7/10,2,1. MATLAB 函數(shù)簡介,M文件是腳本文件。 腳本文件只是用于存儲MATLAB語句。 當(dāng)一個腳本文件被執(zhí)行時,和直接在命令窗口中直接鍵入MATLAB 語句所產(chǎn)生的結(jié)果是一樣的。 腳本文件分享命令窗口中的工作區(qū),所以所有的在腳本文件運(yùn)行之前定義的變量都可以在腳本文件中運(yùn)行,所有在腳本文件中創(chuàng)建的變量在腳本文件運(yùn)行之后仍然存在工作區(qū)。 一個腳本文件沒有輸入?yún)?shù),也不返回結(jié)果。 所有腳本文件可以通過存于工作區(qū)中的數(shù)據(jù)進(jìn)行交互。,2019/7/10,3,MATLAB 函數(shù)是一種特殊形式的M 文件,它運(yùn)行在獨(dú)立的工作區(qū)。 它通過輸入?yún)?shù)列表接受輸入數(shù)據(jù),它通過輸出參數(shù)列表返回結(jié)果給輸出參數(shù)列表。 MATLAB 函數(shù)的基本形式如下:,2019/7/10,4,在function 語句的第一個行注釋被稱為H1注釋行。 是對本函數(shù)功能的總結(jié)。 重要性在于,通過lookfor 命令它能被搜索到并顯示出來。 從H1 注釋行到第一個空行或第一個可執(zhí)行性語句可以通過help 命令或幫助窗口搜索到。它們則應(yīng)包含如何使用這個函數(shù)的簡單總結(jié)。 函數(shù)文件的文件名與函數(shù)名必須相同!,2019/7/10,5,自定義函數(shù)的簡單例子。 函數(shù)dist2 用于計算笛卡爾坐標(biāo)系中點(diǎn)(x1,y1)與點(diǎn)(x2,y2)之間的距離。(把以下代碼保存成dist2.m 文件) 一個簡單的利用這個函數(shù)的例子test_dist2 test_dist2:腳本文件被執(zhí)行時,它的結(jié)果顯示 函數(shù)dist2 也支持MATLAB 幫助子系統(tǒng)。如果你鍵入“help dist2”,將會得到的結(jié)果 鍵入“l(fā)ookfor dist2”,2019/7/10,6,為了仔細(xì)觀察工作區(qū)在函數(shù)執(zhí)行前后的變化,我們將在MATLAB 調(diào)試器中加載函數(shù)dist2 和腳本文件test_dist2。在函數(shù)加載前,加載中,加載后設(shè)置斷點(diǎn),觀察工作區(qū)的變量情況。,2019/7/10,7,2. 在MATLAB 中傳遞變量: 按值傳遞機(jī)制,maltab 程序與它們函數(shù)之間的交互用是按值傳遞機(jī)制。 當(dāng)一個函數(shù)調(diào)用發(fā)生時,MATLAB 將會復(fù)制實(shí)參生成一個副本,然后把它們傳遞給函數(shù)。 這次復(fù)制是非常重要的,因?yàn)樗馕吨m然函數(shù)修改了輸入?yún)?shù),但它并沒有影響到調(diào)用者的原值。,2019/7/10,8,例子: function out = sample(a, b) fprintf(In Sample: a = %f, b = %f %fn,a,b); a = b(1) + 2*a; b = a .* b; out = a + b(1); fprintf(In Sample: a = %f, b = %f %f n,a,b);,2019/7/10,9,調(diào)用這個函數(shù)的檢測程序: a = 2; b = 6 4; fprintf(Before sample: a = %f, b = %f %fn, a, b); out = sample(a, b); fprintf(After sample: a = %f, b = %f %fn,a,b); fprintf(After sample: out = %f n, out);,2019/7/10,10,當(dāng)這個程序被執(zhí)行將產(chǎn)生如下的結(jié)果 test_sample Before sample: a = 2.000000, b = 6.000000 4.000000 In Sample: a = 2.000000, b = 6.000000 4.000000 In Sample: a = 10.000000, b = 60.000000 40.000000 After sample: a = 2.000000, b = 6.000000 4.000000 After sample: out = 70.000000 注意,a 和b 在函數(shù)sample 內(nèi)都改變了,但這些改變對調(diào)用函數(shù)中的值并沒有任何的影響。,2019/7/10,11,例:直角坐標(biāo)與極坐標(biāo)的轉(zhuǎn)換: 在笛卡爾平面上的一點(diǎn)的坐標(biāo)既可以通過直角坐標(biāo)(x,y)來描述,也可以通過極坐標(biāo)(r,)來描述。 編寫兩個函數(shù)rect2polar 和polar2rect,用來實(shí)現(xiàn)兩坐標(biāo)體系的轉(zhuǎn)換。其中 單位于為度。 參看函數(shù): rect2polar 和polar2rect,2019/7/10,12,例: 數(shù)據(jù)選擇性排序 選擇性排序的MATLAB 代碼ssort.m 調(diào)用選擇性排序函數(shù)的程序test_ssort.m,2019/7/10,13,3. 選擇性參數(shù),如何知道一個MATLAB 函數(shù)有幾個輸入輸出參數(shù)呢,以及函數(shù)相應(yīng)的功能呢? nargin 這個函數(shù)返回調(diào)用這個函數(shù)時所需要的實(shí)際輸入?yún)?shù)的個數(shù) nargout 這個函數(shù)返回調(diào)用這個函數(shù)時所需要的實(shí)際輸出參數(shù)的個數(shù) nargchk 如要一個函數(shù)調(diào)用被調(diào)用時參數(shù)過多或過少,那么nargchk 函數(shù)將返回一個標(biāo)準(zhǔn)錯誤信息,2019/7/10,14,error 顯示錯誤信息,并中止函數(shù)以免它產(chǎn)生這個錯誤。如果參數(shù)錯誤是致命的,這個函數(shù)將會被調(diào)用。 warning 顯示警告信息并繼續(xù)執(zhí)行函數(shù),如果參數(shù)錯誤不是致命的,執(zhí)行還能繼續(xù),則這個將會被調(diào)用。 inputname 這個函數(shù)將會返回對于特定參數(shù)個數(shù)的實(shí)際變量名。,2019/7/10,15,例如: message = nargchk(min_args, max_args, num_args); 其中min_args 是指參數(shù)的最小個數(shù),max_args 是指數(shù)的最大個數(shù),num_args 是指參數(shù)的實(shí)際個數(shù)。如果參數(shù)的個數(shù)不在允許的范圍,將會產(chǎn)生一個標(biāo)準(zhǔn)的錯誤信息。如果參數(shù)的個數(shù)在允許的范圍之內(nèi),那么這個函數(shù)將返回一個空字符。,2019/7/10,16,4.用全局內(nèi)存分享數(shù)據(jù),全局變量的聲明基本形式: global var1,var2,var3 在一個程序,可以利用全局內(nèi)存,在函數(shù)之間對大規(guī)模數(shù)據(jù)進(jìn)行交換。,2019/7/10,17,例題:編寫一個函數(shù)random0,使之產(chǎn)生一個數(shù)組,數(shù)組中包括一個或多個隨機(jī)數(shù),它的取值范圍是0ran1.0,它的順序由下面公式指定。 函數(shù)應(yīng)當(dāng)有一個或多個輸入?yún)?shù)(n 和m),用來指定返回數(shù)組的大小。如果它有一個參數(shù),函數(shù)將產(chǎn)生一個n 階方陣;如果有兩個參數(shù),函數(shù)將會產(chǎn)生一個nm 的數(shù)組。種子n0 的初始值將會由函數(shù)seed 指定。,2019/7/10,18,程序測試 如是程序產(chǎn)生的這些數(shù)是真正的取值范圍在0ran1.0 的等可能性隨機(jī)數(shù),那么它們的平均數(shù)應(yīng)接近0.5,它們的標(biāo)準(zhǔn)差應(yīng)接近 。 進(jìn)一步說,如果一個如果把區(qū)間0, 1)分許多相同長度的子區(qū)間。那么落在每一個子區(qū)間的隨機(jī)數(shù)的數(shù)目應(yīng)當(dāng)是相同的。我們可以利用柱狀統(tǒng)計圖來統(tǒng)計落于每一個子區(qū)間的隨機(jī)數(shù)的數(shù)目。,2019/7/10,19,測試步驟: 1.調(diào)用函數(shù)seed,把new_seed 設(shè)置為1024 2.調(diào)用random0(4),觀察得到的結(jié)果 3.再次調(diào)用rnadom0(4),證明每次產(chǎn)生的數(shù)不相同 4.重新調(diào)用函數(shù)seed,把new_seed 設(shè)置為1024 5.再次調(diào)用rnadom0(4),觀察與2 得到的結(jié)果是否相同 6.調(diào)用random0(2, 3)證明函數(shù)可以輸入兩個參數(shù) 7.調(diào)用random0(1, 20000)并計算產(chǎn)生的數(shù)組的平均數(shù)和標(biāo)準(zhǔn)差。看得到結(jié)果是否接近0.5,它們的標(biāo)準(zhǔn)差應(yīng)接近,2019/7/10,20, arr = random0(1,20000); mean(arr) ans = 0.5020 std(arr) ans = 0.2881 hist(arr,10); title(bf Historygram of the Output of random0); xlabel(Bin) ylabel(Count),2019/7/10,21,在MATLAB 中,有兩個產(chǎn)生隨機(jī)數(shù)的內(nèi)建函數(shù)。 rand 用于產(chǎn)生等可能的隨機(jī)數(shù) randn 用于產(chǎn)生普通的隨機(jī)數(shù) 這兩個函數(shù)要遠(yuǎn)比我們創(chuàng)建這個隨機(jī)數(shù)發(fā)生器要快得多,產(chǎn)生的隨機(jī)數(shù)也多得多。如果你需要在你的程序中創(chuàng)建一些隨機(jī)數(shù),可調(diào)用它們。 調(diào)用函數(shù)rand 和randn 的形式: rand 產(chǎn)生一個隨機(jī)數(shù) rand(n) 產(chǎn)生一個nn 的隨機(jī)數(shù)數(shù)組 rand(n, m) 產(chǎn)生一個nm 的隨機(jī)數(shù)數(shù)組,2019/7/10,22,5. 在函數(shù)調(diào)用兩次之間本地數(shù)據(jù)的存儲,當(dāng)一個函數(shù)執(zhí)行結(jié)束,由這個函數(shù)創(chuàng)建的特定的工作區(qū)將會被破壞,所以在這個函數(shù)中的所有本地變量將會消失。 在有些情況下,多次調(diào)用一個函數(shù),存儲一些本地變量的信息還是有用的。例如,我們想創(chuàng)建一個計數(shù)器,對函數(shù)調(diào)用的次數(shù)進(jìn)行計數(shù)。如果每一次函數(shù)結(jié)束執(zhí)行,計算器就會被破壞,那么計數(shù)不超過1。,2019/7/10,23,持久內(nèi)存(persistent memory)是內(nèi)存的一種類型,在函數(shù)上一次調(diào)用之后,這一步調(diào)用之前,本地變量被保存在持久內(nèi)存,值不變。 持久變量聲明形式: persistent var1 var2 var3 .,2019/7/10,24,6. 函數(shù)的函數(shù)(function functions),函數(shù)的函數(shù)(function functions)是指函數(shù)的輸入?yún)?shù)中含有其他的函數(shù),傳遞給函數(shù)的函數(shù)的變量名一般情況應(yīng)用于這個函數(shù)執(zhí)行的過程中。 fzero(cos,0 pi) ans = 1.5708 fzero(exp(x)-2,0 1) ans = 0.6931,2019/7/10,25,函數(shù)的函數(shù)操作的關(guān)鍵字有兩個專門的maltab 函數(shù):eval 和feval。 函數(shù)eval 對一個字符串進(jìn)行求值,就如它在命令窗口中已經(jīng)鍵入了一樣。 函數(shù)feval 用一個特定的輸入值對命名的函數(shù)進(jìn)行求值。,2019/7/10,26, x = eval(sin(pi/4) x = 0.7071 x = feval(sin, x = 0.7071,2019/7/10,27,7 . 子函數(shù)和私有函數(shù),在一個單個的文件中我們可以創(chuàng)建多個函數(shù)。如果超過1 個的函數(shù)出現(xiàn)在一個文件中,那么最上面的那個函數(shù)為普通函數(shù),下面的函數(shù)稱為子函數(shù)或中間函數(shù)。 子函數(shù)看起來和普通函數(shù)一樣,但是只能被同一文件中的函數(shù)調(diào)用。,2019/7/10,28,function avg, med = mystats(u) %MYSTATS Find mean and median with internal functions. % Function MYSTATS calculates the average and median % of a data set using subfunctions. n = length(u); avg = mean(u, n); med = median (u, n); function a = mean(v, n) % Subfunction to calculate average. a = sum(v) / n; function m = median(v, n) % Subfunction to calculate median w = sort(v); if rem(n, 2) =1 m = w(n+1)/2); else m = (w(n/2) + w(n/2 + 1)/2; end,2019/7/10,29,作業(yè): 1. 道路交通密度。 函數(shù)random0 將在0.0, 1.0產(chǎn)生一個等可能性隨機(jī)數(shù)。如果隨機(jī)事件結(jié)果是等可能性,這個函數(shù)適合模擬這類隨機(jī)事件。但是,很多事件的發(fā)生都不是等可能性的,那么這個函數(shù)不適合模擬這類情況。 例如,一交通工程師研究在一段時間隔t 內(nèi)通過某一地點(diǎn)汽車數(shù),發(fā)現(xiàn)k 輛汽車通過一指定地點(diǎn)可能性為: ! 它的分布符合指數(shù)分布。指數(shù)分布在科研和工程上有很多的應(yīng)用。例如,在時間t 內(nèi)接打電話的次k,指定容器內(nèi)的病
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 無償油罐租賃協(xié)議書
- 擺攤雨傘轉(zhuǎn)讓協(xié)議書
- 期貨買賣委托協(xié)議書
- 法務(wù)合同定制協(xié)議書
- 收購玉米借款協(xié)議書
- 教師司機(jī)安全協(xié)議書
- 淘寶消保服務(wù)協(xié)議書
- 村級垃圾運(yùn)輸協(xié)議書
- 搭棚空地出租協(xié)議書
- 收養(yǎng)協(xié)議解除協(xié)議書
- 2025年郵政社招筆試試題及答案
- 2025年保密觀知識測試題及答案
- 創(chuàng)新工程實(shí)踐智慧樹知到期末考試答案章節(jié)答案2024年北京大學(xué)等跨校共建
- 3D打印技術(shù)與應(yīng)用智慧樹知到期末考試答案2024年
- 合作取得更大的成功辯論稿范文六篇
- 形式邏輯新解知到章節(jié)答案智慧樹2023年上海財經(jīng)大學(xué)
- 安裝調(diào)試培訓(xùn)及驗(yàn)收方案
- 現(xiàn)場跟蹤審計工作要點(diǎn)
- 公制螺紋公差速查表
- 《山東省消防條例》(2022年最新版)[1]
- T∕CVIA 73-2019 視覺疲勞測試與評價方法 第2部分:量表評價方法
評論
0/150
提交評論