欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      matlab程序設(shè)計及心得體會

      時間:2019-05-12 15:29:55下載本文作者:會員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《matlab程序設(shè)計及心得體會》,但愿對你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《matlab程序設(shè)計及心得體會》。

      第一篇:matlab程序設(shè)計及心得體會

      1.編寫程序,建立向量n=〔1,2,3,4,5〕,并利用n產(chǎn)生下列向量:(1)2 , 4 , 6 , 8 , 10

      (2)1/2 , 1 , 3/2 , 2 , 5/2(3)1, 1/2 , 1/3 , 1/4 , 1/5

      (4)1 , 1/4 , 1/9, 1/16, 1/25。

      注意:向量n=1:5,/是傳統(tǒng)意義上的矩陣的除法,而./是兩個矩陣的對應(yīng)元素相除,同理相乘。此處是對應(yīng)元素相除,所以一定要記住應(yīng)該用點除,而非除法。2.從鍵盤輸入一個三位數(shù),將它反向輸出。例如輸入639,輸出為936。

      注意:輸出函數(shù):disp(),取整用fix(),取余函數(shù)mod(x,y)與rem(x,y)一樣。3.輸入一個百分制成績,要求輸出成績等級A,B,C,D,E。其中90-100分為A,80-89分為B,70-79分為C,60-69分為D,60分以下為E。

      要求:(1)分別用if語句和switch語句實現(xiàn)。

      (2)輸入百分制成績后要判斷該成績的合理性,對不合理的成績應(yīng)輸出出錯信息。注意:switch語句中的case最好用0~9的數(shù)字表示而不是表達式!不可用break!后不可用表達式!!為了表示另一種情況,記住用if與其搭配~不要太死板,學(xué)會靈活。4.建立5*6的矩陣,要求輸出矩陣第n行元素。當(dāng)n的值超過矩陣的行數(shù)時,自動轉(zhuǎn)為輸出矩陣最后一行元素,并給出出錯信息。

      注意:隨機產(chǎn)生一個0~1矩陣可以用rand函數(shù),整數(shù)矩陣便用fix(100*rand(m,n))函數(shù)。產(chǎn)生m*n 階[a,b]均勻分布U(a,b)的隨機數(shù)矩陣:

      unifrnd(a,b,m, n)

      5.產(chǎn)生20個兩位隨機整數(shù),輸出其中小于平均值的偶數(shù)。

      注意:fix(100*rand(m,n))與round(100*rand(m,n))幾乎一樣的,隨機產(chǎn)生m*n階矩陣,學(xué)會變通,隨機產(chǎn)生兩位隨機整數(shù)。fix是指向0靠攏取整。fix(3.7)=3,fix(-3.7)=-3。floor指向下取整,ceil指向上取整。round指四舍五入取整!round最常用~記住a=o指賦值,而a==0指判斷,與c語言一樣~當(dāng)矩陣只有一行時,可用a(i)表示每一個數(shù)。用k(i)表示來輸出每一個數(shù)!表示矩陣中的每一列時用a(:,i),表每一行時用a(i,:)。

      6.輸入20個數(shù),求其中的最大數(shù)和最小數(shù)。要求分別用循環(huán)結(jié)構(gòu)和調(diào)用MATLAB的max函數(shù)、min函數(shù)來實現(xiàn)。注意:熟記其中的函數(shù)將對編程的速度有很大的提高!孩子,加油!

      e0.3a?e?0.3a0.3?asin(a?0.3)?ln7.y?,當(dāng)a?。?0.,-2.9,……,2.9,3.0時,求各點22的函數(shù)值。要求分別用順序結(jié)構(gòu)和循環(huán)結(jié)構(gòu)實現(xiàn)。

      注意:用size返回向量元素的個數(shù),如果是矩陣,size(a,2)指返回矩陣的豎的個數(shù),即多少列。其中一維是指行,二維指列。記住表示一個向量時,步長放中間。!

      8.當(dāng)n分別取100、1000、10000時,求下列各式的值:(要求分別用循環(huán)結(jié)構(gòu)和向量運算(使用sum函數(shù))來實現(xiàn))

      1111??????? 2222123n111(2)1?????

      3571111(3)?????n??

      416644(1)

      ?2n?2n?2?2??4?4??6?6???(4)?注意:使用while循環(huán)時,注意對n初始化,??????????1?3??3?5??5?7???2n?1???2n?1??與c語言較象。普通指數(shù)時直接用^,自然指數(shù)時,若x已知,用y=exp(x)。

      9.若兩個連續(xù)自然數(shù)的乘積減1是素數(shù),則稱這兩個連續(xù)自然數(shù)是親密數(shù)對,該素數(shù)是親密素數(shù)。例如:2*3-1=5,由于5是素數(shù),所以2和3是親密數(shù)對,5是親密素數(shù)。求〔2,50〕區(qū)間內(nèi),(1)親密數(shù)對的對數(shù);

      (2)與上述親密數(shù)對對應(yīng)的所有親密素數(shù)之和。

      注意:x=primes(n)輸出不超過n整數(shù)的素數(shù),a=length(x)表示輸出素數(shù)的個數(shù)。用b=isprime(n)來判斷n是否為素數(shù),若為素數(shù)則b=1,反之為0。學(xué)會變通,求和用if循環(huán)就好。

      111110.根據(jù)1??????,求:

      3572n?1(1)y<3時的最大n值;(2)與(1)的n值對應(yīng)的y值。

      注意:不能被題目嚇跑~~·很簡單的,耶耶!

      11.已知y?f(40)

      f(30)?f(20)(1)當(dāng)f(n)=n+10ln(n2+5)時,y的值是多少?

      (2)當(dāng)f(n)=1*2+2*3+3*4+……+n*(n+1)時,y的值是多少?

      12.編寫一個函數(shù)文件,用于求兩個矩陣的乘積和點乘,然后在命令文件中調(diào)用該函數(shù)。13.定義一個函數(shù)文件,求給定復(fù)數(shù)的指數(shù)、對數(shù)、正弦、余弦,并在命令文件中調(diào)用該函數(shù)文件。

      14.先用函數(shù)的遞歸調(diào)用定義一個函數(shù)文件求1005010?i,然后調(diào)用該函數(shù)文件求

      i?1n1zhuyi:yaoxunzaoyigehanshubiannnengjiejue defangfa~~ k?k????kk?1k?1k?1215.寫出下列程序的輸出結(jié)果。(1)

      s=0;a=[12 13 14;15 16 17;18 19 20;21 22 23];for k=a

      for j=1:4

      if rem(k(j),2)~=0

      s=s+k(j);

      end

      end end s

      (2)命令文件 global x x=1:2:5;y=2:2:6;sub(y);x y 函數(shù)文件sub.m function fun=sub(z)global x z=3*x;x=x+z;16已知:?1111n?1????????1?,編程求?的近似值。

      43572n?1 注意:在編程過程中,一個小小的乘號將導(dǎo)致很難查出錯誤,很會影響心情,所以不能忽略小問題,必須仔細小心!

      ?1?517.輸入下面的矩陣,A???9??13?234??678?101112??141516??求該矩陣的對角線元素之和,并找出最大和最小的元素的值以及其所在的行、列號。將最大值替換成inf,最小值替換成-inf。注意:①找出矩陣中具體某個元素的具體位置的方法: ind=find(a==max)siz=[4,4]

      [I,J] = ind2sub(siz,ind)便可以找到最大元素的位置![I1,I2,I3,...,In] = ind2sub(siz,ind)②對角線元素用diag函數(shù)~~ ③要找出一個很大矩陣的最大最小元素用兩個for循環(huán)。!加油~寫出這道題好興奮啊,這種感覺真好!

      18.求解猴子吃桃問題。猴子在第一天摘下若干個桃子,當(dāng)即吃了一半,又感覺不過癮,于是就多吃了一個。以后每天如此,到第10天再想吃時,卻發(fā)現(xiàn)就只剩一個桃子。請編程計算第一天猴子摘的桃子個數(shù)。

      注意:不要被問題嚇到,很簡單的一個問題罷了~當(dāng)順著不行時,試著倒著來解答編程。19.求n階勒讓德多項式的值,其遞歸公式為:

      p(n,x)?((2*n?1)*x*p(n?1,x)?(n?1)*p(n?2,x))/n

      p(0,x)?1;p(1,x)?x注意;它要的僅僅只是一個定義函數(shù)~并沒有需要一個確切的值。20.利用恒等式?26??k?1?1計算圓周率的近似值。k2注意:sqrtm(a):矩陣a開平方根;sqrt(a):矩陣a對應(yīng)的元素開平方根。

      21.輸入一個正整數(shù),如果它是偶數(shù)就除以2,是奇數(shù)就乘以3加上1,如此一直變化,直到最后變成1。

      注意:判斷一個數(shù)是否為整數(shù)可以用判斷語句a==round(a)!在matlab中,用~=表示不等于,與c語言不同。22.(1)用遞歸調(diào)用求Fibonacci數(shù)列定義如下: f1=f2=1 , f(n+1)=f(n)+f(n-1)。

      (2)求Fibonacci數(shù)列大于4000的最小項。

      注意:這道題目很簡單,卻花了很長的時間~·主要是題目意思沒弄清便動筆,要學(xué)會分清題意,冷靜分析。另外還要注意while的條件,1便執(zhí)行,0則跳出~。

      23.列出所有的水仙花數(shù)。水仙花數(shù)是一個三位數(shù),其各位數(shù)字的立方和等于該書本身。例如:153=13+53+33 注意:當(dāng)輸出的不僅僅是一個數(shù)時,需要定義一個數(shù)組a(i),i=i+1,輸出為a。if語句中,判斷條件中為==,而不是賦值語句=?。e總犯相同的錯誤~~·

      24.試編一個m程序,將一維數(shù)組x中的N個數(shù)按顛倒的次序重新存儲。如N=5,原來x為:而經(jīng)過顛倒處理后x中數(shù)據(jù)的次序應(yīng)該為:x=[ 9 7 5 3 1 ]

      25.已知某班的5名學(xué)生的三門課成績列表如下:

      學(xué)生序號1 2 3 4 5 高等數(shù)學(xué)78 89 64 73 68 外語83 77 80 78 70 MATLAB語言82 91 78 82 68 試寫出有關(guān)命令,先分別找出三門課的最高分及其學(xué)生序號;然后找出三門課總分的最高分及其學(xué)生序號。針對上述的成績表,求出其三門課總分存入數(shù)組ZF,再利用SORT命令對之按降序排序,同時把相應(yīng)的學(xué)生序號存入數(shù)組XH。

      第二篇:MATLAB程序設(shè)計教學(xué)大綱

      《MATLAB程序設(shè)計教學(xué)大綱》

      課程代碼:1010330 實驗教學(xué):24學(xué)時+16學(xué)時 課程學(xué)分:2.5 先修課程:C/C++程序設(shè)計語言或VB程序設(shè)計語言 ? 課程的性質(zhì)和教學(xué)目標(biāo)

      《MATLAB程序設(shè)計》是工科大學(xué)非計算機類理、工、管理專業(yè)學(xué)生的一門計算機必修基礎(chǔ)課。MATLAB 作為一種高級科學(xué)計算軟件,是進行算法開發(fā)、數(shù)據(jù)可視化、數(shù)據(jù)分析以及數(shù)值計算的交互式應(yīng)用開發(fā)環(huán)境。本課程注重實際能力的培養(yǎng),使學(xué)生能夠運用MATLAB進行一般的工程計算,掌握MATLAB的基本技術(shù)。

      二、教學(xué)要求:

      課程的指導(dǎo)思想是“學(xué)以致用”,課程知識點系統(tǒng)全面,能鍛煉學(xué)生的動手能力。課堂教學(xué)講述了MATLAB基本技術(shù),包括基本計算、矩陣處理、符號運算、計算結(jié)果可視化等,結(jié)合實際問題,探索 “理論結(jié)合實踐”的教學(xué)模式,注重精講多練,培養(yǎng)學(xué)生利用MATLAB解決專業(yè)實際工程問題的能力。課堂教學(xué)覆蓋不到之處通過實驗課讓學(xué)生在實踐中學(xué)習(xí),力求實現(xiàn)“教學(xué)與自學(xué)相結(jié)合”的教學(xué)原則,重視創(chuàng)新能力和綜合能力的培養(yǎng)。

      三、教學(xué)內(nèi)容

      第一章 MATLAB課程概述()

      1.MATLAB開發(fā)環(huán)境介紹 2.MATLAB環(huán)境設(shè)置和路徑設(shè)置 3.MATLAB的安裝與激活 第二章 MATLAB程序設(shè)計基礎(chǔ)()1.常量與變量的使用方法; 2.數(shù)組的創(chuàng)建和使用方法; 3.各種運算符的使用方法;

      4.函數(shù)文件的創(chuàng)立和使用:m文件的創(chuàng)建和調(diào)用方法; 5.三種控制結(jié)構(gòu)(順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu))6.調(diào)試技巧

      第三章 MATLAB數(shù)值計算()

      1.矩陣運算(矩陣的構(gòu)造,矩陣的基本運算和高級運算)2.多項式運算(多項式的構(gòu)造和運算)3.其他數(shù)值計算

      4.數(shù)據(jù)處理(數(shù)據(jù)插值和曲線擬合)第四章 MATLAB符號計算 1.符號定義

      2.符號運算(初等代數(shù)運算,復(fù)合函數(shù),反函數(shù),極限,泰勒展開,級數(shù)求和,符號微分,符號積分等)第五章 圖形處理 1.2D圖形處理 2.3D圖形處理 3.聲音與動畫的實現(xiàn) 第六章 圖形用戶界面編程簡介 第七章 工具箱的使用介紹

      四、教材與參考書

      教材:《MATLAB基礎(chǔ)教程》(2011年第一版)清華大學(xué)出版社

      叢書名

      第三篇:Matlab交互式程序設(shè)計教程及舉例

      Matlab交互式程序設(shè)計教程及舉例

      一、創(chuàng)建GUI(Graphics User Interface)新文件和編輯已經(jīng)存在的GUI文件

      1、在matlab命令窗口中鍵入guide,彈出如下的對話框:

      這是一個雙頁面對話框,分別用于創(chuàng)建新文件和打開已存在的GUI文件,鼠標(biāo)點擊相應(yīng)的標(biāo)題即可切換。

      2、圖中可見“創(chuàng)建新的GUI”有四種模版選項,不管其它幾個,點選第一項,按“OK‘按鈕可打開如圖所示的GUI編輯器

      其中左邊是控件工具欄,用戶可根據(jù)自己的程序?qū)⑺枰目丶檬髽?biāo)拖至右側(cè)的編輯區(qū)域進行布局。(用戶可將鼠標(biāo)懸停在各個控件圖表上查看各個對象的名稱)菜單欄下邊是工具條,其中常用的有“”(保存當(dāng)前GUI文件和相應(yīng)的m文件)、“

      ”(編寫相應(yīng)協(xié)調(diào)運行的m文件、“”(編輯當(dāng)前控件的相應(yīng)屬性)、“”(創(chuàng)建和修改用戶自己的程序菜單)、“”(保存當(dāng)前文件并運行改程序)。右下方主要區(qū)域是程序的界面布局窗口(灰色網(wǎng)格區(qū)域是布局區(qū)域,用戶可根據(jù)程序需要用鼠標(biāo)拖動該區(qū)域的右下角調(diào)整該區(qū)域的大?。?。

      3、此時可以按下“”圖標(biāo)保存該文件(自然此時程序沒有任何功能,只有一個主框架),彈出文件保存對話框,在文件名處輸入一個文件名(英文字母開頭),如“my1”等,擴展名自動設(shè)置為“.fig”。系統(tǒng)除了保存當(dāng)前的界面文件外,還自動生成一個與該界面一起協(xié)調(diào)運行的“my1.m”文件,并在m文件編輯窗口中打開它。

      4、瀏覽一下該文件,可以看到該文件中目前自動創(chuàng)建了3個函數(shù): function varargout = my1(varargin)function my1_OpeningFcn(hObject, eventdata, handles, varargin)function varargout = my1_OutputFcn(hObject, eventdata, handles)這些函數(shù)聲明和參數(shù)在后續(xù)的程序設(shè)計中不要做任何修改,切記??!

      對我們目前的應(yīng)用來說第一個函數(shù)和第三個函數(shù)的程序體也不要做任何修改。根據(jù)自己的程序涉及需要只需修改第二個函數(shù)的程序體部分。(具體的修改方式可以通過我的例子程序加以體會。)

      注意第二個函數(shù)程序體的最后一條語句 guidata(hObject, handles);該語句在后續(xù)的程序設(shè)計中將會頻繁使用,現(xiàn)在請先記住它。

      5、祝賀你!你現(xiàn)在已經(jīng)有了一個名為“my1.m”和“my1.fig”的可以運行的文件了!

      現(xiàn)在可以在matlab命令窗口中鍵入“my1”運行改程序,自然,除了顯示一個標(biāo)題為“my1”的空白窗口外,你還不能進行任何交互式控制操作(自然除了關(guān)閉該窗口外),因為你還沒有寫任何控制程序和添加任何控件。

      二、增加控件及編寫相應(yīng)的執(zhí)行程序

      1、現(xiàn)在可以編輯運行窗口的標(biāo)題欄——即將“my1”修改為自己希望的標(biāo)題,本例中我改為“參數(shù)a,b,n對r=acos(nt+b)的影響”。在GUI設(shè)計窗口中點擊“

      ”工具條圖標(biāo),彈出如下的“屬性編輯框”

      該窗口對于后續(xù)設(shè)計中的每個控件都可以打開(通過點擊“”工具條圖標(biāo)),它共有2列,左列是當(dāng)前對象的用戶可以修改的屬性名(按首字母順序排列),右列是每個屬性的可以編輯的屬性值,現(xiàn)在在左列找到“name”一項,將右側(cè)的自動生成的“my1”改為“參數(shù)a,b,n對r=acos(nt+b)的影響”。關(guān)閉此窗口,點擊“”以保存當(dāng)前修改并運行程序。OK!窗口的標(biāo)題欄已經(jīng)變成了“參數(shù)a,b,n對r=acos(nt+b)的影響”。

      2、現(xiàn)在開始程序的布局及控制設(shè)計,先從最簡單的一個控制按鈕開始。

      拖動GUI設(shè)計窗口左側(cè)的“Push Button”控件至右側(cè)設(shè)計區(qū)域中的自己希望的位置,放開鼠標(biāo),然后可以點選并拖動該控件的右下角改變該控件的大小,則界面中的第一個控件就緒。目前可以點擊“”以保存當(dāng)前修改并運行程序。發(fā)生了什么事情?運行窗口的響應(yīng)位置處有了這個交互式控制按鈕!點擊這個按鈕,除了按鈕自動界面上有個形象的動態(tài)響應(yīng)外,不會有任何響應(yīng),因為目前我們還沒有編寫任何控制程序。

      3、現(xiàn)在我們開始編寫該控制程序。點擊“”工具欄圖標(biāo),打開m文件編輯器,瀏覽相應(yīng)的文件,會發(fā)現(xiàn)文件末尾多了一個函數(shù)頭:

      function pushbutton1_Callback(hObject, eventdata, handles)這是系統(tǒng)自動生成的相應(yīng)按鈕控件的回調(diào)函數(shù),系統(tǒng)自動將其命名為pushbutton1,其中pushbutton代表該控件的類別是“Push Button”,后面的阿拉伯?dāng)?shù)字代表這是用戶在界面設(shè)計中所創(chuàng)建的第幾個(該控件名稱用戶可以進行修改,具體修改方法見下一條說明)?,F(xiàn)在用戶可以在該函數(shù)頭下邊填寫相應(yīng)的自己所希望的控制程序。

      目前我們只希望用戶點擊按鈕時進行一個簡單的操作:結(jié)束當(dāng)前程序并關(guān)閉該窗口。這只需如下的一條語句即可:(將之寫在該函數(shù)頭的下面)close;保存修改后的m文件,回到GUI設(shè)計窗口,再次點擊“”運行程序,然后在運行后的窗口中點擊該按鈕。哈哈!如我所愿,程序安全退出了!So Easy!!

      4、下面我們可以調(diào)整該按鈕的界面顯示和將自動生成的“pushbutton1”名稱改為自己容易記住的個性化名字。

      在GUI設(shè)計窗口中點擊此按鈕,然后點擊工具條上的“”工具條圖標(biāo),彈出相應(yīng)的“屬性編輯框”已調(diào)整它的名稱和運行時的界面屬性(任選)。本例中我的調(diào)整如下:(1)找到“tag”屬性,將其后的“pushbutton1”改為“jieshu”;(此時如果保存修改,然后進入相應(yīng)的m文件編輯窗口,可以驚喜地看到其中的最后一個函數(shù)也進行了相應(yīng)的修改:(將函數(shù)頭中的“pushbutton1”變成了“jieshu”)function jieshu_Callback(hObject, eventdata, handles)% hObject handle to jieshu(see GCBO)% eventdata reservedto be defined in a future version of MATLAB % handles structure with handles and user data(see GUIDATA)

      % Hints: get(hObject,'Value')returns position of slider % get(hObject,'Min')and get(hObject,'Max')to determine range of slider %---Executes during object creation, after setting all properties.function slider1_CreateFcn(hObject, eventdata, handles)% hObject handle to slider1(see GCBO)% eventdata reservedhandles not created until after all CreateFcns called

      % Hint: slider controls usually have a light gray background, change % 'usewhitebg' to 0 to use default.See ISPC and COMPUTER.usewhitebg = 1;if usewhitebg set(hObject,'BackgroundColor',[.9.9.9]);else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));end

      %---Executes on slider movement.function slider2_Callback(hObject, eventdata, handles)% hObject handle to slider2(see GCBO)% eventdata reservedto be defined in a future version of MATLAB % handles empty-handles not created until after all CreateFcns called

      % Hint: slider controls usually have a light gray background, change % 'usewhitebg' to 0 to use default.See ISPC and COMPUTER.usewhitebg = 1;if usewhitebg set(hObject,'BackgroundColor',[.9.9.9]);else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));end 其中的兩個_CreateFcn我們后續(xù)不需任何操作,所以也不需要任何修改,現(xiàn)在先記住我們需要對于兩個_Callback函數(shù)進行程序的填寫操作,以響應(yīng)當(dāng)程序執(zhí)行時當(dāng)用戶拖動滾動條時應(yīng)該引起何種響應(yīng),具體的響應(yīng)程序也在后續(xù)填寫,現(xiàn)在先在GUI界面中修改其屬性值。選中“Slider1”,打開相應(yīng)的屬性編輯器,找到其中的“Max”一欄,將后面的內(nèi)容改為“8”(本例我的“a”值最大值為8),找到其中的“Min”一欄,將后面的內(nèi)容改為“1”(本例我的“a”值最小值為1),找到“Value”一欄,點擊后面的圖標(biāo),在彈出的對話框中將“0.0”改為“5”,以指定在程序進行運行時將該滾動條的值設(shè)置為5。此時可以運行程序,觀察第一個滾動條中的滑塊位置應(yīng)該在中間偏右的位置,這說明上述設(shè)定已經(jīng)成功。

      “Slider2”我在這里先不做調(diào)整,系統(tǒng)自動默認最小值為0,最大值為1,當(dāng)前值為0,邏輯上本例的“b”值應(yīng)該在0與2π之間,作為示例,我在后續(xù)的程序書寫中將獲得的該滾動條上的當(dāng)前值乘以2π來進行相應(yīng)的調(diào)整。

      作為示例,我對于本程序中參數(shù)n用一個“Edit Text”進行程序運行中的輸入控制,所以在界面上再產(chǎn)生一個“Edit Text”,系統(tǒng)自動將其“Tag”設(shè)置為“edit1”,我對此不作修改,只是將其“FontSize”屬性調(diào)整為“16”,將‘String’屬性改為“1”。此時檢查m文件,可以觀察到系統(tǒng)又自動創(chuàng)建了2個函數(shù):

      function edit1_Callback(hObject, eventdata, handles)function edit1_CreateFcn(hObject, eventdata, handles)同樣其中的edit1_CreateFcn我們也不要進行任何改動,目前先記住日后在edit1_Callback中編寫程序以響應(yīng)用戶在程序運行時響應(yīng)的輸入即可。

      到此,本示例程序的控制對象和2個繪圖區(qū)域已經(jīng)完全建立完畢,目前我安排的界面如圖所示。

      8、下面再進行一些程序界面的輔助工作,用“Static Text”控件對界面增加一些說明,以增加界面的友好性。

      在第一個圖形窗口上方的空隙中放置一個“Static Text”,將“String”改為“參數(shù)a,b,n對r=acos(nt+b)的影響”,按自己的意愿設(shè)置好位置,顏色,字體大小,字體名稱等屬性值,具體設(shè)置詳細大家可以通過屬性編輯器窗口查看。

      在兩個滾動條和編輯框的左側(cè)依次放置3個“Static Text”,分別用于說明后續(xù)的3個控件分別用于控制哪個參數(shù),為此,將它們的“String”屬性分別設(shè)置為“a”、“b”、“n”,大小和顏色等外觀形象進行適當(dāng)?shù)恼{(diào)整。

      在第一個滾動條下的左右兩端各放置一個“Static Text”,分別用于說明該滾動條的最大值和最小值,為此將它們的“String”屬性分別設(shè)置為“1”、“8”;在第二個滾動條下的左右兩端各放置一個“Static Text”,分別用于說明該滾動條的最大值和最小值,為此將它們的“String”屬性分別設(shè)置為“0”、“2π”。

      最后,在兩個滾動條下方中部分別放置一個“Static Text”對象,分別用于實時顯示對應(yīng)的滾動條在程序運行時被用戶拉動時當(dāng)前的具體數(shù)值,所以其“String”屬性值將來在程序中即時獲取,因此在目前設(shè)計階段不進行調(diào)整,但為了避免混淆,將二者的“Tag”屬性分別修改為“texta”和“textb”以便于進行程序控制,具體實現(xiàn)方式參見后續(xù)程序的編寫。這樣設(shè)計完成時得到的界面如下圖。

      三、完整程序的編寫。

      目前本例所希望的界面布局已經(jīng)全部完成(除菜單外,此功能后續(xù)介紹),現(xiàn)在開始程序的編寫工作,寫具體的程序前,必須來了解matlab的各function(函數(shù))間的數(shù)據(jù)傳輸機制。我們先來考察一下已經(jīng)完成的m文件,在目前系統(tǒng)自動生成的所有function中,除第一個(相當(dāng)于C語言中的main函數(shù))外,其它的所有函數(shù)的輸入?yún)?shù)中都有一個名為handles的變量,這是matlab為GUI程序開發(fā)者提供的一個數(shù)據(jù)結(jié)構(gòu),用于各個函數(shù)之間的數(shù)據(jù)傳輸,handles是結(jié)構(gòu)名,程序中的每個各function間的數(shù)據(jù)都必須以handles.***的形式存在,才能實現(xiàn)各協(xié)調(diào)工作的各函數(shù)之間的數(shù)據(jù)傳輸,目前當(dāng)我們完成設(shè)計后,我們已經(jīng)有了一批形如handles.***的變量,如在添加了第一個顯示為“結(jié) 束”的按鈕并將其“Tag”屬性值設(shè)置為“jieshu”后系統(tǒng)已經(jīng)自動地為程序開發(fā)者創(chuàng)建了名為handles.jieshu的變量,如果我們在程序中希望訪問這個按鈕對象,我們就可通過這個handles.jieshu變量找到它,具體的訪問程序編寫后續(xù)寫程序時不難學(xué)會。接著我們創(chuàng)建“Tag”屬性分別為“help”和“jump”第二個、第三個按鈕時,系統(tǒng)馬上為我們也創(chuàng)建了相應(yīng)的兩個變量handles.help和handles.jump。接著我們建立兩個圖形窗口時,系統(tǒng)也依次建立了handles.axe1和handles.axes2兩個變量用于程序中訪問這兩個圖形窗口,在設(shè)置好兩個滾動條后,系統(tǒng)也立即建立了handles.slider1和handles.slider2兩個變量,然后再建立滾動條下面的編輯框時也建立了handles.edit1變量?,F(xiàn)在相信你明白“Tag”屬性值的作用了吧?該屬性值是什么,系統(tǒng)就在其前加上handles.而產(chǎn)生可以訪問該控件的一個變量,所以界面設(shè)計階段如果自己想修改“Tag”屬性值,必須保證和其它的不能相同,且符合matlab變量的命名規(guī)則——必須英文字母開頭,由字母數(shù)字和下劃線組成。接著我們在界面上布置的每個“Static Text”(靜態(tài)文本)都依次產(chǎn)生一個前綴為handels.的與相應(yīng)的“Tag”屬性一樣的變量,本例程序中我們所設(shè)置的那些靜態(tài)文本變量除最后2個外(即分別位于兩個滾動條下方中間的文本框)都不需要進行控制,所以不用理睬它們,只需記住最后兩個變量名分別是handles.texta和handles.textb,(它們的“Tag”屬性在設(shè)計階段我們分別已經(jīng)改為了texta 和textb。

      除了上述的在界面設(shè)計階段所自動建立的前綴為handles.的變量外,如果在每個函數(shù)中還需要創(chuàng)建新的變量,并希望這些變量值能為其它function共享,那么在定義新變量時一定也要建立形如handles.***的變量,如本例程序中我們要用到的handles.a,handles.b,handles.hh,handles.linewidth等。

      明白了數(shù)據(jù)變量命名機制后,我們現(xiàn)在開始完善我們本例的程序編寫。

      1、填寫系統(tǒng)已經(jīng)生成的my1_OpeningFcn函數(shù)

      在m文件中找到函數(shù):

      function my1_OpeningFcn(hObject, eventdata, handles, varargin)該函數(shù)名稱“_”前的名字與創(chuàng)建GUI時保存的文件名相同,“_”后的“OpeningFcn”由系統(tǒng)自動生成,是固定不變的,開發(fā)者也不可進行修改,該函數(shù)用于執(zhí)行用戶所希望的程序運行時的matlab語句。本例中我希望獲取在設(shè)計階段中兩個滾動條中設(shè)置好的當(dāng)前值作為函數(shù)r=acos(nt+b)中的a,b,n的值在左邊大圖像窗口中繪制該函數(shù)的圖像,并作為花絮在第二個圖像窗口中顯示名為“dance_29.gif”的圖像文件(該文件存放在當(dāng)前目錄下)。

      目前的該函數(shù)文件系統(tǒng)已經(jīng)自動生成了兩條語句 % Choose default command line output for my1 handles.output = hObject;

      % Update handles structure guidata(hObject, handles);不要修改它們,在兩行語句之間插入自己的語句。本例中我所鍵入的語句和簡單功能說明如下:

      handles.linewidth=2;%定義畫圖的線寬 handles.color='b';%定義畫圖的顏色 handles.a=get(handles.slider1,'value');%獲取第一個滾動條當(dāng)前值,并將其賦給變量handles.a %注意此句的語法,get(界面中的控件名稱,’所希望獲取的屬性名’ %還記得嗎?我們在設(shè)計階段該控件的’value’已經(jīng)設(shè)置為5 %所以此句執(zhí)行后handles.a=5 handles.b=2*pi*get(handles.slider2,'value');%原理與語法上句相同,稍有差異的是我們在設(shè)計階段此控件的最小值和最大值 %分別設(shè)置為0和1,即用戶在拉動滾動條時此值介于0和1之間

      %而我們希望該函數(shù)中b值的變化在0和2*pi之間,所以對獲得的滾動條的值 %乘以2*pi以達到我們的要求,不過在設(shè)計階段該值為0,所以此句執(zhí)行后 % handles.b=0 handles.n=str2double(get(handles.edit1,'string'));%原理和前句相同,獲取handles.edit1的字符串內(nèi)容,設(shè)計階段設(shè)置為5 %但其數(shù)據(jù)類型為字符串,所以用str2double函數(shù)轉(zhuǎn)化為浮點數(shù)賦值給handles.n handles.t=linspace(0,2*pi,1000);%對極坐標(biāo)函數(shù)r=acos(nt+b)中的自變量t進行采點,0和2*pi之間等間距采 %1000個點(呵呵,數(shù)目顯得比較多,辛苦計算機了)r=handles.a*cos(handles.b+handles.n*handles.t);% 對函數(shù)r=acos(nt+b)由獲取的常數(shù)a,b,n計算對應(yīng)t的1000個點處的函數(shù)值 %注意此時的變量r我沒有加前綴handles.,因為此變量僅僅在該函數(shù)內(nèi)部使用 %不需要其它函數(shù)共享,所以我們可以不把它放在handles結(jié)構(gòu)中 [x,y]=pol2cart(handles.t,r);%本來可以直接用polar函數(shù)畫該函數(shù)的圖像,但實驗一中的實驗大家也看到了會

      %出現(xiàn)極坐標(biāo)網(wǎng)格線,我希望不要它們,所以用pol2cart將這組極坐標(biāo)數(shù)據(jù)轉(zhuǎn)化為直角 %坐標(biāo),后面用plot函數(shù)在直角坐標(biāo)系下畫出等效的圖像

      %同樣變量x,y僅僅用于本函數(shù),所以也不需要加上handles.前綴 axes(handles.axes1);%用axes函數(shù)通知系統(tǒng)執(zhí)行后續(xù)畫圖操作在名為handles.axes1的圖形窗口內(nèi) %(即在設(shè)計時建立的左邊較大的圖形窗口內(nèi)畫圖)

      handles.hh=plot(x,y,'linewidth',handles.linewidth,'color',handles.color);%用plot函數(shù)畫由變量handles.linewidth指定線寬的圖像,目前其值為2 %注意該操作返回一個圖像指針值,將其值賦給變量handles.hh,用于其它函數(shù)操作 axis([-8.1 8.1-8.1 8.1]);%調(diào)整顯示窗口坐標(biāo)范圍 axes(handles.axes2);%用axes函數(shù)通知系統(tǒng)執(zhí)行后續(xù)畫圖操作在名為handles.axes2的圖形窗口內(nèi) %(即在設(shè)計時建立的右邊較大的圖形窗口內(nèi)畫圖)

      [handles.m1,handles.map1]=imread('dance_29.gif',1:10);%用imread函數(shù)讀取圖像文件dance_29.gif中的數(shù)據(jù)放入handles.m1(4維矩陣)%彩色圖像的顏色索引表放入handles.map1變量中

      %相應(yīng)的語法和邏輯較為復(fù)雜,如果大家有興趣,可查閱matlab幫助系統(tǒng)中的 %image processing toolbox(圖像處理工具箱)中的內(nèi)容

      %為與后面的語句相結(jié)合,大家形式上這樣理解:圖像文件dance_29.gif作為一個 %動態(tài)圖像文件,里面包含了10張靜態(tài)文件(當(dāng)連續(xù)播放時可產(chǎn)生動畫效果)

      %現(xiàn)在數(shù)據(jù)經(jīng)上條語句放在了4維矩陣(試著想象一下該矩陣的組成)handles.m1中 %其中三維子陣handles.m1(:,:,:,1)放置第一張圖片信息,??,三維子陣 %handles.m1(:,:,:,10)中依次防止了10幅其中的靜態(tài)圖片文件 imshow(handles.m1(:,:,:,1),handles.map1);%用imshow函數(shù)將上述的第一幅圖像顯示在當(dāng)前的圖形窗口內(nèi) axes(handles.axes1);%由于本程序運行的后續(xù)大部分操作都在第一個圖形窗口內(nèi),所以執(zhí)行該語句通知系統(tǒng) %此后再出現(xiàn)的繪圖命令都放在第一個圖形窗口內(nèi),即handles.axes1中。保存文件,此時運行程序,結(jié)果如下圖所示。

      左邊圖形窗口中顯示的是a=5,b=0,n=1時極坐標(biāo)函數(shù)r=acos(nt+b)的圖像,右邊圖形窗口中是腦白金老太婆跳舞時的一個瞬間定格畫面。

      現(xiàn)在不難注意程序運行窗口中的一點令人不舒服的地方:兩個滾動條下方的中央位置處還沒有滿足我們的要求——顯示當(dāng)前滾動條所處位置之值。那么我們繼續(xù)回到m文件的這個函數(shù)中,在剛剛完成的語句后繼續(xù)實現(xiàn)該功能:

      set(handles.texta,'string',num2str(handles.a));%邏輯上該函數(shù)(set)的功能與前述GUI設(shè)計中對每個對象填寫屬性值的功能一樣 %唯一的差異是在程序進行中用語句實現(xiàn),其語法為: %set(所要設(shè)置的對象變量名,’屬性名’,屬性值)%本語句是將handles.texta這個對象的'string'設(shè)置為變量handles.a的值 %細節(jié)方面需注意handles.a是數(shù)值類型,需要用num2str轉(zhuǎn)化為字符串 set(handles.textb,'string',num2str(handles.b));%與前一條語句功能一樣,只是所修改的對象和屬性值滿足我們的要求。此時再次運行程序,界面如下,實現(xiàn)了我們的顯示目地

      下面介紹一下該函數(shù)內(nèi)系統(tǒng)自動生成的語句 guidata(hObject, handles);的語法功能。

      為了讓程序內(nèi)的各函數(shù)共享handles數(shù)據(jù)結(jié)構(gòu)中的每個變量的最新數(shù)據(jù),在每個函數(shù)中,如果用戶修改或新定義了至少一個handles.***變量,那么切記在該函數(shù)的最后一條語句中一定要寫上該語句,以通知其它所有函數(shù):各位函數(shù)筒子們,我在工作中修改了共享數(shù)據(jù),日后工作中請訪問新的數(shù)據(jù),以免數(shù)據(jù)使用舊數(shù)據(jù)而發(fā)生錯誤!所以在日后其它函數(shù)中別忘了加上該語句。

      現(xiàn)在我們拖拉運行程序的滾動條或點擊“跳起來”按鈕,我們會發(fā)現(xiàn)沒有所希望的響應(yīng),這是正常的,因為我們還沒有編寫相應(yīng)的程序語句,下面我們開始逐個編寫各個對象發(fā)生交互性操作時所希望的程序相應(yīng)。

      2、填寫function slider1_Callback(hObject, eventdata, handles)函數(shù)體

      找到m文件中的function slider1_Callback(hObject, eventdata, handles)書寫下列語句:

      handles.a=get(handles.slider1,'value');%獲取新的滾動條位置值,賦給handles.a set(handles.texta,'string',num2str(handles.a))%在滾動條下方顯示新的相應(yīng)數(shù)值

      r=handles.a*cos(handles.b+handles.n*handles.t);%用新的a,和已知的b,n和向量t計算新的r [x,y]=pol2cart(handles.t,r);%轉(zhuǎn)換為直角坐標(biāo)

      handles.hh=plot(x,y,'linewidth',handles.linewidth,'color',handles.color);axis([-8.1 8.1-8.1 8.1]);%調(diào)整顯示范圍

      guidata(hObject, handles);%通知其它函數(shù)handles結(jié)構(gòu)發(fā)生了變化

      如何?這些語句都不陌生吧?所以進行相應(yīng)的調(diào)整時只需要簡單的復(fù)制——粘貼操作?,F(xiàn)在重新運行程序,拖動第一個滾動條,發(fā)生了什么變化?很興奮吧?

      3、填寫function slider2_Callback(hObject, eventdata, handles)函數(shù)體

      找到m文件中的function slider2_Callback(hObject, eventdata, handles)書寫下列語句:

      handles.b=2*pi*get(handles.slider2,'value');%獲取新的滾動條位置值,賦給handles.b,注意要乘以2*pi的set(handles.textb,'string',num2str(handles.b))%在滾動條下方顯示新的相應(yīng)數(shù)值

      r=handles.a*cos(handles.b+handles.n*handles.t);%用新的b,和已知的a,n和向量t計算新的r [x,y]=pol2cart(handles.t,r);%轉(zhuǎn)換為直角坐標(biāo)

      handles.hh=plot(x,y,'linewidth',handles.linewidth,'color',handles.color);axis([-8.1 8.1-8.1 8.1]);%調(diào)整顯示范圍

      guidata(hObject, handles);%通知其它函數(shù)handles結(jié)構(gòu)發(fā)生了變化

      4、完成function edit1_Callback(hObject, eventdata, handles)函數(shù)體

      找到m文件中的function edit1_Callback(hObject, eventdata, handles)書寫下列語句:

      handles.n=str2double(get(handles.edit1,'string'));r=handles.a*cos(handles.b+handles.n*handles.t);[x,y]=pol2cart(handles.t,r);handles.hh=plot(x,y,'linewidth',handles.linewidth,'color',handles.color);axis([-8.1 8.1-8.1 8.1]);guidata(hObject, handles);這些語句的語法和邏輯功能我們都熟悉了,就不添加注釋了。

      保存程序,再次運行程序,特別是修改數(shù)據(jù)編輯窗口中的n值,觀察運行結(jié)果。下面我們完成小花絮——在右側(cè)的圖像窗口中讓老太婆跳舞。

      5、完成function jump_Callback(hObject, eventdata, handles)程序體

      找到函數(shù)function jump_Callback(hObject, eventdata, handles)書寫下列語句

      axes(handles.axes2);%下面的繪圖操作在第二個圖形窗口中進行 for nn=0:49 n=rem(nn,10)+1;%找到循環(huán)變量被10除后的余數(shù),將余數(shù)加1,賦給n imshow(handles.m1(:,:,:,n),handles.map1);%在圖形窗口內(nèi)顯示程序運行時四圍圖片矩陣的第n個三維矩陣數(shù)據(jù) pause(.05);%暫停0.05秒 end axes(handles.axes1);%循環(huán)結(jié)束后通知系統(tǒng)日后繪圖操作在第一個圖形窗口內(nèi) 注意到此函數(shù)中我們沒有修改handles數(shù)據(jù)結(jié)構(gòu)之值,所以不需要用 guidata(hObject, handles);通知其它函數(shù)。

      介紹一個編程實用小技巧,隨著GUI界面中控件的增加,m文件的function個數(shù)也越來越多,為了快速找到自己希望的函數(shù),技巧如下:

      在m文件編輯器菜單欄“”中的圖標(biāo)“”,點擊它,會出現(xiàn)一個下拉菜單,里面列出了本m文件中所有的函數(shù),點擊自己希望的函數(shù)名,則編輯窗口中光標(biāo)會自動跳轉(zhuǎn)到此函數(shù)頭部分。如何?很人性化吧?

      三、為系統(tǒng)控制添加菜單控制

      除了用我們已經(jīng)看到的“按鈕”等控件增加程序的交互性手段外,也可以象我們常見的很多程序一樣,通過窗口頂部區(qū)域的菜單進行程序的交互式控制。本例中我們建立兩個簡單的菜單,其功能是第一個用于當(dāng)前圖像的顏色和圖形線寬的控制,第二個用于打開此文檔。

      1、建立兩個主菜單

      回到GUI界面設(shè)計環(huán)境,在工具條上點擊“標(biāo),打開如下圖所示的菜單編輯器。

      ”(創(chuàng)建和修改用戶自己的程序菜單)圖

      我們可以用它們編輯兩類菜單:“Menu Bar”和“Context Menu”(上下文菜單),本文檔只介紹前者,大家如果有性趣第二類菜單,可以查閱matlab的幫助系統(tǒng)。

      連續(xù)點擊兩次上方的工具條中的第一個圖標(biāo),下面的窗口中增加了兩項,如圖所示。

      系統(tǒng)自動將其顯示內(nèi)容和變量名“Tag”(這個不陌生吧?)分別命名為“Untitiled 1”和“Untitiled 2”,現(xiàn)在點選其中的一個,如“Untitiled 1”,編輯器右邊會出現(xiàn)該菜單的顯示和控制屬性編輯器如左圖,編輯其屬性如右圖

      點選第二個菜單項“Untitled 2”,分別設(shè)置兩個屬性如下圖。

      點擊“OK”按鈕?,F(xiàn)在保存并運行程序,可以看到運行窗口上方出現(xiàn)了兩個菜單條,這時再查閱一下m文件,我們會發(fā)現(xiàn)系統(tǒng)又自動生成了兩個函數(shù)頭

      function m1_Callback(hObject, eventdata, handles)function m2_Callback(hObject, eventdata, handles)其命名邏輯是我們剛才在設(shè)計時將兩個菜單對象的的“Tag”屬性分別修改為了m1和m2。

      現(xiàn)在在function m2_Callback(hObject, eventdata, handles)下書寫如下語句 Winopen('Matlab交互式程序設(shè)計教程及舉例.doc');保存文件,再次運行,如果當(dāng)前目錄下有該文件,則windows系統(tǒng)接受指令,打開該文件。

      2、建立第一個主菜單下分別用于控制顏色和線寬的兩個子菜單

      回到GUI編輯環(huán)境,點擊“”圖標(biāo),再次打開菜單編輯器,選擇第一個菜單項。

      然后連續(xù)點擊左上方的第二個圖標(biāo),建立該菜單的兩個子菜單項。分別重復(fù)1中的操作,在右方編輯窗修改它們的“Label”和“Tag”兩個屬性如下圖所示。

      對第一個子菜單項同樣分別建立三個子菜單項,“Label”屬性依次改為“1”、“2”、“3”,“Tag”屬性依次改為“m111”、“m112”、“m113”(大家自己可以任意取個性化的名字,我命名的原則是m代表“菜單”,“m113”是第1個主菜單下的第1個子菜單下的第3個菜單項,這樣日后在m文件下寫程序時不至于混亂);對第二個子菜單項同樣分別建立三個子菜單項,“Label”屬性依次改為“紅色”、“綠色”、“藍色”,“Tag”屬性依次改為“m121”、“m122”、“m123”。注意用鼠標(biāo)點擊其中的名為“2”和“藍色”的兩個菜單項的第5個屬性前的框,出現(xiàn)“√”,用于在程序運行時給用戶指示當(dāng)前的畫圖操作是用線寬為“2”的“藍色”繪制曲線,選擇后如圖

      。修改完后菜單編輯器顯示如下圖。

      點擊“OK”按鈕,結(jié)束菜單編輯。保存程序并運行之,在程序運行窗口中瀏覽觀察菜單和子菜單的變化。查看m文件,發(fā)現(xiàn)系統(tǒng)又自動生成了8個函數(shù)頭,后續(xù)我們編程控制需要的幾個函數(shù)分別是:

      function m111_Callback(hObject, eventdata, handles)function m112_Callback(hObject, eventdata, handles)function m113_Callback(hObject, eventdata, handles)function m121_Callback(hObject, eventdata, handles)function m122_Callback(hObject, eventdata, handles)function m123_Callback(hObject, eventdata, handles)其中前3個是用戶選擇“線寬”的3個菜單項的響應(yīng)函數(shù),后3個是用戶選擇“顏色”的3個菜單項的響應(yīng)函數(shù)。

      3、控制“線寬”的函數(shù)編輯

      在m文件中找到函數(shù)function m111_Callback(hObject, eventdata, handles)在其后書寫下列語句

      handles.linewidth=1;set(handles.hh,'linewidth',handles.linewidth);%改變名為handles.hh的圖形的線寬為1 set(handles.m111,'checked','on');%將該菜單項點選上“√”以指示當(dāng)前畫圖線寬為1 set(handles.m112,'checked','off');set(handles.m113,'checked','off');%另兩項菜單項如果之前有“√”,將其去掉 guidata(hObject, handles);%通知系統(tǒng)其它函數(shù)handles數(shù)據(jù)結(jié)構(gòu)發(fā)生了變化

      在m文件中找到函數(shù)function m112_Callback(hObject, eventdata, handles)在其后書寫下列語句

      handles.linewidth=2;set(handles.hh,'linewidth',handles.linewidth);%改變名為handles.hh的圖形的線寬為2 set(handles.m112,'checked','on');%將該菜單項點選上“√”以指示當(dāng)前畫圖線寬為2 set(handles.m111,'checked','off');set(handles.m113,'checked','off');%另兩項菜單項如果之前有“√”,將其去掉 guidata(hObject, handles);%通知系統(tǒng)其它函數(shù)handles數(shù)據(jù)結(jié)構(gòu)發(fā)生了變化

      在m文件中找到函數(shù)function m113_Callback(hObject, eventdata, handles)在其后書寫下列語句

      handles.linewidth=3;set(handles.hh,'linewidth',handles.linewidth);%改變名為handles.hh的圖形的線寬為3 set(handles.m113,'checked','on');%將該菜單項點選上“√”以指示當(dāng)前畫圖線寬為3 set(handles.m111,'checked','off');set(handles.m112,'checked','off');%另兩項菜單項如果之前有“√”,將其去掉 guidata(hObject, handles);%通知系統(tǒng)其它函數(shù)handles數(shù)據(jù)結(jié)構(gòu)發(fā)生了變化

      保存程序,運行它們,隨意點選“線寬”的3個子菜單項,觀察菜單和圖形的變化,體會相應(yīng)的程序控制邏輯。

      4、控制“顏色”的函數(shù)編輯

      在m文件中找到函數(shù)function m121_Callback(hObject, eventdata, handles)在其后書寫下列語句 handles.color='r';set(handles.hh,'color',handles.color);%改變名為handles.hh的圖形的顏色為紅色 set(handles.m121,'checked','on');%將該菜單項點選上“√”以指示當(dāng)前畫圖顏色為紅色 set(handles.m122,'checked','off');set(handles.m123,'checked','off');%另兩項菜單項如果之前有“√”,將其去掉 guidata(hObject, handles);%通知系統(tǒng)其它函數(shù)handles數(shù)據(jù)結(jié)構(gòu)發(fā)生了變化 在m文件中找到函數(shù)function m122_Callback(hObject, eventdata, handles)在其后書寫下列語句 handles.color='g';set(handles.hh,'color',handles.color);%改變名為handles.hh的圖形的顏色為綠色 set(handles.m122,'checked','on');%將該菜單項點選上“√”以指示當(dāng)前畫圖顏色為綠色 set(handles.m121,'checked','off');set(handles.m123,'checked','off');%另兩項菜單項如果之前有“√”,將其去掉 guidata(hObject, handles);%通知系統(tǒng)其它函數(shù)handles數(shù)據(jù)結(jié)構(gòu)發(fā)生了變化

      在m文件中找到函數(shù)function m123_Callback(hObject, eventdata, handles)在其后書寫下列語句 handles.color='b';set(handles.hh,'color',handles.color);%改變名為handles.hh的圖形的顏色為藍色 set(handles.m123,'checked','on');%將該菜單項點選上“√”以指示當(dāng)前畫圖顏色為藍色 set(handles.m121,'checked','off');set(handles.m122,'checked','off');%另兩項菜單項如果之前有“√”,將其去掉 guidata(hObject, handles);%通知系統(tǒng)其它函數(shù)handles數(shù)據(jù)結(jié)構(gòu)發(fā)生了變化

      保存程序,運行它們,隨意點選“顏色”的3個子菜單項,觀察菜單和圖形的變化,體會相應(yīng)的程序控制邏輯。

      第四篇:矩量法matlab程序設(shè)計實例

      矩量法matlab程序設(shè)計實例:

      Hallen方程求對稱振子天線

      一、條件和計算目標(biāo) 已知:

      對稱振子天線長為L,半徑為a,且天線長度與波長的關(guān)系為L?0.5?,a??L,a???,設(shè)??1,半徑a=0.0000001,因此波數(shù)為k?2?/??2?。目標(biāo): 用Hallen方程算出半波振子、全波振子以及不同L/?值的對應(yīng)參數(shù)值。

      求:(1)電流分布

      (2)E面方向圖(二維),H面方向圖(二維),半波振子空間方向性圖(三維)

      二、對稱振子放置圖

      l/2電流分布饋電端~l/2yx圖1 半波振子的電流分布

      半波振子天線平行于z軸放置,在x軸和y軸上的分量都為零,坐標(biāo)選取方式有兩種形式,一般選取圖1的空間放置方式。圖1給出了天線的電流分布情況,由圖可知,當(dāng)天線很細時,電流分布近似正弦分布。

      三、Hallen方程的解題思路

      z2z1z?izzGz,zdz?c1coskz?c2sinkz????''?'kj??z0i' ?Ezsinkz?z'dz????z?對于中心饋電的偶極子,Hallen方程為

      ?L2L?2?i(z')G?z,z'?dz'?c1coskz?c2sinkz?脈沖函數(shù)展開和點選配,得到

      Visinkz,j2??LL?z?? 22?In?n?1N??1zn?znG?zm,z'?dz'?c1coskzm?c2sinkzm?Visinkzm,j2?m?1,2,???,N 上式可以寫成 矩陣形式為 ?In?2N?1npmn?c1qm?c2sm?tm,m?1,2,???,N

      ?p12,p13,??,p1,N?1,q1,s1??I2??t1??????t?p,p,??,p,qsI22232,N?12,23?????2????????????????????????????? ????????????????IN?1????????????????????c??t????1??N?1???tN???c2????pN2,pN3,??,pN,N?1,qN,sN???

      四、結(jié)果與分析

      (1)電流分布

      圖2 不同L/?電流分布圖

      分析:由圖2可知半波振子天線L/?=0.5的電流分布最大,饋點電流最大,時輻射電阻近似等于輸入電阻,因為半波振子的輸入電流正好是波腹電流。(2)E面方向圖(二維)

      圖5 不同L/?的E

      面方向圖(1)分析:

      (a)θ=0時,輻射場為0。

      (b)當(dāng)L/???1(短振子)時,方向函數(shù)和方向圖與電流元的近似相同。

      ?(c)L/??1.25時,最大輻射方向為???max?,主瓣隨L/?增大變窄。

      2L/??1后開始出現(xiàn)副瓣。由圖6可以看出。

      (d)L/??1.25時,隨L/?增大,主瓣變窄變小,副瓣逐漸變大;L/?繼續(xù)增大,主瓣轉(zhuǎn)為副瓣,而原副瓣變?yōu)橹靼?。(如圖6所示)

      圖6 不同L/?的E面方向圖(2)H面方向圖(二維)

      圖7 未歸一化的不同L/?的H面方向圖

      圖8 歸一化的不同L/?的H面方向圖

      空間方向性圖(三維)

      圖9 半波振子的空間方向圖

      圖10 半波振子的空間剖面圖

      附程序: clc;clear all clf;tic;

      %計時 lambda=1;N=31;a=0.0000001;%已知天線和半徑 ii=1;for h=0.2:0.1:0.9 L=h*lambda;len=L/N;%將線分成奇數(shù)段,注意首末兩端的電流為0 e0=8.854e-012;u0=4*pi*10^(-7);k=2*pi/lambda;c=3e+008;w=2*pi*c;%光速,角頻率 ata=sqrt(u0/e0);z(1)=-L/2+len/2;for n=2:N

      z(n)=z(n-1)+len;end for m=1:N

      for n=1:N

      if(m==n)

      p(m,n)=log(len/a)/(2*pi)-j*k*len/4/pi;

      else

      r(m,n)=sqrt((z(m)-z(n))^2+a^2);

      p(m,n)=len*exp(-j*k*r(m,n))/(4*pi*r(m,n));

      end

      end end for m=1:N

      q(m)=cos(k*z(m));

      s(m)=sin(k*z(m));

      t(m)=sin(k*abs(z(m)))/(j*2*ata);end pp=p(N+1:N^2-N);pp=reshape(pp,N,N-2);mat=[pp,q',s'];%構(gòu)造矩陣 I=matt';II=[0;I(1:N-2);0];%加上兩端零電流 Current=abs(II);x=linspace(-L/2,L/2,N);

      figure(1);string=['b','g','r','y','c','k','m','r'];string1=['ko','bo','yo','co','mo','ro','go','bo'];plot(x,Current,string(ii),'linewidth',1.3);xlabel('L/lambda'),ylabel('電流分布');grid on hold on %legend('L=0.1lambda','L=0.2lambda','L=0.3lambda','L=0.4lambda','L=0.5lambda','L=0.6lambda','L=0.7lambda','L=0.8lambda','L=0.9lambda','L=1lambda')legend('L=0.1lambda','L=0.3lambda','L=0.5lambda','L=0.7lambda','L=0.9lambda','L=1.1lambda','L=1.3lambda','L=1.5lambda')Zmn=1/I((N+1)/2);%%%%%%V=1v theta=linspace(0,2*pi,360);

      for m=1:360

      for n=1:N

      F1(m,n)=II(n).*exp(j*k*z(n)*cos(m*pi/180))*len*sin(m*pi/180);

      end end F2=-sum(F1');F=F2/max(F2);%%%歸一化 figure(2);polar(theta,abs(F),string(ii));title('E面歸一化方向圖')view(90,-90)%legend('L=hlambda','L=0.3lambda','L=0.3lambda','L=0.4lambda','L=0.5lambda','L=0.6lambda','L=0.7lambda','L=0.8lambda','L=0.9lambda','L=1lambda')legend('L=0.1lambda','L=0.3lambda','L=0.5lambda','L=0.7lambda','L=0.9lambda','L=1.1lambda','L=1.3lambda','L=1.5lambda')hold on figure(3)kk=1;for phi=0:pi/180:2*pi for n=1:N

      FF(n)=II(n)*len*exp(i*k*len*n*cos(pi/2))*sin(pi/2);end;FFF(kk)=sum(FF);kk=kk+1;end;phi=0:pi/180:2*pi;polar(phi,FFF/max(abs(FFF)),string(ii));title('pattern,F({theta},{phi}),theta=90');legend('L=0.1lambda','L=0.3lambda','L=0.5lambda','L=0.7lambda','L=0.9lambda','L=1.1lambda','L=1.3lambda','L=1.5lambda')hold on figure(4)polar(phi,FFF/max((FFF)),string(ii));title('pattern,F({theta},{phi}),theta=90');hold on figure(5)mm=1;for theta=0:0.01*pi:pi;for n=1:N

      E(1,n)=2*pi*c*u0*len/(4*pi*1)*(exp(-i*k*1)*exp(i*k*len*n*cos(theta))*sin(theta));end

      EE=E*II;

      G(mm)=(4*pi*1^2)/ata/abs(II((N-1)/2+1))^2/(-real(Zmn))*abs(EE)^2;mm=mm+1;end

      H-plane

      L/lambda

      H-plane

      第五篇:Matlab心得體會

      Matlab心得體會

      10金融3 呂淼 2010241125 在為學(xué)習(xí)這門課前就聽說了他的強大,因為現(xiàn)在的經(jīng)濟模型都是需要這些分析軟件的,也曾聽說金融的未來方向是需要數(shù)學(xué)等等作為依托的。曾經(jīng)旁聽過學(xué)校數(shù)學(xué)建模的課程,當(dāng)時老師用的是lingo。對那個只需要U盤攜帶就可以安裝的小東西記憶深刻。等到學(xué)習(xí)matlab時覺得這才是真正的王道啊。

      它不僅有強大的運算功能,還有強大的繪圖功能,雖然學(xué)習(xí)了有一個學(xué)習(xí),但是我對他的了解額僅僅是一點點,或許連入門都談不上。因為我學(xué)習(xí)時了解到一個現(xiàn)實。就是matlab的學(xué)習(xí)依賴有比較好的數(shù)學(xué)功底,其中我看最經(jīng)常運用到的就是矩陣。我從網(wǎng)上了解到matlab是一門高等數(shù)學(xué)和計算機技術(shù)結(jié)合的東西,學(xué)習(xí)它必須具有相應(yīng)的數(shù)學(xué)和計算機知識。然而很可惜,我的書寫不是很好。每次講到這個部分的時候就覺得聽說理解無能了。特別是我今年還是大二,有一次老師講課時用到協(xié)方差。無可避免的我笑了,因為協(xié)方差是我們下節(jié)課概率論數(shù)理統(tǒng)計老師要講的內(nèi)容。大一的時候還不覺得,但是大二,越是學(xué)習(xí)以后的內(nèi)容越是感覺到時間不夠用?;蛟S時間是夠用的,但是無法放棄那些占用自己時間表的無用項目。雖然這學(xué)期的學(xué)習(xí)的時間短暫,就算時間足夠,老師也不能把所有的都講解給我們,因為一個軟件的功能需要我們自己不斷的去摸索,老師也不可能知道所有。老師只是個指路人,最終的學(xué)習(xí)還是要靠自己。而且在摸索的過程中,我們能夠發(fā)現(xiàn)和體會學(xué)習(xí)的快樂。痛并快樂著是種常態(tài)了吧。

      自我感覺學(xué)習(xí)matlab與其說是學(xué)習(xí)一門軟件,更不如說是學(xué)習(xí)一門語言。用一種數(shù)理的語言描述現(xiàn)象,揭示表象下的規(guī)律。此外,我認為matlab中的作圖功能很強大,不僅簡單的函數(shù)現(xiàn)象可以明確畫出,而且一些點狀物,甚至立體圖也可以畫出。大一上微積分的時候,老師曾經(jīng)多次在課件中加入用matlab畫出的圖來。不論是一維二維三維等等,都能很好的畫出來。只要能編寫出函數(shù)式,在短短的幾秒之內(nèi),他就會呈現(xiàn)在你眼前。另外就是圖形的直觀性,這是由陰影的制作的。而且可以根據(jù)需要,坐標(biāo)圖上加標(biāo)題,坐標(biāo)軸標(biāo)記,文本注釋級柵格等,也可以指定圖線形式,比如是虛線。顏色也可以自己來定。可以在同一張圖上畫,也可以單個顯示。

      今年選擇金融matlab一方面出于希望能夠提前修完大三時期的課程,能夠空出更多的時間去考研或者為就業(yè)做準(zhǔn)備。另一個考慮就是希望明年能夠參加數(shù)學(xué)建模大賽,今年種種糾結(jié)放棄了,覺得萬分可惜。明年也就是大三下學(xué)期的話我就會再來一次,而且還會更加堅定些。那么學(xué)習(xí)matlab的話對明年的計劃也是有幫助的。在學(xué)習(xí)的過程中,因為以前學(xué)過access中的select語言,覺得就編寫這方面是有共性的,但是matlab的編程語言似乎更多更復(fù)雜一點,這是由于涉及的數(shù)學(xué)模型,數(shù)學(xué)公式更多的原因。老師在講解的過程中是通過一個個具體的金融例子來講解的,而不是就matlab這個具體的軟件工具進行講解。這個給我?guī)硐喈?dāng)大的打擊,因為我發(fā)現(xiàn)我不僅僅是工具不能夠熟練,涉及到的專業(yè)知識也是一知半解。這更加堅定了我要好好學(xué)習(xí)專業(yè)知識的決心,大學(xué)四年有幾個人是希望荒度過去的呢?可是今年的這門課真的是讓我感到?jīng)]學(xué)到什么,估計也是因為我抱著看一看的隨意態(tài)度來的吧,也沒有那種遇到不懂的就一定要弄懂它的決心和毅力。說什么都是借口了,無法掩飾我沒有學(xué)好它的事實。事實上,我覺得今年這門課的重點并不是讓我們掌握這種軟件的具體用法,而是主要向我們展示如何用它去解決一些金融問題,數(shù)學(xué)問題。這點讓我很郁悶,因為我不懂得原理,聽起來這門課倍感吃力啊??墒锹?,年輕沒有什么不可以,又有誰可以斷言我接下來的生活中不能好好學(xué)習(xí)這個東西為自己的工作,學(xué)習(xí),生活,研究興趣帶來方便呢。

      從大學(xué)開學(xué)的見聞到現(xiàn)在學(xué)習(xí)MATLAB,感覺這是一個很好的軟件,語言簡便,實用性強。作為一個做新手,想要學(xué)習(xí)好這門語言,可以說還是比較難的。在我接觸這門語言的這些天,除了會畫幾個簡單的圖形,其他的還是有待提高。從另一個方面也對我們大學(xué)生提出了兩個要求——充實的課外基礎(chǔ)和良好的英語基礎(chǔ)。在現(xiàn)代,幾乎所有好的軟件都是來自國外,假如不會外語,想學(xué)好是非常難的。其實想要學(xué)習(xí)好一們語言,不能只靠老師,關(guān)鍵是自己。每個人內(nèi)心深處都是有抵觸意識的,不可能把老師的所有都學(xué)到。學(xué)習(xí)這門語言,不光是學(xué)習(xí)一種語言,更重要的事學(xué)習(xí)一種方法,一種學(xué)習(xí)軟件的方法,還有學(xué)習(xí)的態(tài)度。

      總結(jié)一下,學(xué)習(xí)任何一門語言:態(tài)度決定一切。不論是英語還是計算機語言。其實以前上高中的時候接觸過這種編程語言,當(dāng)時記得最頭疼的就是循環(huán)語句,但是在matlab中這種東西用的就比較少了。語言語句都是很簡潔利落的,都是一槍瞄死靶心的那種,很直接,這也讓我減輕不少心理負擔(dān)。

      其實學(xué)習(xí)這種事,與其說學(xué)習(xí)什么具體的東西,更不如說是學(xué)習(xí)一種態(tài)度,從種種波折中認識到自己的局限性,不足。心情會沮喪,也會豁然開朗。光想不練假把式,不論想的再多,不實際運用還是沒有用的。書山有路勤為徑,學(xué)海無涯苦作舟。華山再高,頂有過路。這就是我今年學(xué)習(xí)金融matlab的心得體會。

      下載matlab程序設(shè)計及心得體會word格式文檔
      下載matlab程序設(shè)計及心得體會.doc
      將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
      點此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進行舉報,并提供相關(guān)證據(jù),工作人員會在5個工作日內(nèi)聯(lián)系你,一經(jīng)查實,本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦

        Matlab心得體會

        Matlab心得體會 10金融3 呂淼 2010241125 在為學(xué)習(xí)這門課前就聽說了他的強大,因為現(xiàn)在的經(jīng)濟模型都是需要這些分析軟件的,也曾聽說金融的未來方向是需要數(shù)學(xué)等等作為依托的。......

        matlab心得體會

        MATLAB學(xué)習(xí)心得體會 Matlab,提起它,不管我們上課是否認真聽講了,我們都應(yīng)該對它不再陌生,我們不可否認它的強大之處,正如一節(jié)課時老師給我們說的“Matlab可以做很多事情”。通過......

        matlab心得體會

        心得體會 雖然說本次matlab實訓(xùn)只有短短的一個禮拜,但在老師的耐心教導(dǎo)以及自身的努力下,還是獲益匪淺。本次matlab實訓(xùn)是以信號與系統(tǒng)知識為實例來編寫程序的,由于信號與系統(tǒng)......

        MATLAB心得體會

        MATLAB心得體會 這學(xué)期開了MATLAB這門課程,這里面有太多的學(xué)問。只要書里面有最基本的語法和命令,對于一個有編程基礎(chǔ)的人,MATLAB可以在一個下午的時間內(nèi)學(xué)會。當(dāng)然,僅僅是學(xué)會......

        matlab心得體會

        Matlab是一個基于矩陣運算的軟件 1.helpwin只是尋找函數(shù)類,一般不如用doc(相當(dāng)于幫助文檔中的搜索),但在用doc搜索不到幫助文件時可用helpwin,如找有關(guān)的幫助等;打開格式非標(biāo)準(zhǔn)的m......

        程序設(shè)計心得體會

        【收獲及體會】通過兩個星期的折騰,總算把課程設(shè)計給完成了,這是一個堅苦而又漫長的過程。是啊,讀了那么多年的書,課程設(shè)計可是第一次??粗鴦趧映晒?,很欣慰!雖然這不是我一個人做......

        程序設(shè)計心得體會

        程序設(shè)計心得體會 程序設(shè)計心得體會一:程序設(shè)計心得體會 在這為期半個月的時間內(nèi),通過我們小組各成員之間的相互討論和合作,我們完成了學(xué)生信息管理系統(tǒng)的程序設(shè)計,更值得高興......

        程序設(shè)計心得體會

        程序設(shè)計心得體會【收獲及體會】 通過兩個星期的折騰,總算把課程設(shè)計給完成了,這是一個堅苦而又漫長的過程。是啊,讀了那么多年的書,課程設(shè)計可是第一次??粗鴦趧映晒?,很欣慰!......