一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Matlab教程--進階篇

 昵稱2530266 2019-02-13

   Hello,大家好,上期智商經(jīng)常性短期離線的上官小編又回來了。這次將為大家?guī)鞰atlab的進階篇教程,這期將會介紹編程,繪圖以及simulink的學(xué)習(xí)方法。


Matlab編程的基本方法

  不知道大家還記不記得上期教程中的一句話,Matlab的核心語言是C語言。在編程的過程中用到的很多思想都和C語言的編程非常相似,學(xué)過C語言的同學(xué)只要在學(xué)習(xí)Matlab的過程中舉一反三,就能很容易的掌握這個方法了。

首先,為大家介紹一下M文件。我們編出來的程序都是以M文件的形式存放在計算機中的。M文件是以 .m為后綴的文件,根據(jù)調(diào)用方式的不同可分為腳本文件和函數(shù)文件。兩者的區(qū)別就在于腳本文件只是一連串命令的集合體,而函數(shù)文件是有著輸入和輸出變量的。

  接下來為大家介紹一下函數(shù)文件。函數(shù)文件由function語句引導(dǎo),基本的形式是


function[輸出形參列表]=函數(shù)名(輸入形參列表)


  其中函數(shù)的命名規(guī)則與變量相同,且開頭必須是字母,當(dāng)輸出形參多于一個時必須用方括號括起來。下面為大家舉個栗子。


function y = fliplr(x)

%FLIPLR Flip matrix in left/right direction.

 

if ~ismatrix(x)

  error(message('MATLAB:fliplr:SizeX'));

end

y = x(:,end:-1:1);


  這就是一個簡單的將矩陣進行左右翻轉(zhuǎn)的函數(shù)。并且為了用戶的方便,通常會在函數(shù)里加入容錯的指令,即if開始向下的部分,在函數(shù)的結(jié)尾用end表示結(jié)束。這樣一個函數(shù)就編寫完成了,當(dāng)我們需要的時候直接調(diào)用就好了。而調(diào)用的方法和C語言也很相似。只需要 [輸出實參列表]=函數(shù)名(輸入實參列表),特被需要注意的是,函數(shù)調(diào)用時,實參的順序應(yīng)與函數(shù)定義時的形參的順序一致,變量名無需一致。

下面再舉一個調(diào)用的栗子。

>> a=[1,2,3;4,5,6;7,8,9];

          >> b=fliplr(a)


  就這樣,一個函數(shù)的調(diào)用就完成了。在函數(shù)編寫的過程中,一個函數(shù)是可以包含多個子函數(shù)的,但要注意,主函數(shù)必須位于子函數(shù)前面,子函數(shù)只能在所在函數(shù)文件內(nèi)被主函數(shù)和其他子函數(shù)調(diào)用,不可以出現(xiàn)越級調(diào)用。

  接下來為大家介紹一下全局變量和局部變量。


局部變量

函數(shù)文件中的變量都是局部的,即一個函數(shù)文件中定義的變量不能被另一個函數(shù)文件或其它M文件使用。當(dāng)函數(shù)調(diào)用完畢后,該函數(shù)文件中定義的所有局部變量都將被釋放,即全部被清除。 


全局變量

如果在若干個M文件中,都把某個變量定義為全局變量,則這些函數(shù)將公共使用這一變量。所有函數(shù)都可以對它進行存取和修改操作。全局變量的格式為 global 變量名列表變名列表中的各個變量用空格隔開,不能用逗號。


全局變量給函數(shù)間的數(shù)據(jù)傳遞帶來了方便,但卻破壞了函數(shù)對變量的封裝,降低了程序的可讀性,因而在結(jié)構(gòu)化程序設(shè)計中,全局變量是不受歡迎的。特別是當(dāng)程序較大,子程序較多時,全局變量將個程序調(diào)試和維護帶來不便,故不提倡使用全局變量。 


控制語句

控制語句的主要形式有循環(huán)結(jié)構(gòu)(for,while),條件分支結(jié)構(gòu)(if-else,swich-case),錯誤控制語句(try-catch),然后end結(jié)尾(這個千萬不要忘了)。其實他們的功能與C語言中的控制語句基本一樣。下面將介紹各種控制語句的使用方法。


for循環(huán)語句


