




已閱讀5頁,還剩25頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
2019/7/10,1,第三部分 自定義函數(shù),Matlab,2019/7/10,2,1. MATLAB 函數(shù)簡(jiǎn)介,M文件是腳本文件。 腳本文件只是用于存儲(chǔ)MATLAB語句。 當(dāng)一個(gè)腳本文件被執(zhí)行時(shí),和直接在命令窗口中直接鍵入MATLAB 語句所產(chǎn)生的結(jié)果是一樣的。 腳本文件分享命令窗口中的工作區(qū),所以所有的在腳本文件運(yùn)行之前定義的變量都可以在腳本文件中運(yùn)行,所有在腳本文件中創(chuàng)建的變量在腳本文件運(yùn)行之后仍然存在工作區(qū)。 一個(gè)腳本文件沒有輸入?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 語句的第一個(gè)行注釋被稱為H1注釋行。 是對(duì)本函數(shù)功能的總結(jié)。 重要性在于,通過lookfor 命令它能被搜索到并顯示出來。 從H1 注釋行到第一個(gè)空行或第一個(gè)可執(zhí)行性語句可以通過help 命令或幫助窗口搜索到。它們則應(yīng)包含如何使用這個(gè)函數(shù)的簡(jiǎn)單總結(jié)。 函數(shù)文件的文件名與函數(shù)名必須相同!,2019/7/10,5,自定義函數(shù)的簡(jiǎn)單例子。 函數(shù)dist2 用于計(jì)算笛卡爾坐標(biāo)系中點(diǎn)(x1,y1)與點(diǎn)(x2,y2)之間的距離。(把以下代碼保存成dist2.m 文件) 一個(gè)簡(jiǎn)單的利用這個(gè)函數(shù)的例子test_dist2 test_dist2:腳本文件被執(zhí)行時(shí),它的結(jié)果顯示 函數(shù)dist2 也支持MATLAB 幫助子系統(tǒng)。如果你鍵入“help dist2”,將會(huì)得到的結(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)一個(gè)函數(shù)調(diào)用發(fā)生時(shí),MATLAB 將會(huì)復(fù)制實(shí)參生成一個(gè)副本,然后把它們傳遞給函數(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)用這個(gè)函數(shù)的檢測(cè)程序: 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)這個(gè)程序被執(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)都改變了,但這些改變對(duì)調(diào)用函數(shù)中的值并沒有任何的影響。,2019/7/10,11,例:直角坐標(biāo)與極坐標(biāo)的轉(zhuǎn)換: 在笛卡爾平面上的一點(diǎn)的坐標(biāo)既可以通過直角坐標(biāo)(x,y)來描述,也可以通過極坐標(biāo)(r,)來描述。 編寫兩個(gè)函數(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ù),如何知道一個(gè)MATLAB 函數(shù)有幾個(gè)輸入輸出參數(shù)呢,以及函數(shù)相應(yīng)的功能呢? 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ù)過多或過少,那么nargchk 函數(shù)將返回一個(gè)標(biāo)準(zhǔn)錯(cuò)誤信息,2019/7/10,14,error 顯示錯(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í)際變量名。,2019/7/10,15,例如: message = nargchk(min_args, max_args, num_args); 其中min_args 是指參數(shù)的最小個(gè)數(shù),max_args 是指數(shù)的最大個(gè)數(shù),num_args 是指參數(shù)的實(shí)際個(gè)數(shù)。如果參數(shù)的個(gè)數(shù)不在允許的范圍,將會(huì)產(chǎn)生一個(gè)標(biāo)準(zhǔn)的錯(cuò)誤信息。如果參數(shù)的個(gè)數(shù)在允許的范圍之內(nèi),那么這個(gè)函數(shù)將返回一個(gè)空字符。,2019/7/10,16,4.用全局內(nèi)存分享數(shù)據(jù),全局變量的聲明基本形式: global var1,var2,var3 在一個(gè)程序,可以利用全局內(nèi)存,在函數(shù)之間對(duì)大規(guī)模數(shù)據(jù)進(jìn)行交換。,2019/7/10,17,例題:編寫一個(gè)函數(shù)random0,使之產(chǎn)生一個(gè)數(shù)組,數(shù)組中包括一個(gè)或多個(gè)隨機(jī)數(shù),它的取值范圍是0ran1.0,它的順序由下面公式指定。 函數(shù)應(yīng)當(dāng)有一個(gè)或多個(gè)輸入?yún)?shù)(n 和m),用來指定返回?cái)?shù)組的大小。如果它有一個(gè)參數(shù),函數(shù)將產(chǎn)生一個(gè)n 階方陣;如果有兩個(gè)參數(shù),函數(shù)將會(huì)產(chǎn)生一個(gè)nm 的數(shù)組。種子n0 的初始值將會(huì)由函數(shù)seed 指定。,2019/7/10,18,程序測(cè)試 如是程序產(chǎn)生的這些數(shù)是真正的取值范圍在0ran1.0 的等可能性隨機(jī)數(shù),那么它們的平均數(shù)應(yīng)接近0.5,它們的標(biāo)準(zhǔn)差應(yīng)接近 。 進(jìn)一步說,如果一個(gè)如果把區(qū)間0, 1)分許多相同長(zhǎng)度的子區(qū)間。那么落在每一個(gè)子區(qū)間的隨機(jī)數(shù)的數(shù)目應(yīng)當(dāng)是相同的。我們可以利用柱狀統(tǒng)計(jì)圖來統(tǒng)計(jì)落于每一個(gè)子區(qū)間的隨機(jī)數(shù)的數(shù)目。,2019/7/10,19,測(cè)試步驟: 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ù)可以輸入兩個(gè)參數(shù) 7.調(diào)用random0(1, 20000)并計(jì)算產(chǎn)生的數(shù)組的平均數(shù)和標(biāo)準(zhǔn)差??吹玫浇Y(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 中,有兩個(gè)產(chǎn)生隨機(jī)數(shù)的內(nèi)建函數(shù)。 rand 用于產(chǎn)生等可能的隨機(jī)數(shù) randn 用于產(chǎn)生普通的隨機(jī)數(shù) 這兩個(gè)函數(shù)要遠(yuǎn)比我們創(chuàng)建這個(gè)隨機(jī)數(shù)發(fā)生器要快得多,產(chǎn)生的隨機(jī)數(shù)也多得多。如果你需要在你的程序中創(chuàng)建一些隨機(jī)數(shù),可調(diào)用它們。 調(diào)用函數(shù)rand 和randn 的形式: rand 產(chǎn)生一個(gè)隨機(jī)數(shù) rand(n) 產(chǎn)生一個(gè)nn 的隨機(jī)數(shù)數(shù)組 rand(n, m) 產(chǎn)生一個(gè)nm 的隨機(jī)數(shù)數(shù)組,2019/7/10,22,5. 在函數(shù)調(diào)用兩次之間本地?cái)?shù)據(jù)的存儲(chǔ),當(dāng)一個(gè)函數(shù)執(zhí)行結(jié)束,由這個(gè)函數(shù)創(chuàng)建的特定的工作區(qū)將會(huì)被破壞,所以在這個(gè)函數(shù)中的所有本地變量將會(huì)消失。 在有些情況下,多次調(diào)用一個(gè)函數(shù),存儲(chǔ)一些本地變量的信息還是有用的。例如,我們想創(chuàng)建一個(gè)計(jì)數(shù)器,對(duì)函數(shù)調(diào)用的次數(shù)進(jìn)行計(jì)數(shù)。如果每一次函數(shù)結(jié)束執(zhí)行,計(jì)算器就會(huì)被破壞,那么計(jì)數(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)用于這個(gè)函數(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)鍵字有兩個(gè)專門的maltab 函數(shù):eval 和feval。 函數(shù)eval 對(duì)一個(gè)字符串進(jìn)行求值,就如它在命令窗口中已經(jīng)鍵入了一樣。 函數(shù)feval 用一個(gè)特定的輸入值對(duì)命名的函數(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ù),在一個(gè)單個(gè)的文件中我們可以創(chuàng)建多個(gè)函數(shù)。如果超過1 個(gè)的函數(shù)出現(xiàn)在一個(gè)文件中,那么最上面的那個(gè)函數(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)生一個(gè)等可能性隨機(jī)數(shù)。如果隨機(jī)事件結(jié)果是等可能性,這個(gè)函數(shù)適合模擬這類隨機(jī)事件。但是,很多事件的發(fā)生都不是等可能性的,那么這個(gè)函數(shù)不適合模擬這類情況。 例如,一交通工程師研究在一段時(shí)間隔t 內(nèi)通過某一地點(diǎn)汽車數(shù),發(fā)現(xiàn)k 輛汽車通過一指定地點(diǎn)可能性為: ! 它的分布符合指數(shù)分布。指數(shù)分布在科研和工程上有很多的應(yīng)用。例如,在時(shí)間t 內(nèi)接打電話的次k,指定容器內(nèi)的病
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2026學(xué)年隴南地區(qū)武都區(qū)三上數(shù)學(xué)期末學(xué)業(yè)質(zhì)量監(jiān)測(cè)模擬試題含解析
- 2025-2026學(xué)年遼寧省葫蘆島市綏中縣數(shù)學(xué)三年級(jí)第一學(xué)期期末預(yù)測(cè)試題含解析
- 2025-2026學(xué)年甘孜藏族自治州道孚縣數(shù)學(xué)三年級(jí)第一學(xué)期期末達(dá)標(biāo)檢測(cè)模擬試題含解析
- 2025-2026學(xué)年保定市安新縣三上數(shù)學(xué)期末學(xué)業(yè)水平測(cè)試模擬試題含解析
- 2024年江蘇省揚(yáng)州市江都區(qū)大橋片數(shù)學(xué)三年級(jí)第一學(xué)期期末檢測(cè)試題含解析
- 七年級(jí)英語下冊(cè) Units 7-12 復(fù)習(xí)課件
- 八年級(jí)生物上冊(cè)-動(dòng)物行為的生理基礎(chǔ)-蘇教版課件
- 2025年衛(wèi)生資格考試切實(shí)可行的備考措施試題及答案
- 自考行政管理2025年細(xì)致準(zhǔn)備試題及答案歸納
- 時(shí)間安排與衛(wèi)生資格考試試題及答案
- 語文綜合實(shí)踐:走進(jìn)傳統(tǒng)節(jié)日探尋文化根脈 課件-【中職專用】高一語文同步課堂(高教版2023基礎(chǔ)模塊下冊(cè))
- 教師課堂教學(xué)評(píng)價(jià)標(biāo)準(zhǔn)
- 去極端化教育宣講
- 光伏防火培訓(xùn)課件
- 家長(zhǎng)講堂:法制主題教育
- 腫瘤科進(jìn)修心得體會(huì)護(hù)理
- 第五單元 生物與環(huán)境 大單元教學(xué)設(shè)計(jì)-2023-2024學(xué)年科學(xué)四年級(jí)下冊(cè)蘇教版
- 生長(zhǎng)激素在臨床中的應(yīng)用
- 武漢市2025屆高中畢業(yè)生二月調(diào)模擬卷試題
- 衛(wèi)生監(jiān)督信息員培訓(xùn)課件
- 杜邦分析法公式
評(píng)論
0/150
提交評(píng)論