第一篇:MATLAB第一章作業答案
第一章
MATLAB概況與基本操作
1.選擇題(每題2分,共20分):
(1)最初的MATLAB核心程序是采用D語言編寫的。A.PASCAL B.C C.BASIC D.FORTRAN(2)即將于2011年9月發布的MATLAB新版本的編號為C。
A.MATLAB 2011Ra B.MATLAB 2011Rb C.MATLAB R2011b D.MATLAB R2011a(3)在默認設置中,MATLAB中的注釋語句顯示的顏色是B。A.黑色 B.綠色 C.紅色 D.藍色
(4)如果要以科學計數法顯示15位有效數字,使用的命令是A。
A.format long e B.format long C.format long g D.format long d(5)在命令窗口新建變量a、b,如果只查看變量a的詳細信息,使用的命令為A。A.whos a B.who a C.who D.whos(6)如果要清除工作空間的所有變量,使用的命令為C。A.clear B.clear all C.兩者都可 D.兩者都不可
(7)在創建變量時,如果不想立即在命令窗口中輸出結果,可以在命令后加上B。A.冒號 B.分號 C.空格 D.逗號
(8)如果要重新執行以前輸入的命令,可以使用D鍵。
A.下箭頭↓ B.右箭頭→ C.左箭頭← D.上箭頭↑
(9)如果要查詢函數det的功能和用法,并顯示在命令窗口,應使用命令C。A.doc B.lookfor C.help D.三者均可
(10)如果要啟動Notebook文檔,下列D操作是可行的。A.在命令窗口輸入notebook命令
B.在命令窗口輸入notebook filename命令 C.在Word中啟動M-book文檔 D.三者均可
2.填空題(每空1分,共20分):
(1)MATLAB是matrix和laboratory兩個單詞前三個字母的組合,意為“矩陣實驗室”,它的創始人是Cleve Moler和Jack Little。
(2)在MATLAB的默認設置中,關鍵字顯示的字體為藍色,命令、表達式、計算結果顯示的字體為黑色,字符串顯示的字體為褐紅色,注釋顯示的字體為綠色,錯誤信息顯示的字體為紅色。
(3)在命令窗口中,輸出結果顯示為各行之間添加空行的命令為format loose,各行之間不添加空行的命令為format compact。
(4)在MATLAB中,各種標點符號的作用是不同的。例如,空格的作用是分隔數組每行各個元素,逗號的作用是分隔數組每行各個元素或函數的各個輸入參數,分號的作用是作為不顯示命令結果的命令行的結尾或分隔數組各列,冒號的作用是生成一維數組或表示數組全部元素,百分號的作用是引導一行注釋,?的作用是連接相鄰兩行,感嘆號的作用是調用操作系統命令。3.程序設計題(每題10分,共40分)
(1)以25m/s的初速度向正上方投球(g=9.8m/s2),計算到達最高點的時間tp以及球從出發點到最高點的距離hp。
解:根據物理學知識,物體上拋運動的速度與經過的時間之間的關系為vp?v0?gtp,因此所需要的時間為tp?v0?vpg。而到達最高點時的速度vp?0,因此可根據此公式求出tp:
v0=25;g=9.8;vp=0;tp=(v0-vp)/g
tp = 2.5510 而到達最高點所走過的距離為hp?v0tp?12gtp,因此有 2hp=v0*tp-1/2*g*tp^2
hp = 31.8878
(2)假設建造一個半球形的圓屋頂,其外半徑為50英尺,固體混凝土墻的厚度為9英寸,計算出需要的水泥體積大小v。
解:首先將英寸轉換為英尺: ft=1;in=0.0833*ft;
屋頂的體積為兩個半球體積之差: R=50;t=9*in;r=R-t;V=2*pi*(R^3-r^3)
V = 3.4802e+004
(3)一架噴氣式飛機以600英里的時速在距離水平面100英尺的高度飛行,如果地面陡然以4°的坡度升高,計算出多少時間(tx)之前為了避免飛機撞向地面飛行員就必須提升機頭? 解:首先應該注意將英里轉換為英尺: ft=1;li=5280*ft
li = 5280
其次,要使飛機不撞向地面,那么飛機應該在地面的高度小于100英尺之前就提升機頭,而飛機在達到該點時走過的距離應該為 L=100*tand(4)
L = 6.9927
飛機的速度(以英尺/秒表示)v=li/3600
v = 1.4667
因此飛機需要的時間為 tx=L/v
tx = 4.7677
(4)一周的辛苦工作之后,Kirk開車到Helen,Georgia做一次漂流旅行(去消暑),他從家出發行駛200英里前往Timbuktu,然后向右轉,向東行駛400英里到達Helen。編寫一腳本計算Kirk家到Helen的直線距離d的大小。
解:建立直角坐標系,以Kirk家為坐標原點,向北為+y方向,向東為+x方向,則Helen的坐標為 x=400;y=200;
因此Kirk家到Helen的直線距離為 d=sqrt(x^2+y^2)
d = 447.2136
4.實踐操作題(每題10分,共20分)(1)先建立自己的工作目錄,再將自己的工作目錄設置到MATLAB搜索路徑下。請寫出操作步驟或用Matlab命令實現。用help命令能查詢到自己的工作目錄嗎? 解:步驟如下:
1.先在硬盤上建立一個工作文件夾,如:c:mywork。
2.在matlab的文件菜單中選擇Set Path?菜單項,則打開一個對話框如圖1所示。
圖1 Set Path對話框
3.點擊Add Folder?按鈕,彈出一個新的對話框如圖2所示。
圖2 Add Folder to Path對話框
4.在該對話框中找到c:mywork文件夾(圖3),點擊確定按鈕,對話框關閉,回到圖1中的對話框,此時在該對話框中的MATLAB search path列表中出現了c:mywork文件夾(圖4)。
圖3 添加c:mywork文件夾
圖4 保存設置路徑
5.點擊Save按鈕,保存所設置的搜索路徑,然后點擊Close按鈕關閉對話框。注意,一定要先Save再Close,不然搜索路徑就沒有設置成功。
(2)利用MATLAB的幫助功能查詢inv函數的功能及用法,并將顯示的英文信息翻譯為中文。help inv
INV Matrix inverse.INV(X)is the inverse of the square matrix X.A warning message is printed if X is badly scaled or nearly singular.See also SLASH, PINV, COND, CONDEST, LSQNONNEG, LSCOV.Overloaded functions or methods(ones with the same name in other directories)help gf/inv.m help lti/inv.m help idmodel/inv.m help uss/inv.m help umat/inv.m help ufrd/inv.m help ndlft/inv.m help atom/inv.m help sym/inv.m
Reference page in Help browser doc inv 翻譯為英文: INV:矩陣求逆
INV(X)是方陣X的逆矩陣。
如果X是壞條件數的或者接近奇異的,則會在命令窗口打印一條警告信息。
也可參閱類似函數SLASH、PINV、COND、CONDEST、LSQNOONEG、LSCOV。重載函數或方法(其他文件夾中相同名稱的函數): gf/inv.m lti/inv.m idmodel/inv.m uss/inv.m umat/inv.m ufrd/inv.m ndlft/inv.m atom/inv.m sym/inv.m 幫助瀏覽器中的參考文獻頁 doc inv
第二篇:MATLAB作業
第一章 MATLAB R2010a簡介
主要內容總結如下:
本章主要介紹了MATLAB的功能和它的用戶界面以及MATLAB R2010a的路徑搜索。MATLAB的功能是多種多樣的,有數學計算功能、圖形化顯示功能、M語言編程功能、編譯功能Simulink建模仿真功能,自動代碼生成功能,圖形用戶界面開發功能等一系列功。在介紹MATLAB R2010a用戶界面時,主要介紹了它的啟動方法,主菜單及其功能。學習心得體會:
通過本章的學習,我了解了MATLAB的基本功能,認識了它的界面和啟動方法,以及主菜單功能,被他強大的計算功能和其他功能深深吸引,學會了MATLAB,將會為我以后學習其他方面的知識提供一種工具,使學習其他的東西更加的方便。我非常喜歡這門課,所以我一定會努力學好它的。
第二章 基本使用方法
主要內容總結如下:
本章主要介紹了MATLAB中一些簡單的數學運算和常用的數學函數和數學運算符,標點符號的使用,常用的操作命令和快捷鍵,整數、浮點數、復數、邏輯變量等數據類型和他們之間的轉換,數據類型操作函數和變量,MATLAB中的關系運算符邏輯運算符等運算符和它們的優先級,以及一些基礎函數,如位操作函數、邏輯運算函數、集合函數、時間與日期函數。本章還介紹了MATLAB中的腳本文件。
學習心得體會:
通過本章的學習我了解了MATLAB中的簡單數學運算符,一些操作命令和快捷鍵,MATLAB R2010a的數據類型和運算符,還有一些基礎函數,腳本文件。我認為這些東西是基本的東西,但是我又必須要學好它們,只有把這些基礎都掌握了,才能為以后的學習打下堅實的基礎。我認為MATLAB中的許多函數我應該熟練它的作用,做到看到函數要知道其作用。我在這一部分的學習中,腳本文件的編寫對我來說有一定的困難,我以后一定多加練習,學好他們。
第三章 數組和向量
主要內容總結如下:
本章主要介紹了數組和向量兩個大的方面。其中數組介紹了數組的創建,數組的操作(如獲取數組中的元素,從數組中移除元素,數組算術操作,數組邏輯運算數組連接,切片、重排和線性化數組),和一些實例應用;向量部分介紹了向量的創建,尺寸,索引(包括數值索引、邏輯索引),縮短,向量操作(包括算術操作、邏輯操作、應用庫函數、連接、切片)等知識。學習心得體會:
通過本章的學習我對數組和向量有了一個全新的認識,這部分的學習有許多細節需要注意,如我們在從數組中移除元素時,元素必須整列整行的移除;行向量可以直接輸入,列向量輸入時中間需要用到分號;.*,./,和.^被分別用作逐個元素相乘,相除,及指數運算等等。還有一些函數如zeros,rand,diag,magic等都可以產生一些常用的數組,學習時應該熟練掌握。向量的索引對我來說是比較難的知識,剛開始學的時候不太理解,不過后來經過我反復的學習逐漸了解,這部分知識我還需要努力。向量和數組這部分知識在以后的幾章會經常用到,并且和實際聯系的也比較緊密,所以我必須要學好他們。
第四章MATLAB 的數學運算 本章主要內容總結如下:
本章主要介紹了多項式與差值,函數運算,微分方程三大模塊。其中多項式與插值主要介紹了多項式的四則運算,roots函數,polyval函數,polyder函數,多項式擬合,以及數據插值;函數運算主要介紹了函數圖像的繪制,函數的極值,數值積分和含參數函數的使用;微分積分主要介紹了常微分初值問題和常微分方程邊值問題。
學習心得體會:
通過本章的學習掌握了在MATLAB中對多項式的處理,和圖形的繪制,極值的求解,函數的求解,微分、積分的處理。本章所介紹的MATLAB處理方法處理的是高等數學中經常遇到的問題,從這里可以知道MATLAB是一種很好的數學工具。本章學習時有許多問題需要注意,如多項式在相加時要等長;繪制函數圖像的函數為fplot;使用含參數函數還可以通過匿名函數來實現,函數的參數在使用之前必須先賦值等問題。這一部分也介紹了許許多多的函數,我應該在課下熟練掌握,充分理解其作用。
第五章 字符串、單元數組和結構體
本章主要內容總結如下:
本章主要介紹了的字符串生成、執行、字符串與數值之間的轉化;單元數組的生成和一些操作;結構體的生成和一些操作。在MATLAB中,生成字符串的簡單方法為stringname=’the content of the string’.;單元數組可以通過賦值語句直接創建,也可以利用cell函數先為單元數組分配一個內存空間,然后再給各個單元賦值;結構體的生成可以是直接輸入,也可以使用結構體生成函數struct。還介紹了字符串的比較,字符串的查找和替換;單元數組的顯示和圖形顯示和單元數組元素的刪除;結構體中有添加成員變量,刪除成員變量和調用成員變量。學習心得體會:
通過本章的學習了解了字符串,單元數組,結構體的一些基本的使用技巧,學會了字符串,單元數組,結構體的創建,以及它們的一些特殊的用途,如利用函數來進行字符串與數值之間的轉化,單元數組的圖形顯示,在結構體中添加成員變量。字符串,單元數組和結構體是三種特殊的數據結構,字符串用于對字符型數據結構進行操作,單元數組和結構體數據類型允許用戶將不同類型的數據集成為一個單一的變量,因此,相關的數據可以通過一個單元數組或是結構體進行組織和操作。在這一部分的學習中,感覺比較有意思,所以對這部分知識興趣很高。覺的這一部分知識很是有用,所以應該好好學習。
第六章 MATLAB編程
本章主要內容總結如下:
本章主要介紹了MATLAB的腳本文件和編輯器/調試器,程序設計和開發,關系運算符和邏輯變量,邏輯運算符和函數,條件語句,和循環。其中腳本文件和編輯器主要介紹了腳本文件如何創建和使用,以及它的命令窗口的介紹,腳本文件的調試,如何使用腳本文件存儲數據,以及如何控制輸入和輸出;程序設計和開發主要介紹了算法和控制結構,結構化程序設計以及偽代碼;關系運算符和邏輯變量主要介紹了logical類,logical函數以及使用邏輯數組訪問數組;邏輯運算符和函數主要介紹了一些如與、或、非等邏輯運算符以及它,們的優先級別和使用方法,還介紹了短路邏輯運算符,find函數;條件語句主要介紹了if語句,elseif語句和它們的使用方法,還簡要介紹了如何輸入和輸出參數的數量;循環主要介紹了for循環,break和continue語句,使用數組作為循環索引,隱含循環,使用邏輯數組作為掩碼等知識。學習心得體會:
通過本章的學習初步掌握了MATLAB的腳本文件及其編輯和調試方法,掌握了MATLAB的程序設計和開發流程,和MATLAB的關系運算符、邏輯運算及函數操作,MATLAB中的流程控制語句包括if語句,switch語句,contine語句。本章的腳本文件對今后的學習非常有幫助,條件語句和循環語句可用于解決實際生活中許多問題。我對這一部分的認識是:感覺不是太難,又不會的地方也及時請教老師,所以沒有遺留太多疑問。再者,大一時也學過條件語句和循環語句,所以學起來沒有那么的吃力。習題如下:
編程:求[100]以內的全部素數(素數是大于1且除了1和它本身以外不能被其他任何整數所整除的整數。為了判斷整數m是否為素數,一個最簡單的辦法用2,3,4,5, m-1這些數逐個去除m看能否除盡,如果全都除不盡,則m是素數;否則,只要其中一個能除盡,則m不是素數。)
程序如下: disp(2)for m=3:1:100 for x=2:1:m-1 if rem(m,x)==0 break
elseif(x>=m-1)disp(m)end
end end
第七章 MATLAB的符號處理
本章主要內容總結如下:
本章主要介紹了符號運算的簡介,符號表達式的化簡與替換,符號函數圖形的繪制,符號微積分,符號方程的求解,符號積分變換,MAPLE函數的調用,符號函數計算器。其中符號運算簡介主要介紹了符號對象,符號變量、表達式的生成,以及findsym函數和subs函數,符號和數值之間的轉化;符號表達式的化簡與替換主要介紹了用collect函數合并同類項,用expand函數進行符號表達式的展開,用horner函數將函數轉化為嵌套格式,用factor函數來實現因式分解的功能,simplify和simple函數來實現表達式的化簡,符號表達式的替換可以用subexpr和subs函數;符號函數圖形繪制主要介紹了符號函數曲線的繪制,符號函數曲面網格圖及表面圖的繪制和等值線的繪制;符號微積分主要介紹了符號表達式求極限,符號微分、積分,級數求和和Taylor級數;符號方程的求解主要包括代數方程的求解,代數方程組的求解,微分方程的求解,微分方程組的求解等;符號積分變換主要有符號傅立葉變換,符號拉普拉斯變換,符號Z變換。學習心得體會: 通過本章的學習了解了MATLAB符號計算的幾個功能,有計算、線性代數、化簡、方程求解、特殊的數學函數、符號積分變換,MATLAB提供了與MAPLE的良好接口,通過maple.m和map.m實現。這樣,MATLAB可以實現更強大的符號運算功能功能,為習慣于MAPLE的用戶提供了方便。本章的學習讓我領會了MATLAB強大的符號功能,能夠很好的解決實際生活中問題。
第八章 MATLAB繪圖
本章主要內容總結如下:
本章主要介紹了MATLAB的繪圖功能,首先介紹了MATLAB的圖形窗口,包括圖形窗口的創建與控制,圖形窗口的菜單欄的主要功能;然后介紹了基本圖形的繪制,有二維圖形的繪制,三維圖形的繪制以及如何對圖形進行操作;介紹了特殊圖形的繪制,有條形圖、面積圖、餅狀圖、離散型數據圖、方向矢量圖和速度矢量圖、等值線繪制,還介紹了在圖形中添加基本注釋,包括文本框,線條,箭頭,框圖,標題,坐標軸,顏色條,圖例;最后介紹了一些三維圖像的高級控制。學習心得體會:
通過本章的學習了解了MATLAB的圖形窗口,掌握了MATLAB基本二維圖形、三維圖形的繪制,以及圖形的基本操作,掌握了MATLAB特殊圖形的繪制,如柱狀圖,餅狀圖,掌握了圖形注釋的添加及管理,了解了三維圖形的視點控制及顏色、光照控制。本章的學習和實際生活聯系的非常緊密,把抽象的數學式子轉化為易理解的圖形,給人一目了然的清晰感覺。這部分知識是一個很好的繪圖工具,對解決其他學科的問題很有幫助。我在學習這一部分知識時,上課緊跟著老師的思路走,模塊很是清晰,學習興趣極高,但是仍存在許多不足的地方,課下一定再進一步努力學習。習題如下:
繪圖:在同一圖像窗口中繪制六副子圖
1.在第一個子圖中同時繪制不同線型不同顏色的正弦和余弦曲線,添加圖例、坐標軸、標題、網格線和邊框線。2.在第二個子圖中繪制磁盤空間的餅圖。3.在第三個子圖中繪制三維網格圖(surf)。4.在第四個子圖中繪制三維曲面圖(mesh)。
5.在第五—六個子圖中同時繪制二維正弦離散圖和紅色點劃線余弦階躍圖。
程序如下:
>> x=[0:pi/10:2*pi];subplot(3,2,1);plot(x,sin(x));hold on;plot(x,cos(x),'r-.');grid on box on >> m=[8 17];>> subplot(3,2,2);>> pie(m,{'可用空間','已用空間'});>> t=0:pi/50:10*pi;>> subplot(3,2,3),plot3(sin(t),cos(t),t);>> grid on >> axis square >> X=-1:0.1:1;>> Y=X';>> X1=X.^2;>> Y1=Y.^2;>> p=ones(3,1);>> p=ones(length(X),1);>> q=ones(1,length(Y));>> X1=p*X1;>> Y1=Y1*q;>> Z=X1+Y1;>> subplot(3,2,4)>> mesh(X,Y,Z)>> n=[0:10:360]*pi/180;>> N=sin(n);>> subplot(3,2,5),stem(n,N)>> subplot(3,2,6),stairs(n,N,'r-.');
運行結果如下:
第九章 句柄圖形
本章主要內容總結如下:
本章主要介紹了MATLAB 的圖形對象,圖形對象的屬性,和圖形對象的屬性值的設置和查詢。MATLAB介紹了Root對象,Figure對象,Core對象,Plot對象,Annotation對象,Group對象;圖形對象的屬性包括公共屬性和特有屬性;圖形對象屬性值的設置和查詢首先通過構造函數返回其創建的對象句柄,然后利用該句柄,用戶可以在對象創建完成后對其屬性值進行查詢和修改。學習心得體會:
通過本章的學習了解MATLAB圖形對象及其屬性,掌握MATLAB圖形對象屬性的設置及其查詢,掌握了MATLAB圖形句柄的訪問及其操作。句柄圖形是MATLAB中用于創建圖形的面向對象的圖形系統。通過圖形句柄,MATLAB可以對圖形元素進行操作,而這些圖形正是產生各種類型圖形的基礎。利用圖形句柄,可以在MATLAB中修改圖形的顯示效果,創建繪圖函數。對于這部分知識的學習有所欠缺,課下應該多加練習。
第十章GUI設計
本章主要內容總結如下:
本章主要介紹了GUI的基本控件,如何創建簡單的GUI,如何向界面中添加控件以及如何設置設置控件的屬性和編寫響應函數;本章還介紹了通過向導創建GUI界面和通過程序創建GUI,其中通過向導創建包括1,啟動GUIDE2,2,向GUI中添加控件并設置控件標志和控件顯示文本,3,創建菜單;通過程序創建GUI的步驟主要包括1,需要實現的功能及需要包含的控件2,需要使用的技術3,創建GUI,4,創建GUI界面和控件,5,初始化GUI,6,定義響應函數,7,該GUI的完整M文件;本章還介紹了如何編寫GUI代碼,包括GUI文件和響應函數。學習心得體會:
通過本章的學習掌握了圖形用戶界面和GUI中所包含的多個圖形對象,如窗口、圖標、菜單和文本的用戶界面。以某種方式選擇或激活這些對象,通常引起動作或發生變化。了解GUI的基本控件,掌握了通過GUIDE創建GUI的方法,也掌握了通過程序創建GUI的方法。對于本章的知識我是比較陌生的,以前從來沒有接觸過,所以剛開始學的時候比較吃力,后來經過老師的講解,和自己在課下的學習,對這部分知識有了一個系統的了解。做作業時,剛開始時,程序運行出錯,后來經過反復修改,終于運行成功,看著自己的GUI成功運行,心中是比較興奮的,課下一定會多加練習的。習題如下:
GUI:繪制拋物線y=ax2+bx+c的圖像,其中參數a、b、c及標題等由界面文本編輯框輸入,設計邊框線按鈕和邊框菜單。M文件程序如下:
function varargout = untitled(varargin)gui_Singleton = 1;gui_State = struct('gui_Name', mfilename,...'gui_Singleton', gui_Singleton,...'gui_OpeningFcn', @untitled_OpeningFcn,...'gui_OutputFcn', @untitled_OutputFcn,...'gui_LayoutFcn', [] ,...'gui_Callback', []);if nargin && ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1});end
if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});else
gui_mainfcn(gui_State, varargin{:});end
function untitled_OpeningFcn(hObject, eventdata, handles, varargin)handles.output = hObject;guidata(hObject, handles);function varargout = untitled_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;function go_Callback(hObject, eventdata, handles)grid on function tit_Callback(hObject, eventdata, handles)title('?t′??ú??y=a*x.^2+b*x+c')function ax_Callback(hObject, eventdata, handles)axis([-7 7-10 10])function gf_Callback(hObject, eventdata, handles)grid off
function togglebutton5_Callback(hObject, eventdata, handles)function op_Callback(hObject, eventdata, handles)box on box off
function bo_Callback(hObject, eventdata, handles)box on
function bf_Callback(hObject, eventdata, handles)box off
function pushbutton2_Callback(hObject, eventdata, handles)function edit1_Callback(hObject, eventdata, handles)x=str2num(get(handles.edit1,'string'));t=-10:.001:10;y=x(1)*t.^2+x(2)*t+x(3);plot(t,y)function edit1_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');end
運行結果如下:
第十一章 Simulink的建模與仿真
本章主要內容總結如下:
本章主要介紹了Simulink中的建模方法和基本功能模塊,首先介紹了Simulink建模的基本操作和基本流程,然后介紹了Simulink的各,功能模塊和常見Simulink模型,最后介紹S函數,并通過實例建模以使讀者對Simulink有進一步的認識。學習心得體會:
通過本章的學習了解了Simulink的建模方法和基本模塊,這一部分知識對我來說完全是新的內容,學起來有點吃力,所以應該多花點時間在這部分。這部分知識和專業聯系的比較緊密,專業性很強,一定要學好。
第十二章 文件和數據的導入與導出
本章主要內容總結如下:
本章主要介紹了文件的存儲,數據的導入,文件的打開,文本文件的讀寫,低級文件I/O和利用界面工具導入數據。文本文件的讀寫可以用csvread,csvwrite,dlmread,dlmwrite,textread,textscan等函數來實現。學習心得體會:
通過本章的學習了解了MATLAB的基本數據操作,掌握了MATLAB中文本文件的讀寫方式和MATLAB通過界面導入導出數據,了解MATLAB中的基本輸入輸出函數,這部分知識要深入了解,達到融會貫通的程度。
第三篇:MATLAB課程作業(本站推薦)
MATLAB結課作業
姓名: 班級: 學號:
摘要
MATLAB是math works公司推出的一項高性能的數值計算和可視化軟件,其強大的計算和圖形功能使其在科學計算領域贏得了眾多的用戶。
MATLAB(矩陣實驗室)是MATrix LABoratory的縮寫,是一款由美國The MathWorks公司出品的商業數學軟件。MATLAB是一種用于算法開發、數據可視化、數據分析以及數值計算的高級技術計算語言和交互式環境。除了矩陣運算、繪制函數/數據圖像等常用功能外,MATLAB還可以用來創建用戶界面及與調用其它語言(包括C,C++和FORTRAN)編寫的程序。
MATLAB是matrix和laboratory兩個詞的組合,意為矩陣工廠(矩陣實驗室)。是由美國mathworks公司發布的主要面對科學計算、可視化以及交互式程序設計的高科技計算環境。它將數值分析、矩陣計算、科學數據可視化以及非線性動態系統的建模和仿真等諸多強大功能集成在一個易于使用的視窗環境中,為科學研究、工程設計以及必須進行有效數值計算的眾多科學領域提供了一種全面的解決方案,并在很大程度上擺脫了傳統非交互式程序設計語言(如C、Fortran)的編輯模式,代表了當今國際科學計算軟件的先進水平。
MATLABMATLAB和Mathematica、Maple并稱為三大數學軟件。它在數學類科技應用軟件中在數值計算方面首屈一指。MATLAB可以進行矩陣運算、繪制函數和數據、實現算法、創建用戶界面、連接其他編程語言的程序等,主要應用于工程計算、控制設計、信號處理與通訊、圖像處理、信號檢測、金融建模設計與分析等領域。
MATLAB的基本數據單位是矩陣,它的指令表達式與數學、工程中常用的形式十分相似,故用MATLAB來解算問題要比用C,FORTRAN等語言完成相同的事情簡捷得多,并且MATLAB也吸收了像Maple等軟件的優點,使MATLAB成為一個強大的數學軟件。在新的版本中也加入了對C,FORTRAN,C++,JAVA的支持。可以直接調用,用戶也可以將自己編寫的實用程序導入到MATLAB函數庫中方便自己以后調用,此外許多的MATLAB愛好者都編寫了一些經典的程序,用戶可以直接進行下載就可以用。
“信號與系統”課程是一門實用性較強、涉及面較廣的專業基礎課,是電子信息類專業學生的必修課程。它是將學生從電路分析的知識領域引入信號處理與傳輸領域的關鍵性課程,對后繼專業課起著承上起下的作用。該課程的基本方法和理論大量運用于計算機信息處理的各個領域,特別是通信、圖像處理、數字信號分析等領域,應用更為廣泛。1 信號的表達
信號可以表達為時間的函數,根據定義的不同,信號可以分為連續時間信號和離散時間信號,分別表示為x(t)和x[n];對于確定信號,時間變量值與對應的函數值形成一一對應關系。要將信號保存到計算機系統中,信號必須表現為有限長度的離散數字序列;在MATLAB中,信號與對應的時間變量采用兩個一維向量(序列)表示,兩序列長度必須相等。
1.1 離散時間信號x(n)的表達:離散時間變量n只能取整數值,與其對應的 函數值形成離散時間信號;x和n為長度相同的序列,序列元素的編號從1開始;坐標序列n值的設置: n=[-3:3] 設定起點和終點;x的值可以直接設置,也可以根據與n有關的運算得到(必須先定義n):x=[1 2 3 4 3 2 1]
x=3*n x=exp(j*(pi/8)*n),采用函數stem(n,x)可以作出離散信號的圖形。例1.1 離散時間信號的表達:畫出下列離散信號
解:MATLAB程序為: n=[0:6];n1=[0:30];x1=[1 2 3 4 3 2 1];x2= 3*n;x3=exp(j*(pi/8).*n1);x4=0.8.^n1;subplot(2,2,1),stem(n,x1);ylabel('x1');subplot(2,2,2),stem(n,x2);ylabel('x2');subplot(2,2,3),stem(n1,x3);ylabel('x3');subplot(2,2,4),stem(n1,x4);ylabel('x4');執行結果為
67系統函數與系統性質分析 3.1系統零點,極點和零極圖
系統函數是復變量s或z的有理分式,當某變量值使系統函數為零時,該變量值稱為系統零點;當某變量值使系統函數為無限大時,該變量值稱為系統極點;當系統序列a和b為有限長度時,系統零點數量和極點數量有限,可以分別用零點序列
和極點序列以表達為因子形式
表達,此時系統函數可
上式中k值稱為系統增益。在復平面上,將零點和極點分別以的形式標出,稱為系統 零極圖。利用MATLAB函數zplane(b,a)可以畫出給定系統的零極圖;利用MATLAB函數[z,p,k]=tf2zp(b,a)可以以數值形式得到系統的零點序列,極點序列和增益。例 3.1對于系統函數,求系統的零點序列,極點序列和增
1.6449i-0.8437 ] k = 5
3.2 部分分式分解與系統單位沖激響應
利用系統函數求系統單位沖激響應時經常采用部分分式分解方法,利用系統極點將系統函數分解為一階分式的和,每個一階分式與一個沖激響應模式對應: 對于連續系統
對于離散系統
01.4050i-1.5339 + 1.4050i p =-1.0000 0.7000 + 0.6000i 0.7000編程環境
MATLAB由一系列工具組成。這些工具方便用戶使用MATLAB的函數和文件,其中許多工具采用的是圖形用戶界面。包括MATLAB桌面和命令窗口、歷史命令窗口、編輯器和調試器、路徑搜索和用于用戶瀏覽幫助、工作空間、文件的瀏覽器。隨著MATLAB的商業化以及軟件本身的不斷升級,MATLAB的用戶界面也越來越精致,更加接近Windows的標準界面,人機交互性更強,操作更簡單。而且新版本的MATLAB提供了完整的聯機查詢、幫助系統,極大的方便了用戶的使用。簡單的編程環境提供了比較完備的調試系統,程序不必經過編譯就可以直接運行,而且能夠及時地報告出現的錯誤及進行出錯原因分析。簡單易用
Matlab是一個高級的矩陣/陣列語言,它包含控制語句、函數、數據結構、輸入和輸出和面向對象編程特點。用戶可以在命令窗口中將輸入語句與執行命令同步,也可以先編寫好一個較大的復雜的應用程序(M文件)后再一起運行。新版本的MATLAB語言是基于最為流行的C++語言基礎上的,因此語法特征與C++語言極為相似,而且更加簡單,更加符合科技人員對數學表達式的書寫格式。使之更利于非計算機專業的科技人員使用。而且這種語言可移植性好、可拓展性極強,這也是MATLAB能夠深入到科學研究及工程計算各個領域的重要原因。強處理能力
MATLABMATLAB是一個包含大量計算算法的集合。其擁有600多個工程中要用到的數學 運算函數,可以方便的實現用戶所需的各種計算功能。函數中所使用的算法都是科研和工程計算中的最新研究成果,而前經過了各種優化和容錯處理。在通常情況下,可以用它來代替底層編程語言,如C和C++。在計算要求相同的情況下,使用MATLAB的編程工作量會大大減少。MATLAB的這些函數集包括從最簡單最基本的函數到諸如矩陣,特征向量、快速傅立葉變換的復雜函數。函數所能解決的問題其大致包括矩陣運算和線性方程組的求解、微分方程及偏微分方程的組的求解、符號運算、傅立葉變換和數據的統計分析、工程中的優化問題、稀疏矩陣運算、復數的各種運算、三角函數和其他初等數學 運算、多維數組操作以及建模動態仿真等。圖形處理
MATLAB自產生之日起就具有方便的數據可視化功能,以將向量和矩陣用圖形表現出來,并且可以對圖形進行標注和打印。高層次的作圖包括二維和三維的可視化、圖象處理、-12
第四篇:《信號處理matlab仿真》大作業
中國石油大學(華東)信息與控制工程學院
《信號處理matlab仿真》結課作業
專業班級:電子班 學
號:***** 姓
名:****** 任課老師:***** 2088年11月12日
《信號處理matlab仿真》結課作業
一、實現算法及設計思路
1、基本信號顯示
正弦信號的顯示,可以對它的幅度、角頻率以及初相位進行設置輸入。
A1=get(handles.edit1,'String');A=str2num(A1);
w1=get(handles.edit2,'String');w=str2num(w1);
p1=get(handles.edit3,'String');p=str2num(p1);t=-2*pi:0.01:2*pi;y=A*sin(w*t+p);plot(t,y,'r-.');grid
title('正弦信號');
方波信號:
t0=-6*pi;t1=6*pi;dt=1;t=t0:dt:t1;y1=square(t);plot(t,y1,'r-');grid
title('方波信號')鋸齒信號:
t0=-6*pi;t1=6*pi;dt=0.05;t=t0:dt:t1;
f=sawtooth(pi/5*t,0);plot(t,f,'r-')grid
title('鋸齒信號')單位階躍信號:
t=-5:0.01:5 y1=u(t);plot(t,y1,'r');grid
title('單位階躍信號')
《信號處理matlab仿真》結課作業
U(t):
function f=u(t)f=(t>0);%t>0時,f為1,否則為0 end 抽樣信號:
t=-15:0.01:15;t1=t/pi;y4=sinc(t1);plot(t,y4,'r-');grid title('抽樣信號');指數信號:
clc t=0:.001:10;ft=exp(t);plot(t,ft,'r-'),grid title('指數信號)')
2、序列運算
單位脈沖序列,可以對位移量進行設置:
t=str2num(get(handles.edit1,'String'));k=[t-3:t+7];fk=[(k-t)==0];stem(k,fk)title('單位脈沖序列')單位階躍序列,可以對位移量進行設置:
t=str2num(get(handles.edit2,'String'));k=[t-3:t+7];fk=[(k-t)>=0];stem(k,fk)title('單位階躍序列')指數序列,可以對底數進行設置:
t=str2num(get(handles.edit3,'String'));
《信號處理matlab仿真》結課作業
k=[0:10];fk=t.^k;stem(k,fk)title('指數序列')序列卷積,可以對卷積幅度進行設置(針對了特定的兩個序列): t=str2num(get(handles.edit4,'String'));k1=-1:3;k2=-1:3;f1=[0 1 3 2 0 ];f2=[0 4 3 2 1 ];y=t*conv(f1,f2);k0=k1(1)+k2(2);k3=length(f1)+length(f2)-2;k=k0:k0+k3;stem(k,y)title('卷積序列')
3、卷積與傅里葉變換
卷積,針對兩個特定的信號,對卷積幅度進行設置: clc
t=str2num(get(handles.edit1,'String'));t11=0;
t12=1;
t21=0;
t22=2;
t1=t11:0.001:t12;ft1=2*rectpuls(t1-0.5,1);t2=t21:0.001:t22;ft2=t2;
《信號處理matlab仿真》結課作業
t3=t11+t21:0.001:t12+t22;ft3=conv(ft1,ft2);ft3=t*ft3*0.001;plot(t3,ft3)title('f1(t)*f2(t)')方波傅里葉分析,對方波幅度進行設置: clc f=str2num(get(handles.edit2,'String'));t=0:0.01:2*pi;y=f*sin(t);plot(t,y),hold on y=f*(sin(t)+sin(3*t)/3);plot(t,y),hold on y=f*(sin(t)+sin(3*t)/3+sin(5*t)/5);plot(t,y),hold on y=f*(sin(t)+sin(3*t)/3+sin(5*t)/5+sin(7*t)/7);plot(t,y),hold on y=f*(sin(t)+sin(3*t)/3+sin(5*t)/5+sin(7*t)/7+sin(9*t)/9);plot(t,y),hold on y=f*(sin(t)+sin(3*t)/3+sin(5*t)/5+sin(7*t)/7+sin(9*t)/9+sin(11*t)/11);plot(t,y),grid title('方波傅立葉分析')
《信號處理matlab仿真》結課作業
離散傅里葉變化,針對指數信號,對底數進行設置: t=str2num(get(handles.edit3,'String'));n=-5:5;x=t.^n;k=-200:200;w=(pi/100)*k;X=x*(exp(-j*pi/100)).^(n'*k);p=abs(X);plot(w/pi,p),grid title('離散傅立葉變換');快速傅里葉變化,針對指數信號,對底數進行設置: N=str2num(get(handles.edit3,'String'));x0=sin(N*2*pi*[1:8]/8)*5;dt=2*pi/8;w=linspace(0,2*pi,1000)/dt;x0=x0*exp(-j*[1:length(x0)]'*w)*dt;plot(w,abs(x0))title('快速傅立葉變換')
4、濾波器設計
FIR低通濾波器,可以對階數、截止頻率進行設置:
A1=get(handles.edit1,'String');N=str2num(A1);w1=get(handles.edit2,'String');Wn=str2num(w1);b=fir1(N,Wn,'low');
《信號處理matlab仿真》結課作業
fs=2000;[h,f]=freqz(b,1,1024,fs)plot(f,20*log10(abs(h)));FIR高通濾波器,可以對階數、截止頻率進行設置: A1=get(handles.edit3,'String');N=str2num(A1);w1=get(handles.edit4,'String');Wn=str2num(w1);b=fir1(N,Wn,'high');fs=2000;[h,f]=freqz(b,1,1024,fs)plot(f,20*log10(abs(h)));FIR帶通濾波器,可以對階數、截止頻率進行設置: A1=get(handles.edit5,'String');N=str2num(A1);w1=get(handles.edit6,'String');Wn=str2num(w1);b=fir1(N,Wn);fs=2000;[h,f]=freqz(b,1,1024,fs)plot(f,20*log10(abs(h)));巴特沃斯低通濾波器:
《信號處理matlab仿真》結課作業
[b,a]=butter(11,0.5);figure(1);freqz(b,a,512,1000)n=0:40;x1=[(n-3)>=0];x2=[(n-20)>=0];x=x1-x2;y=filter(b,a,x);figure(2)subplot(1,2,1)stem(n,x);axis([0,35,-0.3,1.3]);grid title('x(n)');subplot(1,2,2)stem(n,y)grid title('y=filter(b,a,x)');切比雪夫I型濾波器: wp1=1000;ws1=1500;wc=3000;
《信號處理matlab仿真》結課作業
wp=wp1/wc;ws=ws1/wc;[n,wn]=cheb1ord(wp,ws,1,15);[b,a]=cheby1(n,1,wn);freqz(b,a,512,6000);axis([0,3000,-40,5]);
5、簡單圖像處理:
打開圖片:
[filename,pathname]=uigetfile({'*.jpg';'*.bmp';'*.tif';'*.*'},' 載入圖像 ');%選擇路徑打開圖像
if isequal(filename,0)|isequal(pathname,0)%若 filename 為 0 或 pathname為 0,即未選中文件
errordlg('未選中文件 ','警告');%建立一個名為警告的錯誤對話框,內容為“未選中文件 ”
return;else
file=[pathname,filename];%將文件名和目錄名組合成一個完整的路徑
x=imread(file);%讀入圖像
set(handles.axes1,'HandleVisibility','ON');%設置圖形對象屬性,可從命令窗口中和 GUIs 中訪問
axes(handles.axes1);%定義圖形區域 axes1
imshow(x);%顯示圖像
《信號處理matlab仿真》結課作業
set(handles.axes1,'HandleVisibility','OFF');%設置圖形對象屬性,不可從命令窗口中和 GUIs 中訪問
axes(handles.axes2);%定義圖形區域 axes2 imshow(x);%顯示圖像
handles.img=x;%把圖像發給handles.img end 灰度處理:
global T %定義全局變量
axes(handles.axes2);%定義圖形區域 axes2 T=getimage;%從坐標軸獲取圖像數據
x=rgb2gray(handles.img);%利用 rgb2gray函數對源圖像進行灰度處理 imshow(x);%顯示圖像
xlabel('灰度圖像 ');% x 軸名為“灰度圖像 ”
handles.img=x;%把圖像發給 handles.img 傅里葉變換:
axes(handles.axes2);i1=handles.img;%獲取圖像
i2=im2double(i1);%圖像矩陣轉換成雙精度浮點類型
f1=fft2(i2);%對圖像進行二維離散傅里葉變換
fc1=fftshift(f1);%將變換后的圖象頻譜中心從矩陣的原點移到矩陣的中心
i=log(1+abs(fc1));%對變換后的圖像矩陣數據求絕對值后取自然對數 imshow(i);
《信號處理matlab仿真》結課作業
xlabel('傅里葉變換圖像 ');handles.img=i;直方圖均衡化:
axes(handles.axes2);%定義圖形區域 axes2 T=getimage;%從坐標軸獲取圖像數據
x=rgb2gray(handles.img);%利用 rgb2gray函數對源圖像進行灰度處理 h=histeq(x);%對圖像進行直方圖均衡化處理
imshow(h);%顯示圖像
xlabel('直方圖均衡化后的圖像 ');handles.img=h;低通濾波器處理: axes(handles.axes2);y1=handles.img;%獲取圖像
x=rgb2gray(handles.img);%灰度變換
f=double(x);%數據類型轉換為雙精度數值
g=fft2(f);%二維離散傅里葉變換
g=fftshift(g);%將變換后的圖象頻譜中心從矩陣的原點移到矩陣的中心
[M,N]=size(g);%返回矩陣 g 的大小,即 M 為行數,N 為列數
nn=2;%二階巴特沃斯低通濾波器 d0=50;%截止頻率 50Hz m=fix(M/2);
n=fix(N/2);%取矩陣 g 的行數和列數一半的整數
《信號處理matlab仿真》結課作業
for i=1:M
for j=1:N % 循環
d=sqrt((i-m)^2+(j-n)^2);
h=1/(1+0.414*(d/d0)^(2*nn));%計算低通濾波器傳遞函數
result(i,j)=h*g(i,j);%結果返回到 result
end end result=ifftshift(result);%將圖象頻譜中心從矩陣的中心移到矩陣的原點 y2=ifft2(result);%二維離散傅里葉反變換
y3=uint8(real(y2));%把矩陣 y2 實部轉換成 8 位無符號數據
imshow(y3);%顯示低通濾波后的圖像
xlabel('低通濾波圖像 ');handles.img=y3;高通濾波器處理: axes(handles.axes2);x=handles.img;%獲取圖像
y=rgb2gray(handles.img);%灰度變換
f=double(y);%數據類型轉換為雙精度數值 k=fft2(f);%二維離散傅里葉變換
g=fftshift(k);%將變換后的圖象頻譜中心從矩陣的原點移到矩陣的中心
[M,N]=size(g);%返回矩陣 g 的大小,即 M 為行數,N 為列數
nn=2;%二階
《信號處理matlab仿真》結課作業
d0=25;%截止頻率 25Hz m=fix(M/2);n=fix(N/2);for i=1:M
for j=1:N %循環 d=sqrt((i-m)^2+(j-n)^2);if d<=d0 h=0;else h=1;end result(i,j)=h*g(i,j);%結果返回到 result end end result=ifftshift(result);%將圖象頻譜中心從矩陣的中心移到矩陣的原點
y2=ifft2(result);%二維離散傅里葉反變換
y3=uint8(real(y2));%把矩陣 y2 實部轉換成 8 位無符號數據 imshow(y3);%顯示高通濾波后的圖像
xlabel('高通濾波圖像 ');handles.img=y3;上下翻轉:
axes(handles.axes2);
T= getimage;%從坐標軸獲取圖像數據 f=flipud(handles.img);%將圖像矩陣上下翻轉
《信號處理matlab仿真》結課作業
imshow(f);%顯示翻轉后的圖像
xlabel('上下翻轉后的圖像 ');handles.img=f;左右翻轉:
axes(handles.axes2);T= getimage;%從坐標軸獲取圖像數據 f=fliplr(handles.img);%將圖像矩陣左右翻轉
imshow(f);%顯示翻轉后的圖像
xlabel('左右翻轉后的圖像 ');handles.img=f;
二、調試分析
這個錯誤主要是不細心造成,檢查發現右括號少了,加上就解決了。
對變量沒有定義,直接進行使用,在程序開始之前對其進行了重新定義。
《信號處理matlab仿真》結課作業
Freqz錯誤使用,對程序及freqz參數調整,得到解決。
跟上面的問題一樣,都是對freqz重新調整,得到解決。如圖所示:
沒有對axes1進行定義,直接使用,程序加了:axes(handles.axes1);得到解決。
《信號處理matlab仿真》結課作業
這個錯誤開始的時候以為是圖窗設計的不合理,或者是程序的問題,就把圖窗和.m文件都刪了重新設計,還是這個錯誤,排除了圖窗設計錯誤,就對程序進行重新設計,最后實現了簡單的圖像處理按鈕的編寫并且沒有了錯誤。
直接對.img進行了使用,對程序作了一下改動,此問題得到解決:
三、測試結果
1、仿真系統開始界面:
《信號處理matlab仿真》結課作業
2、基本信號顯示:
①:正弦信號的顯示:
②:方波信號的顯示:
③:鋸齒信號的顯示:
《信號處理matlab仿真》結課作業
④:單位階躍信號的顯示:
⑤:抽樣信號的顯示:
《信號處理matlab仿真》結課作業
⑥:指數信號的顯示:
3、序列運算:
①:單位脈沖序列:
②:單位階躍序列:
③:指數序列:
《信號處理matlab仿真》結課作業
④:序列卷積:
4、卷積與傅里葉變換:
①:卷積:
②:方波傅里葉分析:
《信號處理matlab仿真》結課作業
③:離散傅里葉變換:(主要是對指數信號)
④:快速傅里葉變換:(主要是對指數信號)
《信號處理matlab仿真》結課作業
5、濾波器設計:
①:FIR低通濾波器:
②:FIR高通濾波器:
③:FIR帶通濾波器:
④:巴特沃斯低通濾波器:(幅頻與相頻圖線)
《信號處理matlab仿真》結課作業
⑤:切比雪夫I型濾波器:
6、簡單圖像處理:
①:選擇圖片打開:
《信號處理matlab仿真》結課作業
②:灰度處理:
③:傅里葉變換:
④:直方圖均衡化:
《信號處理matlab仿真》結課作業
⑤:低通濾波器處理:
⑥:高通濾波器處理:
⑦:上下翻轉:
《信號處理matlab仿真》結課作業
⑧:左右翻轉:
注:每項操作完成后,都有一個返回主界面按鈕,為退出此項操作,這里不一一展示。
四、課程總結及心得體會
通過近一段的學習,我明確了matlab是一款集數據分析、矩陣運算、信號處理和圖形顯示于一體,可方便地應用于數學計算、算法開發、數據采集、系統建模和仿真、數據分析和可視化、科學和應用軟件開發等方面的強悍軟件,是研究人員、工程人員研究工作中不可多得的工具,也是我們學習過程中必不可少的軟件。而正因為其強
《信號處理matlab仿真》結課作業
大之處,以及可視性及可交互性使我對它的學習產生了濃厚的興趣。開學至今,我們學習了 matlab 矩陣及其運算、matlab 程序設計、m文件操作、m文件 調試、m文件編程以及 matlab 繪圖等,一段時間下來,對 matlab 還是有了一定的框架性認識及編程能力。并且在學習matlab 過程中,我感覺到它和 c 語言有許多相似之處,它有c語言的特征,但是比 c 語言編程計算更加簡單,適合于復雜的數學運算。以上就是我對此課程的總結和心得體會。
根據自己學習的過程提出以下兩點建議:
1、針對上課學習: 對于軟件類的學習存在這樣一個問題,我們可以上課時帶電腦到課堂上或機房授課,一方面老師在講臺上演示,另 一方面同學們在下面即時練習,這樣印象會更加深刻。
2、針對課下學習:近期 matlab 學習,老師給的課下作業很少,僅有實驗,也許老師考慮同學們比較忙,以及可能交上來的作業效果質量達不到預期效果。但我認為適量的課下作業還是非常有必要的,尤其是對于我們這些普遍自制力較差的情況,這點顯得更加有意義。課下作業可以布置那些老師演示過的程序或 ppt 中程序略加改動,讓我們下課后及時完成上交。可以使我們及時鞏固。
第五篇:數字圖像matlab結課作業[模版]
clear all;close all;I=imread('e:5.tif');imshow(I);I_gray=rgb2gray(I);figure,imshow(I_gray);I_gray_hist=imhist(I_gray);figure,imshow(I_gray_hist);Ibw=im2bw(I_gray,0.7);figure,imshow(Ibw);