1

格式:for 變量=(初始值:增量:終止值)

        statement(循環(huán)體)

end

tips:根據(jù)for后的增量語句限定循環(huán)次數(shù)

先執(zhí)行statement再判斷是否循環(huán)

至少執(zhí)行一次statement

循環(huán)次數(shù)僅計算一次


while語句


2

語句格式:while expression(條件語句)

         statement(循環(huán)體)

end

tips:while后語句為循環(huán)進行的判定條件

先判定條件再執(zhí)行statement

可以一次statement都不執(zhí)行

(其實講道理和C語言里的for和while一樣有沒有)


if-else條件語句


3

語句格式:if expression1 (條件1)

statement 1(語句組1)

elseif expression2(條件2)

          statement2(語句組2)

else statements(語句組)

end


switch-case開關(guān)語句


4

switch expression(表達式)

case value1(數(shù)值1)

statement1(語句組1)

case value2(數(shù)值2)

statement2(語句組2)

           otherwise statement(語句組)

end


try-catch錯誤控制語句


5

try

        statement1(如果正確執(zhí)行,跳出結(jié)構(gòu))

catch

         statement2(如果statement1錯誤則執(zhí)行)

end


控制指令

6

ontinue: 在for或者while循環(huán)中直接跳至下一個循環(huán)的執(zhí)行(即如果符合條件直接返回循環(huán)的開始執(zhí)行循環(huán),與后邊的break直接跳出循環(huán)要區(qū)分開)

  break:終止for或while循環(huán),跳出執(zhí)行循環(huán)后的下一個語句(直接跳出循環(huán))

  return:提前終止函數(shù),回到主調(diào)文件中

(這個控制指令也和C語言沒有太大區(qū)別)


關(guān)系運算

首先強調(diào)下=與==的區(qū)別,=是賦值操作,b=a即把a的值賦給b,而b==a是關(guān)系運算,變量b和變量a進行比較,如果相等,則返回真。

接下來介紹幾種邏輯運算。

&&和||比&和|更智能,當(dāng)一個數(shù)滿足條件時,不計算另一個數(shù)。


到這里編程所需的基本語句和運算符號都介紹完畢了,小編提醒,在未來編程的過程中為了提高編程效率,要令自己的程序功能層次合理,滿足腳本——高級函數(shù)——低級函數(shù)的順序,盡量少使用循環(huán),可以用矩陣的操作代替,盡量避免使用全局變量、遞歸調(diào)用。最后為大家介紹一個求解非線性方程的常用方法,牛頓迭代:


下面將以方程x2+2xex+e2x=0為例,運用牛頓迭代法求方程的根。 

算得迭代數(shù)列的前20項為-0.2500,-0.3986,-0.4802,-0.5230,-0.5449,-0.5560,-0.5615,-0.5643,-0.5657,-0.5664,-0.5668,-0.5670,-0.5671,-0.5671,-0.5671,說明迭代是收斂的, 且第五次迭代時誤差就不超過10^-3。


Matlab繪圖的基本方法

  還在為做完實驗得到的一大堆數(shù)據(jù)不知道怎么處理而頭疼嗎?不要慌,下面小編將教你使用Matlab處理數(shù)據(jù)。先送個小彩蛋,sphere可以畫球,sphere(正整數(shù))不同值可以畫出不一樣顏色的球。Sphere(1000)是黑球,sphere(100)是彩球,想知道怎么回事就往下看吧。


   通常處理數(shù)據(jù)有兩種方式,一個是擬合,一個是插值。擬合是要設(shè)法找出某條光滑曲線,它最佳地擬合數(shù)據(jù),但不必要經(jīng)過每一個數(shù)據(jù)點。插值是假定數(shù)據(jù)是正確的,要求以某種方法描述數(shù)據(jù)點之間所發(fā)生的情況。


多項式的擬合

 

  通常我們采用的擬合方式是最小二乘法。最小二乘曲線擬合的函數(shù)為p=polyfit(x,y,n),其中x,y為數(shù)據(jù)點,n為多項式最高階的階數(shù),p是多項式的系數(shù)向量。下面再舉個栗子:x=[0, .1 , .2 , .3 , .4 , .5 , .6 , .7 , .8 , .9 , 1 ];

                       y=[-.447 , 1.978 , 3.28,6.16 , 7.08 , 7.34 , 7.66 , 9.56 , 9.48 , 9.30 , 11.2];             p=polyfit(x,y,n)

  這樣就可以得出擬合出來的多項式的系數(shù)了。多項式階次的選擇是有點任意的。

  1)兩點決定一直線或一階多項式。三點決定一個平方 或2階多項式。按此進行,n+1數(shù)據(jù)點唯一地確定n 階多項式。

  2)在上面的情況下,有11個數(shù)據(jù)點,我們可選一個高達10階的多項式。

   3)高階多項式給出很差的數(shù)值特性,不應(yīng)選擇比所需的階次高的多項式。隨著多項式階次的提高,近似變得不夠光滑。

函數(shù)的插值

  一維插值:一維插值函數(shù):

             yi=interp1(x,Y,xi)

返回插值向量yi,每一元素對應(yīng)于參量xi, 同時由向量x與Y的內(nèi)插值決定。參量x指定數(shù)據(jù)Y的點。

yi = interp1(x,Y,xi,method)  用指定的算法計算插值

  ‘nearest’:最近鄰點插值,直接完成計算;

  ‘linear’:線性插值(缺省方式),直接完成計算;

  ‘spline’:三次樣條函數(shù)插值。對于該方法,命令 interp1調(diào)用函數(shù)spline、ppval、mkpp、umkpp。這些命令生成一系列用于分段多項式操作的函數(shù)。命令spline用它們執(zhí)行三次樣條函數(shù)插值;

  ‘pchip’:分段三次Hermite插值。對于該方法,命令 interp1調(diào)用函數(shù)pchip,用于對向量x與y執(zhí)行分段三次內(nèi)插值。該方法保留單調(diào)性與數(shù)據(jù)的外形;

  ‘cubic’:與’pchip’操作相同。 


    下面就要教大家怎么畫圖了。使用函數(shù)plot即可作出圖像。plot(X,Y) 當(dāng)X,Y均為實數(shù)向量,且為同維向量(可以不是同型向量),X=[x(i)],Y=[y(i)],則plot(X,Y)先描出點(x(i),y(i)),然后用直線依次相連; 若X,Y均為同維同型實數(shù)矩陣,X = [X(i)],Y = [Y(i)],其中X(i),Y(i)為列向量,則plot(X,Y)依次畫出plot(X(i),Y(i)),矩陣有幾列就有幾條線;若X,Y中一個為向量,另一個為矩陣, 且向量的維數(shù)等于矩陣的行數(shù)或者列數(shù),則矩陣按向量的方向分解成幾個向量,再與向量配對分別畫出,矩陣可分解成幾個向量就有幾條線。

   plot(Y)若Y為實數(shù)向量,Y的維數(shù)為m,則plot(Y)等價于plot(X,Y),其中x=1:m;若y為實數(shù)矩陣,則把y按列的方向分解成幾個列向量,而y的行數(shù)為n,則plot(Y)等價于plot(X,Y)其中x=[1;2; … ;n]

                                          

 plot(X1,Y1,LineSpec1,X2,Y2,LineSpec2 ) 將按順序分別畫出由三參數(shù)定義Xi,Yi,LineSpeci的線條。其中參數(shù)LineSpeci指明了線條的類型,標(biāo)記符號,和畫線用的顏色。在plot命令中我們可以混合使用三參數(shù)和二參數(shù)的形式。

    參數(shù)LineSpec:定義線的屬性

  線條寬度 LineWidth:指定線條的寬度,取值為整數(shù)(單位為像素點) 

  標(biāo)記大小 MarkerSize:指定標(biāo)記符號的大小尺寸,取值為整數(shù)(單位為像素) 

  標(biāo)記面填充顏色 MarkerFaceColor:指定用于填充標(biāo)記符面的顏色。取值在上表。 

  標(biāo)記周邊顏色 MarkerEdgeColor :指定標(biāo)記符顏色或者是標(biāo)記符(小圓圈、正方形、棱形、正五角星、正六角星和四個方向的三角形)周邊線條的顏色。 

  所以一個曲線的格式應(yīng)該是這樣的:    plot(t,sin(2*t),'-mo', 'LineWidth',2,'MarkerEdgeColor','k', 'MarkerFaceColor',[.49 1 .63],'MarkerSize',12) 


fplot (‘function‘,limits)

  指定的范圍limits內(nèi)畫出一元函數(shù)y=f(x)的圖形。其中向量x的分量分布在指定的范圍內(nèi),y是與x同型的向量,對應(yīng)的分量有函數(shù)關(guān)系:y(i)=f(x(i))。若對應(yīng)于x的值,y返回多個值,則y是一個矩陣,其中每列對應(yīng)一個f(x)。注意,函數(shù)function必須是一個m-文件函數(shù)或者是一個包含變量x,且能用函數(shù)eval計算的字符串。 

  如‘sin(x)*exp(2*x)’,’[sin(x),cos(x)]’ limits是一個指定x-軸范圍的向量[xmin xmax]或者是x軸和y軸的范圍的向量[xmin xmax ymin ymax]。同樣的,fplot也可以用LineSpec進行線型和標(biāo)記的區(qū)分。


特殊平面圖形命令

  polar:功能畫極坐標(biāo)圖。該命令接受極坐標(biāo)形式的函數(shù) rho=f(θ),在笛卡兒坐標(biāo)系平面上畫出該函數(shù),且在面上畫出極坐標(biāo)形式的格柵。格式:polar(theta,rho,LineSpec)用極角theta和極徑rho畫出極坐標(biāo)圖形。極角theta為從x軸到半徑的單位為弧度的向量,極徑rho為各數(shù)據(jù)點到極點的半徑向量。 栗子又來了:

              t = 0:.01:2*pi;

polar(t,sin(3*t).*cos(2*t),'--r')

  pie 功能:餅形圖pie(X) 用x中的數(shù)據(jù)畫一餅形圖,x中的每一元素代表餅形圖中的一部分。X中元素X(i)所代表的扇形大小通過X(i)/sum(X)的大小來決定。 pie(X,explode) 從餅形圖中分離出一部分,explode為元素為零或非零的、與x相對應(yīng)的向量或矩陣。與 explode的非零值對應(yīng)的部分將從餅形圖中心分離出來。explode必須與x同型。

栗子:

x = [1 3 0.5 2.5 2];

pie(x)

explode = [0 1 0 0 0];

pie(x,explode)


教程的最后,彩蛋附送,要考試的童鞋們看過來:

考試題型:

一、單選題(1分×10題=10分)

二、判斷題(1分×10題=10分)

三、簡答題(5分×4題=20分)

四、程序設(shè)計與建模(10分×4題=40分)

復(fù)習(xí)重點:

矩陣操作

牛頓迭代

函數(shù)文件

繪圖

解方程

simulink


    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    精品视频一区二区三区不卡| av一区二区三区天堂| 麻豆果冻传媒一二三区| 国产不卡一区二区四区| 东京不热免费观看日本| 免费特黄欧美亚洲黄片| 欧美一区二区三区性视频| 日本成人中文字幕一区| 亚洲中文字幕亲近伦片| 国产精品大秀视频日韩精品| 久一视频这里只有精品| 国产成人精品午夜福利av免费| 日本精品理论在线观看| 自拍偷女厕所拍偷区亚洲综合| 亚洲伦片免费偷拍一区| 国产在线日韩精品欧美| 日韩欧美国产三级在线观看| 精品国产一区二区欧美| 午夜精品在线视频一区| 亚洲精品有码中文字幕在线观看| 日韩人妻欧美一区二区久久| 国产精品国三级国产专不卡| 在线观看免费视频你懂的| 久久热麻豆国产精品视频| 午夜精品黄片在线播放| 欧美尤物在线观看西比尔| 亚洲欧美日韩熟女第一页| 日本东京热加勒比一区二区| 日本道播放一区二区三区| 日本精品中文字幕人妻| 妻子的新妈妈中文字幕| 亚洲另类欧美综合日韩精品| 国产福利一区二区三区四区| 精品国产丝袜一区二区| 久久亚洲精品中文字幕| 深夜视频成人在线观看| 久久亚洲午夜精品毛片| 98精品永久免费视频| 欧洲一区二区三区蜜桃| 国产日韩欧美国产欧美日韩 | 欧美日韩亚洲综合国产人|