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

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

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

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

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

      Matlab學習心得系列——005. 結構數(shù)組[大全五篇]

      時間:2019-05-12 14:33:55下載本文作者:會員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關的《Matlab學習心得系列——005. 結構數(shù)組》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《Matlab學習心得系列——005. 結構數(shù)組》。

      第一篇:Matlab學習心得系列——005. 結構數(shù)組

      005.結構數(shù)組

      編程語言要描述日常生活中的某一類事物,就是要賦予這類事物一個公共名稱(類名),再把這類事物具有的各種屬性分別存放為若干變量(數(shù)據(jù)元素),這就是“結構體”。結構體里再加上若干操作其數(shù)據(jù)元素的函數(shù)(成員函數(shù)),就是“類”。然后,“類”就可以作為新的數(shù)據(jù)類型定義對象(類的實例化),再操作這些對象,實現(xiàn)編程需要。

      以上就是面向對象的編程思想(適合C++或Java)。

      例如,描述學生,就用一個學生類Student;學生屬性:學號、姓名、專業(yè);實現(xiàn)操作:學生轉專業(yè)。(粗略C++代碼)

      classStudent { private:// 數(shù)據(jù)元素一般設為該類的私有數(shù)據(jù),防止屬性被隨意修改 int number;string name;

      // string定義字符串 stringmajor;public: // 成員函數(shù)一般設為可公共訪問

      Student(intnum, string n, string m);// 類構造函數(shù)用于生成具體對象,必須與類名相同 voidChangeMajor(String newmajor);} Student::Student(intnum, string n, string m){ number = num;name = n;major = m;} void Student::ChangeMajor(String newmajor)// Student::表示函數(shù)是來自Student類 { major = newmajor;} // 下面是使用Student類:

      Student s1;

      // 用Student類定義一個“學生”對象s1 s1.ChangeMajor(“Math”);//把學生s1的專業(yè)修改為“Math”

      可見,借助結構體或類的編程,既能與現(xiàn)實世界中的事物建立自然的對應(符合思維習慣),又能實現(xiàn)模型化的“批量生產(chǎn)”(用“類”可以整體性地、一遍一遍地建立對象、操作對象)。這也是結構體或類(面向對象編程)的優(yōu)勢所在。__________________________ 回到Matlab,元胞數(shù)組只是呆板的堆放數(shù)據(jù)的倉庫,結構數(shù)組則具有了與實際對象所對應的結構屬性,這等同于“C語言的結構體”、“C++或Java的類的數(shù)據(jù)成員部分”。

      結構數(shù)組是由若干個結構(struct)組成,每個結構都包含多個結構域(fields);數(shù)據(jù)必須存放在結構域中,可以是任何類型、任意大小的數(shù)據(jù)。例如,多個圖形對象構成一個結構數(shù)組,每個圖形對象就是一個結構,圖形對象的一個屬性對應一個結構域。

      即,結構數(shù)組(矩陣)的元素是結構,每個結構包含若干結構域。

      一、結構數(shù)組的創(chuàng)建 1.用直接賦值語句創(chuàng)建

      例1 創(chuàng)建學生的結構數(shù)組,每個結構包含學號、姓名兩個結構域(屬性)

      student(1).number = '001';% 直接對結構數(shù)組第1個結構s(1)的結構域number賦值

      student(1).name = '張三';student(1).number = '002';student(2).name = '李四';student

      運行結果:student = 1x2 struct array with fields: number name 注意:上面是一維結構數(shù)組,也可以是二維或更多維的,例如,student(1,2).name = '……';

      2.用struct函數(shù)創(chuàng)建

      語法:s = struct(‘field1’, values1, ‘field2’, values2, …)student(1)= struct('number', '001','name', '張三');student(2)= struct('number', '002','name', '李四');student

      運行結果同上。

      二、結構數(shù)組的操作

      1.訪問結構數(shù)組中的結構域

      (1)通過結構域訪問操作符“.”例如,student(2).name返回學生二的姓名:李四

      (2)利用deal()函數(shù)

      [name1, name2] = deal(student(:).name)

      返回name1 =張三name2 =李四 “:”表示所有結構域

      (3)利用getfield()函數(shù)獲取指定結構域的值,對于前面的結構數(shù)組student,大小是1×2 getfield(student,{1,2},'name')% 返回結構數(shù)組student第1行第2列的結構的結構域為name的值,% 相當于student(1,2).name

      運行結果:ans= 李四

      2.其他操作

      (1)設置或修改結構域的值——setfield()

      student = setfield(student,{1,2},'name', ‘王五’);——修改student(1,2).name的值為‘王五’

      注意:必須把setfield()返回值賦給原結構數(shù)組,修改才會生效。

      (2)刪除結構數(shù)組的指定結構域——rmfield()

      s.field1 = [1,2,3];s.field2 = 'string';s.field3 = {1 2 3;4 5 6};s s =rmfield(s,{'field2','field3'})s = rmfield(s,'field1')

      運行結果:s =

      field1: [1 2 3]

      field2: 'string' field3: {2x3 cell}

      s =

      field1: [1 2 3]

      s =1x1 struct array with no fields.注意:必須把rmfield()返回值賦給原結構數(shù)組,刪除才會生效。

      (3)判斷函數(shù)

      isfield(s, ‘fieldname’)——判斷s中是否含有名為fieldname的結構域; isstruct(s)——判斷s是否是結構數(shù)組

      3.結構數(shù)組與元胞數(shù)組的相互轉換

      (1)結構數(shù)組轉元胞數(shù)組——struct2cell()

      s.field1 = [1,2,3];s.field2 = 'string';s.field3 = {1 2 3;4 5 6};s c = struct2cell(s)運行結果:s =

      field1: [1 2 3] field2: 'string' field3: {2x3 cell} c =

      [1x3 double] 'string'

      {2x3 cell }(2)元胞數(shù)組轉結構數(shù)組

      s = cell2struct(c, fields, dim)

      c = {‘001’, ‘張三’, 175, 65;‘002’, ‘李四’, 178, 70}

      fields = {'Num','Name','Height','Weight'};% 臨時變量,存放全部的結構域名

      s = cell2struct(c,fields,2)% dim=2表示將c按行轉為結構數(shù)組(即每行是一個結構)% dim=1表示將c按列轉為機構數(shù)組(即每列是一個結構)

      s(1)

      運行結果:c =

      '001'

      '張三'

      [175]

      [65] '002'

      '李四'

      [178]

      [70]

      s =2x1 struct array with fields: Num Name Height Weight ans=Num: '001' Name: '張三' Height: 175 Weight: 65

      下次內容:字符串。

      第二篇:Matlab學習心得系列——004. 元胞數(shù)組

      004.元胞數(shù)組

      矩陣只能存放若干單一類型的數(shù)據(jù),且不能存放矩陣(即矩陣元素不能是矩陣),也就是說矩陣只適合同時處理若干相同類型的數(shù)據(jù)。

      Matlab編程有時需要突破這種局限,同時處理不同類型的數(shù)據(jù),或者處理更高層面的數(shù)據(jù)時需要把若干矩陣作為“元素”整體處理(當然,如果是同樣大小的若干矩陣可以采用高一維的矩陣),就需要元胞數(shù)組了。

      做個比喻的話,元胞數(shù)組就好比“櫥柜”,由若干個“抽屜”構成,每個“抽屜”里可以存放任何“東西”(數(shù)據(jù)類型,包括矩陣)。這為Matlab編程提供了極大的方便性和靈活性。

      注:矩陣的“元素”,叫做元素;元胞數(shù)組的“元素”,叫做元胞。元胞數(shù)組更準確的叫法,應該叫元胞矩陣。

      一、元胞數(shù)組的創(chuàng)建

      三種方法:

      1.直接通過賦值語句創(chuàng)建

      元胞數(shù)組可以理解成更大級別的矩陣(能存放矩陣),用“{ }”來創(chuàng)建,以區(qū)別創(chuàng)建矩陣的“[ ]”

      a = {'hello' [1 2 3;4 5 6];1 {'1' '2'}} 創(chuàng)建2×2的元胞數(shù)組,% 同行元素間用“, 或空格”隔開 % 行與行間用“;”隔開

      % 第1行第1列的元胞,存放字符串'hello'; % 第1行第2列的元胞,存放一個2×3矩陣 % 第2行第1列的元胞,存放數(shù) 1 % 第2行第2列的元胞,存放1×2元胞數(shù)組

      運行結果:a =

      'hello'

      [2x3 double] [

      1]

      {1x2 cell }

      2.對元胞數(shù)組各元胞一一賦值

      例如(1)中的元胞數(shù)組a也可以這樣創(chuàng)建:

      a{1,1} = 'hello';a{1,2} = [1 2 3;4 5 6];a{2,1} = 1;a{2,2} = {'1' '2'}};

      3.用cell()函數(shù)創(chuàng)建

      a = cell(2,3)

      % 生成2×3的空元胞數(shù)組

      此時,a =[]

      []

      [] []

      []

      [] 再賦值或操作。

      二、元胞數(shù)組元胞的訪問

      訪問元胞數(shù)組的元素根據(jù)不同需要有兩種語法:(1)用“{ }”

      a{i, j}——返回第i行第j列元胞的數(shù)據(jù)內容。比如,a為前例中的元胞數(shù)組,a{1,2} = 1 4(2)用“()”

      a(i,j)——返回第i行第j列的元胞(外觀)。比如,a(1,2)= [2x3 double]

      三、元胞數(shù)組的操作(函數(shù))

      iscell(a)——判斷a是否是元胞數(shù)組,返回邏輯值1或0; celldisp(a)——顯示元胞數(shù)組a中各元胞的內容;

      celldisp(a,’cell1’)——顯示元胞數(shù)組a中各元胞的內容,用“cell1”代替元胞數(shù)組名“a”;

      cellplot(a)——以圖形化的方式顯示元胞數(shù)組a的內容;

      a = {'hello' [1 2 3;4 5 6];1 {'1' '2'}};iscell(a)celldisp(a)celldisp(a,'cell')cellplot(a)

      運行結果:ans=

      a{1,1} =hello a{2,1} = a{1,2} = 4 a{2,2}{1} =1 a{2,2}{2} =2

      cell{1,1} =hello cell{2,1} = cell{1,2} = 4 cell{2,2}{1} =1 cell{2,2}{2} =2

      cellstr(S)——S為字符串矩陣,把字符串矩陣轉換為元胞數(shù)組,每個字符串作為元胞數(shù)組的元胞位置不變,并去掉末尾的空格;

      S = {'hello' 'hi';'yes' 'OK';'no' 'not';'goodbye' 'bye bye'};cellstr(S)

      運行結果:ans=

      'hello'

      'hi'

      'yes'

      'OK'

      'no'

      'not'

      'goodbye'

      'bye bye' 注意:字符串中間的空格保留。

      num2cell(A,1)——A為數(shù)值矩陣,把數(shù)值矩陣轉換為元胞數(shù)組,把A的每一列轉換為一個元胞;num2cell(A,2),A的每一行轉換為一個元胞;

      A = [1,2,3;4,5,6;7,8,9;10,11,12] C = num2cell(A,1)D = num2cell(A,2)

      運行結果:A = 4 7 10

      C = [4x1 double]

      [4x1 double]

      [4x1 double] D=

      [1x3 double] [1x3 double] [1x3 double] [1x3 double]

      mat2cell(X, M,N)——把矩陣X轉換為元胞數(shù)組,M、N為向量,M中各元素之和等于X的行數(shù),N中各行之和等于X的列數(shù);

      例,把4×5矩陣(20個數(shù))轉換為2×2(4塊)的元胞數(shù)組:

      A = reshape(1:20,4,5);B = mat2cell(A, [2 2], [3 2])celldisp(C4)

      運行結果:A =1

      2

      3

      4

      B =

      [2x3 double]

      [2x2 double] [2x3 double]

      [2x2 double]

      B{1,1} =

      B{2,1} =

      B{1,2} =

      14

      B{2,2} =

      16

      另外,元胞數(shù)組可以類似矩陣操作實現(xiàn)變形(reshape()函數(shù))、拼接等(略)。

      下次內容——結構數(shù)組(類似于C語言中的結構體)。

      第三篇:matlab學習心得

      學習MATLAB 感想 學習了 MATLAB 這門課程,我了解該軟件的基本功能,也知道 了該軟件在我們生活中的重要地位。隨著社會的不斷發(fā)展,科技 的不斷進步,計算機的普及,它也被應用在越來越多的方面。MATLAB 的基本數(shù)據(jù)單位是矩陣,它的指令表達式與數(shù)學、工 程中常用的形式十分相似,故用 MATLAB 來解算問題要比用 C,F(xiàn)ORTRAN 等語言完成相同的事情簡捷得多,MATLAB 的最突出的 特點就是簡潔。MATLAB相對于其他的一些編程軟件有許多的優(yōu)點:

      一、語言簡潔緊湊,使用方便靈活,庫函數(shù)極其豐富。

      二、運算符豐富。

      三、MATLAB既具有結構化的控制語句(如for循環(huán)、while循環(huán)),又有面向對象編程的特性。

      四、語法限制不嚴格,程序設計自由度大。

      五、程序的可移植性很好,基本上不做修改就可以在各種型號的計 算機和操作系統(tǒng)上運行。

      六、MATLAB的圖形功能強大。用madlab創(chuàng)建矩陣時,方法有兩種:第一、可以直接依次輸入矩 陣各行各列的元素,但矩陣元素必須用[ ]括住,矩陣元素必須用逗號 或空格分隔,在[ ]內矩陣的行與行之間必須用分號分隔。第二、用 MATLAB函數(shù)創(chuàng)建矩陣。MATLAB可以進行矩陣的加減、乘除的元 素,求可逆矩陣、轉置矩陣,求矩陣的特征值,求線性方程組等等。MATLAB的功能是非常強大的,MATLAB不僅有強大的運算功 能,它還有強大的繪圖功能,我對它的了解也僅僅就是一點點,或許 說還沒有入門。比如說它含有豐富的內建函數(shù),例如數(shù)學函數(shù)中的三 角函數(shù)、復函數(shù)、多項式函數(shù)、數(shù)據(jù)分析函數(shù)的求平均值、最大最小 值、排序等,以及邏輯/選擇函數(shù)如if-else等,還有用來模擬隨機發(fā) 生事件的隨機函數(shù)。這些我都不了解。雖學習MATLAB的時間雖然很短,但卻讓我了解到了它的強大和 它的功能。我想就算時間足夠,老師也不能把所有的都講解給我們,因為一個軟件的功能需要我們自己不斷的去摸索,老師也不可能知道 所有。老師只是個指路的明燈,最終的學習還是要靠自己。而且在摸 索過程中,我們能夠發(fā)現(xiàn)和體會學習的快樂!

      第四篇:Matlab學習心得

      ? matlab博大精深,說到底我也只不過是個初學者,只是學的時間比新手長了一點,現(xiàn)在寫幾句給新手,希望能給你們有點幫助 1 學Matlab并不難,難的是學會怎么用。

      2不要試圖掌握matlab的每一個功能,熟悉和你專業(yè)最相關的部分就可以了。不要問:明天要交作業(yè)了,哪位大俠幫忙寫個程序吧,或初學matlab,不懂呀,大哥大姐幫忙寫個程序之類的話

      不要等到要用到才去學,如果你有興趣,你有時間,你可以多學些東西,說不定什么時候就用了,機會只偏愛那些有準備的頭腦,到時候就不會說什么,要做東西想讓人指點,基礎的東西來不及仔細看了,一寫程序嗎,低級錯誤滿天飛 不要說:不要讓我看matlab英文的幫助我看不懂--誰都是從不懂到懂的 不要擔心:我編程能力差,我一定用不好matlab。6 不要只問不學 7 學maltab要有耐心 看到某本書中或論壇的帖子中解決問題的方法要試著解決類似的問題,要舉一反三,要學會變通 有了問題先自己想,察看幫助,1個小時后沒有結果再問別人,不要一有問題就發(fā)問,然后什么都不管了,把希望寄托在別人身上 10 學會用搜索引擎,在網(wǎng)上可以找到很多資料,有的問題一搜索就能找到的,就不要來問別人了 11要多動腦,多動手寫程序、調試,看程序時候多想幾個為什么,理解別人程序中精華的東西,多自己調調程序,可以改改程序,把知識轉成自己的,弄懂一兩個經(jīng)典例子比粗粗的看一大書要好,值得一提是不是一下子就能看懂相對比較長,比較復雜的程序的,要做的是自己慢慢去分析,利用已經(jīng)有的資料和幫助,等慢慢搞懂它,要多看幾遍,相信多看一遍你就會有一些新的認識,一直到你已經(jīng)掌握里例子的精華。多讀matlab高手寫的程序,帖子,找到一個高手,在幾個大的論壇可以搜索出一大堆的帖子,然后慢慢去看吧,從中可以學到很多東西,也許你會發(fā)現(xiàn)很多你都看不懂,這很正常,別人寫程序考慮的是能實現(xiàn)這樣的功能,運行效率等問題,而不是考慮是不是很容易能讓別人理解,你就看你現(xiàn)在能看懂,再看些通過你斷點調試,查help能看明白的,看不懂的就先放下,遇到好的和看不懂,你又很挺感興趣的話題,你先收藏起來,過段時間你再回頭看看,你會發(fā)現(xiàn),每看一遍,你就會多懂一些東西,當你第三遍甚至第四遍看同一個程序的時候,也許你就會有豁然開朗的感覺。一個比較長的程序,首先不要怕長,把它分解成一句一句,一句一句看懂它。要明白一口吃不成胖子,好東西要慢慢體會,才能領會。電腦上復制粘貼很方便,對于別人解決的你專業(yè)上的問題,最好自己寫一遍,這樣印象深刻,對于不懂的函數(shù)用法的函數(shù),help中查查,能看懂多少算多少,對于程序斷點調試一遍,弄清楚每個語句的功能,14 盡量擺脫c編程的習慣,總愛用循環(huán),能不用的循環(huán)的盡量不用,掌握矢量化的精髓 善于總結,學習過的知識,看過好的帖子可以收藏起來,過段時間再復習一下,一段時間的積累,你會發(fā)現(xiàn)你的水平在慢慢提高 16 多用help,see also lookfor get,set 等常用命令 要大膽的去試,試過才知道可不可以,如有人問可不可以把多個子程序放在一個m文件中,呵呵,試試不就知道了 多參與討論,不要只關心自己的問題,也經(jīng)常關注別人的帖子,從中也可以學到不少東西的 提醒一句,不要做只會下資料而不看的收藏家,這樣對你沒什么意義,書不在于多,真的看一兩本書也就夠了,以后要用的時候,再去查書,一味的東看看西看看,見了別人的資料,不關好不好,就留信箱的人,我感覺也不該這樣,有了那么多資料,就別想著還有沒有比這更好的了,開始學吧先寫這么多吧,希望對新手能有點用 感覺語言是相通的,不一定只針對matlab這門語言

      如何寫程序,如果你還是初學者,那么盡量不要復制粘貼,那樣你是永遠也無法學會寫程序的。另外也不要對著別人的程序,一個字一個字敲進去,那樣的話你只能成為一名優(yōu)秀的打字員。一個比較好的方法是先讀懂他,理清他的思路,然后自己動手寫,寫不出來的時間再看看別人的程序,然后對照的看,你的和他的程序差異在哪里,寫的過程就是提高的過程。

      程序運行有錯誤怎么辦,好多錯誤。首先,別害怕錯誤,這是每一個人都會碰到的問題,大牛,小蝦都一樣,你對你自己說 這不機會又來了,調程序的過程就是提高的過程。不要一遇到錯誤就來論壇發(fā)問了,如何調,關鍵是看錯誤提示,看錯誤的類型及出現(xiàn)在哪條語句上。好好練自己的調試能力,這不僅可以幫你找到一些錯誤,有是碰到一些讀不懂的程序,借助斷點調試可以幫你讀懂程序

      還不行怎么辦,用搜索引擎找答案(有時候把錯誤提示輸進去就可以找到答案了)

      還不行,這才發(fā)貼和別人交流。。

      寫程序原則 盡量寫的簡單 通俗容易懂,讓那些不如你聰明的人都能看懂,命名的時候做到見名知意,寫的時間多加點注釋,不然,不要說別人讀不懂你的程序,等過幾天,你自己也讀不懂了,可以看看matlab里的函數(shù),注釋也寫的很詳細,當你覺得有些方法比較常用的時候,你可以封裝成函數(shù),加上一些說明,以后要用的時候,直接調用就可以了,注重代碼的重用性。

      勿在浮砂筑高臺,基礎很重要,為什么學matlab,如果你只是把它當成 c c++的附屬品,用這些語言的思維來寫一些奇怪的類matlab程序,我想你還是直接用c 或 c ++更合適,不要一開始就想著用matlab 做出什么東西,好好看一本matlab的基礎書,這些基礎對你以后的進階會很有幫助。再說混合編程,什么都不懂就想著去混合編程是不實際的,maltab版本 vs 的版本不同,都會對混合編程影響的。所以結果是對著別人的例子來做也不一定會做出來,一是別人講的有些細節(jié)問題沒講清楚,二是版本問題。就算做出來,如果不明白為什么要這樣做,又有多大意義呢。然后自己做一個,又不會了。說這些的目的無非是希望想做混合編程的朋友多了解一些基礎的東西,否則在混合編程這一塊上會浪費很多時間,結果還是沒有解決問題。

      7.0系列 深入淺出matalb混合編程這本書是值得一看的。多看幫助之類的話這里就不多說了。

      Recent developments in linear quadtree-based geographic information systems

      第五篇:matlab學習心得

      編程心得

      1.helpwin只是尋找函數(shù)類,一般不如用doc(相當于幫助文檔中的搜索),但在用doc搜索不到幫助文件時可用helpwin,如找有關的幫助等;打開格式非標準的mat或xls等數(shù)據(jù)文件如dat文件或無后綴名的文件時,不要用打開方式打開,而應先打開應用程序如MATLAB或excel,然后在應用程序中打開數(shù)據(jù)文件,這樣能得到正確的行數(shù)和列數(shù);lookfor可對M文件的第一行進行關鍵字搜索,比help條件寬松;MATLAB大小寫有區(qū)分。用which搜索路徑;要打開matlab自帶的m文件直接用open即可,不需要找到路徑,會在當前目錄和set path的路徑中搜索。矩陣的運算注意:標量與矩陣進行四則運算時該標量與矩陣的每個元素進行運算;兩矩陣相乘左矩陣列數(shù)須等于右矩陣行數(shù);矩陣除法有左除(反斜杠)和右除/(斜杠),AB=inv(A)*B,A/B=A*inv(B);方陣的乘方運算有四種:A^n,A^p,s^A,s.^A,其中A為方陣,n為整數(shù),p為非整數(shù),s為標量;A’表示矩陣A的轉置,一般選中了Hermitian(共軛)復選框則元素帶共軛;funm(A,’fun’)表示矩陣的函數(shù)運算,要求A是方陣,fun為矩陣運算函數(shù)名;給矩陣賦值時維數(shù)必須匹配,用方括號,一個分號為一行。

      3.數(shù)組的運算注意:數(shù)組乘法運算符為.*,表示兩數(shù)組中對應元素相乘;數(shù)組的除法運算符為.和./,表示對應元素相除;數(shù)組與數(shù)組運算時,參與運算的數(shù)組必須同維,結果為數(shù)組中每個元素進行運算所得;直接用結構名賦值即省略了(1);varargout返回輸出變量list即一系列變量名稱;feval(@fun,var1,?)用var1,?試算[evaluate]fun的值;讀二進制文件常用fopen()和fread()組合,matlab讀fortran寫出的二進制文件時往往要在fopen()中加'b';讀文本文件常用textread()和fopen();fscanf()組合,要注意格式,最好讀完后對照打開看看。

      4.標準差std(x,flag,dim)默認flag=0,dim=1計算公式為 的平方根,flag=1時分母為n;可通過h=figure(i),后用get(h)獲得圖形對象所有屬性的當前值,其格式為:屬性名=屬性值;結構數(shù)組可在域名后加(a,b)再加.變量名,調用時輸變量名可使用tab完成;利用struct函數(shù)一次輸入多個結構元素時注意用單元數(shù)組,用{}而非[]。

      5. 左除和右除的兩邊不一定是方陣,當A為m*n矩陣,B為列向量時,AB表示A*X=B在最小平方意義上的解,需對A進行QR分解,mn時解通過(A'*A)(A'*b)求得,而A/B =(B'A')';積分可以查一下積分命令quad 或者 trapz。6.注解塊操作符%{和%}必須單獨成行否則不起應有作用;struct([])表示結構數(shù)組,name1.name2表示name1為結構數(shù)組;函數(shù)名切記不要與MATLAB內置函數(shù)重名否則會出現(xiàn)錯誤因為系統(tǒng)先從當前目錄尋找匹配的函數(shù);MATLAB可以把程序制作的動畫生成avi格式的視頻,須把avifile(),getframe(),addframe(),close()配合起來使用。7.啟動notebook后word文檔的菜單欄中沒有出現(xiàn)Notebook菜單項,可以依次單擊工具-》自定義-》命令-》宏,選擇保存于mbook.dot上的宏TemplateProject.mwNewNotebook..MAIN(把他拖到菜單欄然后單擊,沒必要)就會出現(xiàn)Notebook菜單項;計算區(qū)(Calc Zone)不要弄,evaluate M-book一般也不要用;單元轉換為文本可以常用。

      8. 低級文件I/O函數(shù)很重要,因為它可讀寫二進制文件,便于與FORTRAN結合;讀寫之前先用fopen(filename,mode),注意都要加單引號,返回值如ans=0表示操作成功,-1表示不成功;一定要注意r和w因為w會刪除原文件所有內容;讀用fread(fid,count,precision,skip)其中precision如'uint8=>char'讀取文本文件,注意在fclose(fid)之前是連續(xù)讀的,不指定precision默認按字節(jié)讀取可能會出現(xiàn)很多元素為0;fwrite(fid,A,precision,skip)用二進制格式寫入文件,skip參數(shù)對于將數(shù)據(jù)插入到已知長度的記錄中非常有用;重設文件指針位置用fseek(fid,offset,origin)表示在fid指定的文件上按照origin給出的參照點,相對移動offset個字節(jié),注意如果指針不在開頭要重置到開頭origin應選'cof'當前位置而不選'bof'文件開始,重置完后可用ftell(fid)知道指針當前位置相對于bof的字節(jié)數(shù),還可用ferror(fid)查詢錯誤信息;還可用frewind(fid)函數(shù)將文件位置指針返回到文件起始位置;從文本文件讀字符串行用fgets(fid,nchar)表示讀一行文本并帶有行結束符,每次讀nchar個字符直到遇上結束符。9.如果運行的M文件有錯誤,而且在命令窗口又要運行M文件中定義錯誤的內置函數(shù)時可能會出現(xiàn)錯誤,這時應改工作目錄;有些內置函數(shù)可在命令窗口運行但在M文件中運行可能會出現(xiàn)錯誤,如sphere(n);腳本M文件與命令窗口公用變量工作區(qū),而函數(shù)M文件有單獨的變量工作區(qū),切實注意了;關系操作表達式返回的是邏輯型值即0和1。

      10.數(shù)組維數(shù)擴展時下標不要用1,因這是默認下標用1后結果是重新賦值;不同數(shù)組類型轉換如cell2struct等之前一定要先看數(shù)組尺寸size(array);變量名切記不要用函數(shù)名,否則調用函數(shù)時會出錯還不知錯在哪,因MATLAB優(yōu)先使用變量名而非函數(shù)名,比如定義了變量max再調用max()函數(shù)時就會報錯Subscript indices must either be real positive integers or logicals;中括號加引號用于多個文件名可以,用于多個變量名不行;簡單統(tǒng)計量比如最大值,最小值,平均值加減后再統(tǒng)計和統(tǒng)計后再加減結果一樣;函數(shù)不管用或者出錯應檢查是否不小心加了等號。

      11.設置坐標軸刻度和屬性時用set(gca,'xtick',數(shù)值數(shù)組);set(gca,'xticklabel',字符串數(shù)組);切記是label不要寫成lable;用box off可以去掉右邊和上邊的刻度和邊框;把右邊和上邊分別作為y和x軸可以加畫圖形,但最好不用plot而用line;有關坐標軸設置的例子可見我的程序plotNino.m;要實現(xiàn)坐標軸隔點標注數(shù)值且所有點間隔線均保留需設置兩次坐標軸,第一次顯示所有間隔線第二次用ax2=axes()后隔點標注;放大工具只對ax2有效;標注時字符矢量用{}且非數(shù)字字符必須加引號;注意annotation()中[x y w h]的x,y是對整個figure而言;標記單個數(shù)據(jù)點用scatter()即可。

      12.MatLab小波分析工具箱中一些學習心得:進行多分辨率分析時,wavedec()得到的小波系數(shù)是由最后一層的低頻系數(shù)和各層的高頻系數(shù)首尾相連而成,不是相加;用wrcoef()可重構各單支系數(shù)的對應信號且saN+sdN+sdN-1+?+sd1近似等于原始信號s;用waverec()一次重構的結果和單支重構的和稍有差別但差別很小如e-15;用wavedec()時注意有些小波函數(shù)不能用如Morlet小波基等,具體可看wfilters();小波分解再重構后與原始信號相差最小的小波函數(shù)為db1即Haar小波基;

      13.只有函數(shù)式M文件才能定義函數(shù),腳本文件和函數(shù)不能寫入同一個m文件中,即腳本文件中不允許出現(xiàn)function()語句但可以調用同目錄下函數(shù)文件中的函數(shù);函數(shù)文件要想保留一些中間變量的值就要在函數(shù)外部調用因為函數(shù)調用結束時會銷毀臨時變量空間,需另寫腳本文件,要不然就將需要導出的變量作為返回的參數(shù)或者用global申明全局變量;要使函數(shù)文件中的函數(shù)易被其他腳本文件調用,文件名最好為第一函數(shù)名;一張圖中畫多張子圖時注意subplot(‘Position’,[ ])和axes(‘OuterPosition’,[ ])在[]中值一樣時子圖的位置大小不一樣,axes的[]所給區(qū)域按比例縮小包含坐標軸標題等故值易確定但調用時要加(..,’Parent’,*),此外subplot()可有系統(tǒng)給定區(qū)域;

      MATLAB中內置的函數(shù)

      linspace(a,b,n)生成a~b之間線性分布的行向量,n默認值為100。

      logspace(a,b,n)生成10^a~10^b之間按對數(shù)等分的n個元素的行向量,n默認50。zeros(m,n)生成m*n的全0矩陣;

      ones(m,n)生成m*n的全1矩陣 rand(m,n)生成m*n均勻分布的單位間隔上隨機矩陣,取值范圍0.0~1.0 randn(m,n)生成m*n正態(tài)分布的隨機矩陣,取值范圍是整個實數(shù)區(qū)間

      eye(m,n)生成m*n的單位矩陣; magic(n)生成n階魔方矩陣,n>=3 triu(X)生成X矩陣的上三角矩陣; tril(X)生成X矩陣的下三角矩陣

      flipud(X)使矩陣沿水平軸上下翻轉; fliplr(X)使矩陣沿垂直軸左右翻轉;

      Flipdim(X,dim)使矩陣沿特定軸翻轉; rot90(X)使矩陣逆時針旋轉90度 cat(n,A1,A2,?,Am)n=1時子矩陣上下排列,n=2時子矩陣左右排列,n=3時子矩陣數(shù)m為第三維; repmat(A,行,列,頁,??)模塊矩陣A按后邊格式重復排列

      ndims(P)返回數(shù)組P的維數(shù); size(P)返回向量其元素為數(shù)組各維的大??; length(P)返回數(shù)組P行數(shù)或列數(shù)的最大值

      [L,U,P]=lu(X)矩陣X的三角分解,U為上三角,L為下三角,P為單位陣的行變換矩陣

      [U,S,V]=svd(X)矩陣的奇異值分解,S為對角陣,U,V為酉矩陣,X=U*S*V’ [V,D]=eig(A,B,flag)由flag制定算法計算矩陣A和B的特征值D和特征向量V,flag的可能值為chol或qz;

      [R,p]=chol(X)表示使用Cholesky分解算法,若X對稱正定則存在非奇異上三角陣R使R’*R=X,若X非正定則p為正整數(shù)R為有序上三角陣;[Q,R]=qr(A)

      求正交矩陣Q和上三角陣R使A=QR;

      T=schur(A,flag)返回正交矩陣U和schur矩陣T使A=U*T*U’;

      rsf2csf(VR,DR)將實舒爾形式轉化成復舒爾形式; gsvd(A,B)廣義奇異值分解; qz(A,B)特征值問題的QZ分解; hess(A)海森伯格形式分解;

      sparse(A)返回A的稀疏矩陣形式; full(S)將稀疏矩陣轉化為全元素矩陣; spy(S,’lineSpec’,markersize)用圖形顯示矩陣,點表示矩陣中非零元素位置。colmmd(S)返回稀疏矩陣列的最小度排序向量p,按p排列后的矩陣為S(:,p)。

      setfield(ps,{i,j,k},域名,賦值)修改結構數(shù)組ps中域的存儲內容,返回維數(shù)為i*j*k。lower(string)把字符串中的大寫變?yōu)樾憽?/p>

      strncmp(‘str1’,’str2’,n)比較兩字符串的前n個字符,str2可換為單元數(shù)組C,返回邏輯數(shù)組

      lookfor name 尋找第一行注解H1中含有name的M文件。

      findstr(str1,str2)先比較兩個字符串,然后在長的中找與短的匹配的子字符串,每找到一次返回匹配起始點的位置為數(shù)組元素。

      fscanf(fid,format,size)從fid指定的文件讀size個數(shù)據(jù)并根據(jù)format指定的格式轉換,其中format如%c,%f,%d等,size為[m,n]時表示m*n矩陣按列存放,缺省讀全部數(shù)據(jù); fprintf(fid,format,A)按format指定格式轉換矩陣A中數(shù)據(jù)并將它們寫到fid指定文件,缺省fid時,數(shù)據(jù)輸出在屏幕上。

      Repmat(A,m,n)A為子矩陣,復制m*n次; fix(A)返回數(shù)組中每個元素取整后的值; reshape(A,m,n)把數(shù)組A進行重新排列,按列方式操作;

      Prod(A)若A為向量則返回元素乘積,若A為矩陣則返回每列元素的乘積;

      Permute(A,[a b c d])A為4維陣列,返回陣列的第1,2,3,4維為A的第a,b,c,d維 strcat(s1, s2, s3,...)把字符串或者單元數(shù)組s1,s2,s3進行水平連接

      w=conv(u,v)返回向量u和v的卷積,若m = length(u),n = length(v)則,j = max(1,k+1-n): min(k,m),k=1:m+n-1 [V,D] = eig(A)返回A的特征向量矩陣V和特征值矩陣D [S.field] = deal(X)域名為field的所有域元素賦值為X

      [Y1, Y2, Y3,...] = deal(X{:})復制單元數(shù)組的內容給變量Y1,Y2,Y3,? Num2cell(a,[i j])a為數(shù)值陣列,返回單元陣列每個單元為a保持第i,j維尺寸不變的數(shù)組

      《MATLAB基礎與編程入門》

      Page 2: MATLAB核心模塊有兩大分支分別以MATLAB為基礎和以simulink為基礎。MATLAB 2006b即MATLAB 7.3。MATLAB compiler能將M文件編譯生成為函數(shù)庫或可執(zhí)行文件,使其能與其他語言如C/C++混合應用,MATLAB builder可將函數(shù)文件打包成com組件或.net組件、excel插件、java對象,將其應用程序算法集成到開發(fā)工具或應用軟件中。MATLAB的工具箱可提供函數(shù)給用戶直接使用,且其算法是開放和可擴展的。MATLAB提供了與各種設備進行數(shù)據(jù)I/O的交互工具和函數(shù)等。

      Page 4: 工具箱包括:數(shù)學與數(shù)據(jù)分析,如spline 仿樣,mapping 繪圖、映射,genetic algorithm and direct research 遺傳算法和正變形研究等;數(shù)據(jù)采集與測量測試,如database 數(shù)據(jù)庫,excel link鏈接Excel等;信號處理與圖象處理,如system identification系統(tǒng)辨識,wavelet 小波分析,filter design 濾波設計等;控制系統(tǒng)設計與分析,如 fuzzy logic 模糊邏輯,robust control 強控制等;財經(jīng)與金融,如 financial time series 金融時間序列,GARCH 廣義條件異方差等;應用程序集成與發(fā)布,如 MATLAB report generator 報告生成器,MATLAB web server 網(wǎng)絡服務器,MATLAB builder for.NET 編碼器等。Page 5: simulink是框圖設計環(huán)境,可對各種動態(tài)系統(tǒng)建模、分析和仿真,Stateflow可用來進行邏輯驅動過程的仿真。Simulink 可將用C、C++和fortran語言編寫的算法集成到框圖中,其實時代碼生成工具可進行代碼驗證。

      Page 9: Real-Time Workship(RTW)可生成標準的C/C++代碼并具備生成其他語言代碼能力

      《MATLAB編程基礎與典型應用》

      Page 8: MATLAB默認每行命令產(chǎn)生的變量結果都顯示,加上英文狀態(tài)下;才不顯示。可用連續(xù)3個或以上的黑點?表示續(xù)行,但notebook中不能用。%表示其后一行的內容為注釋。Page 10: 常用操作指令包括:clc, clear, clf, who, whos, delete , which , clear all, help , save , save , load , diary , type , what。Page 13: 歷史命令窗口點右鍵有很多實用功能。當前目錄瀏覽器(CurrentDirectory)窗口可更改當前目錄,打開M文件,導入MAT文件數(shù)據(jù)。工作空間瀏覽器窗口點右鍵可對變量進行編輯、繪圖、保存,也可用save,load,whos,exist等命令管理變量。Page 17: 可用help命令在命令窗口顯示幫助內容,也可用helpwin命令打開幫助瀏覽器窗口并顯示指定主題信息。還可用lookfor命令搜索包含字符的命令行,一旦發(fā)現(xiàn)就可用ctrl+C推出搜索過程。Demos目錄下的主題信息提供圖文并茂的演示。Page 19: 變量名第一個字符必須是英文字母且區(qū)分大小寫,不需要事先聲明。一些關鍵字不能作為變量名使用如if,while,return,for等。系統(tǒng)預定義的變量和常數(shù)有ans,pi,eps,inf,nan,i,j,nargin,realmin,realmax,nargout,可被臨時覆蓋。Page 26: 提取矩陣元素時,序號按列排列。Page 37: 矩陣的乘方運算有四種。

      Page 43: MATLAB中的關系運算符有<,<=,>,>=,==,~=;邏輯運算符有&,|,~,xor,&&(先決與),||(先決或),先決表示左邊的運算符合要求就不需執(zhí)行右邊運算。Page 54: 稀疏矩陣大部分元素為0,故只需儲存非零元素的下標和元素值。Page 72: 數(shù)值數(shù)組和字符串數(shù)組中存儲單元的數(shù)據(jù)類型相同,使用()操作;單元數(shù)組中每個單元存放的數(shù)據(jù)可能都不一樣,使用{}操作,獲取單元數(shù)組內容時圓括號只顯示單元,花括號才顯示內容。

      Page 77: 結構數(shù)組組織數(shù)據(jù)的能力比單元數(shù)組要強些,可通過struct(域名1,賦值,域名2,賦值??)函數(shù)創(chuàng)建;獲取結構數(shù)組域中的具體內容使用符號.,也可用專用函數(shù)getfield()獲??;修改結構數(shù)組中域存儲內容的函數(shù)是setfield()。

      Page 81: 多項式以行向量的形式存放且以降冪形式出現(xiàn),若缺少某冪次項則該項系數(shù)為0 Page 134: 句柄是圖形對象的標志代碼,標識代碼含有圖形對象的各種必要的屬性信息;圖形對象的所有屬性都是由屬性名和屬性值組成,對圖形對象屬性操作可實現(xiàn)不同表現(xiàn)效果,可通過句柄控制;用get(get(gca,'children'))命令可看到軸的子代的各種屬性值;可對圖形對象設置缺省對象屬性來實現(xiàn)繼承操作,還可用set(h,’.’,’.’)設置各種屬性?!毒∕ATLAB7編程與數(shù)據(jù)庫應用》

      Page 5: 為調試程序而進入debug方式時,提示符變?yōu)镵>>;運算符兩邊的空格隨意添加后無區(qū)別;在命令歷史中查找,可將光標定位于某行后敲要查找的語句的首字母;可將用得多的幾條語句選中后在右鍵菜單選”create shortcut”創(chuàng)立快捷鍵;命令窗口輸入pathtool或選File->Set path可設置搜索路徑。Page 19: 函數(shù)的輸入?yún)?shù)用圓括號括起來用逗號分隔,輸出參數(shù)在等式左邊用方括號;語句的續(xù)行可在結尾用省略號(?);一行中可寫多個語句,語句用逗號或分號隔開,若想寫完多行命令再運行可按shift + enter組合鍵;還可使用“Tab完成”,在命令和editor窗口寫入文件名、變量、結構和函數(shù)名時只寫入前面的幾個字符后按Tab鍵。Page 24: 變量名是否正確可用isvarname查看0表有誤;變量類型包括三種,常用的是局部變量,全局變量要用global聲明且每個使用函數(shù)都要聲明,永久變量(一直在內存中)要用persistent聲明。

      Page 171: 程序開發(fā)的建議:

      1. 化復雜為簡單:將每個任務做成一個獨立的函數(shù),函數(shù)盡量短;用數(shù)學語言寫出步驟和流程,再轉換成程序語言;選擇正確的數(shù)據(jù)結構(如哪種數(shù)組)。

      2. 遵循的原則:使用描述性的變量名和函數(shù)名,盡量不用縮寫;函數(shù)前面寫幫助的注解,說明函數(shù)功能;一行不要超出80列以便打??;函數(shù)只被另一個函數(shù)調用,把被調函數(shù)作為子函數(shù)與主函數(shù)放在同一個M文件上。

      3. 函數(shù)命名的唯一性:用which –all 函數(shù)名 檢驗。

      4. 分步寫程序,分步調試:對較大程序,一次寫成一部分,然后測試;能正常工作且輸出結果合理,再寫下一部分;修改也一樣,每次調試一部分。

      5. 程序最后測試:用debugger,可記錄下被執(zhí)行的每一行代碼;用不同的輸入組合測試,讓每一行至少執(zhí)行一次。Page 173: 在命令窗口的命令提示符下輸入M文件名可運行該M文件;MATLAB與其它語言的區(qū)別之一是過程控制語句可能用到數(shù)組或矩陣;對if條件判斷,若邏輯表達式非標量,那么它的所有元素值都非0,if條件才能滿足,也可以是空數(shù)組,表示條件為假。Page 175: 分支語句switch后的表達式可以是函數(shù)或數(shù)值或字符串;循環(huán)有兩種:次數(shù)確定的和依條件結束的;for循環(huán)中可用數(shù)組控制循環(huán)次數(shù),MATLAB把列數(shù)作為循環(huán)次數(shù);for語句可寫在一行,分隔符用逗號;continue回到循環(huán)頭,break退出循環(huán),嵌套循環(huán)中都作用最內層循環(huán);錯誤控制語句try?catch?end執(zhí)行時,try?catch范圍內出現(xiàn)錯誤可轉到代碼段catch?end做出響應,若此段還有錯誤則結束程序執(zhí)行;return語句可強制結束當前運行的程序。Page 179: 腳本(scripts)與函數(shù)的區(qū)別:腳本簡單執(zhí)行一系列語句和需多次運行的文件,不能接受輸入?yún)?shù)也不返回輸出結果,變量保存在基本工作區(qū);函數(shù)有定義語句function,有輸入輸出,變量有單獨工作區(qū);輸出用[],輸入用()。

      Page 181: 默認下M文件名與第一個函數(shù)名相同,若不同需用文件名引用函數(shù);用exist函數(shù)識別是否為M文件函數(shù),非0則是;用which函數(shù)找到M文件函數(shù)的源碼;

      《MATLAB程序設計與應用》

      Page 242: 在M-book 中,在word與MATLAB之間進行傳遞的內容稱為單元(Cell),輸入輸出是指對MATLAB而言;m-book最重要的操作就是輸入單元的定義與執(zhí)行,其方法是:先在文檔中輸入命令后選中命令行,再按組合鍵Alt + D(=Define Input Cell),則命令行變成綠色的輸入單元,然后按組合鍵Ctrl + Enter(=Evaluate Cell),執(zhí)行后產(chǎn)生藍色的輸出單元;也可選中命令行后直接按組合鍵Ctrl + Enter輸入并執(zhí)行;注意:命令和標點須在英文狀態(tài)下輸入,MATLAB的續(xù)行符不能用于m-book,它會自動換行無需加回車符,修改后執(zhí)行新結果會覆蓋掉老結果。

      Page 247: 可用evaluate loop實現(xiàn)單元的循環(huán)執(zhí)行,用purge output cells刪去選中的輸出單元,用undefine cells把單元轉換為文本;輸出格式控制包括輸出數(shù)據(jù)控制和圖形控制,可通過notebook->notebook options->embed figures in m-book是否選中控制輸出圖形是否鑲嵌在m-book文檔中;若輸出圖形背景色不是白色可在MATLAB命令窗口運行whitebg('white')再重新運行輸入單元;可通過“樣式和格式”修改Output等的樣式。Page 251: Simulink主要對動態(tài)系統(tǒng)進行建模、仿真和分析,提供圖形用戶界面GUI,用戶可用鼠標從模塊庫中調用標準模塊并適當連接以建模同時用參數(shù)對話框設置參數(shù),建模后選擇仿真參數(shù)和數(shù)值算法便可啟動仿真程序對系統(tǒng)仿真;simulink仿真模型表現(xiàn)為方框圖,其擴展名為.mdl,數(shù)學上體現(xiàn)了一組微分方程或差分方程,通常包含3類模塊:信源(source)、系統(tǒng)(system)、信宿(sink儀器);可用format菜單調整模塊方向,改變模塊前景色、背景填充色或者模型背景色,產(chǎn)生陰影效果等,處理模塊名,給連線加標志;模型連接須從一個模塊的輸出端連到另一個模塊的輸入端,默認是折線要用斜線需選中連線再按住shift鍵拖動;連線分支操作是鼠標移到分支點位置先按下ctrl鍵再拖動到目標模塊的輸入端;選定模塊后再用模型編輯窗口edit菜單可設置模塊參數(shù),模塊屬性等。

      Page 265: 系統(tǒng)仿真過程中,事先須對仿真算法、輸出模式等仿真參數(shù)進行設置,方法是:從模型編輯窗口simulation菜單中選擇configuration parameters命令打開仿真參數(shù)對話框設置仿真參數(shù);設置仿真參數(shù)完后,從simulation菜單中選擇start項便可啟動當前模型的仿真,此時stop命令變成可選以供中途停止;為觀察仿真結果變化軌跡可以:把輸出結果送給scope模塊或者XY graph模塊,把仿真結果送到輸出端口并作為返回變量后用MATLAB命令繪制該變量變化曲線,把輸出結果送到to workspace模塊從而直接存入工作空間后用繪圖命令繪制出變量變化曲線;系統(tǒng)仿真步驟如下:建立系統(tǒng)仿真模型包括添加模塊、設置模塊參數(shù)以及進行模塊連接等操作,設置仿真參數(shù),啟動仿真并分析仿真結果。

      Page 134: 要在MATLAB中使用其他軟件的圖象需用[x,c]=imread(filename,fmt)讀取該圖象,其圖像通常由數(shù)據(jù)矩陣x和色彩矩陣c組成,真彩色圖像的數(shù)據(jù)矩陣為三維,三個面上數(shù)據(jù)分別是RGB三種顏色的強度值,每個元素對應圖像中一個像素點;可用colormap(c)函數(shù)設置色圖;影片動畫制作有三個函數(shù):moviein(n)建立一個足夠大的n列矩陣,a(:,n)=getframe將n幅畫面信息保存矩陣a中,movie(a,m)播放由矩陣a定義的畫面m次;實時動畫制作是先畫出初始圖形,再計算活動對象新位置并顯示新對象擦除舊對象,可通過EraseMode屬性實現(xiàn)一般選Xor,只繪制與屏幕顏色不一致的原對象點;可通過改變數(shù)據(jù)屬性來重新繪圖,沒改變一次就應用drawnow命令刷新屏幕一次。

      Page 311: mat文件是MATLAB數(shù)據(jù)存儲的默認文件格式,以雙精度二進制格式保存數(shù)據(jù),它由128字節(jié)的文件頭和其后的數(shù)據(jù)單元組成;MATLAB提供了一個子程序庫使用戶可以在C/C++,FORTRAN中直接調用這些子程序來創(chuàng)建和讀取mat文件;操作mat文件的API函數(shù)封裝于兩個標準庫文件:libmat.lib和libmx.lib,存放在binwin32相應子文件夾中,在externinclude中有與前面兩個庫文件對應的.def文件:libmat.def,libmx.def,其導出函數(shù)原型位于同目錄下的mat.h,matrix.h中,前者包含mat文件的創(chuàng)建讀寫等函數(shù)的定義,后者包含MATLAB中基本數(shù)據(jù)類型和矩陣的定義;在FORTRAN語言中mat文件操作函數(shù)有:matOpen(filename,mode), matClose(mfp), matDeleteVariable(mfp,name), matGetDir(mfp,name), matPutVariable(mfp,name,pm), matGutVariable(mfp,name,pm), matPutVariableAsGlobal(mfp,name,pm),其中mfp為指向mat文件的指針,name是讀寫mat文件的矩陣名稱,num為矩陣數(shù)目,pm是mxArray結構體指針,mode為打開文件方式。Page 315: MATLAB編譯器(MCC)可將m語言編寫的函數(shù)文件(腳本文件不行)轉換成C/C++源代碼,經(jīng)編譯鏈接后可生成函數(shù)庫、可執(zhí)行程序、COM組件等,從而提高程序執(zhí)行效率豐富程序開發(fā)手段并隱藏算法源代碼;使用MCC需安裝MATLAB和一種C/C++編譯器,如VC++6.0,要生成獨立應用程序需安裝相應數(shù)學庫和圖形庫;編譯器配置即執(zhí)行命令:mbuild –setup 后按提示選取一種編譯器(通常安裝VC++6.0后選擇它)生成批處理文件并注冊相關dll文件,mbuild通過調用外部的C/C++編譯器把M文件翻譯成C/C++源代碼然后與MATLAB的C/C++數(shù)學庫、圖形庫鏈接得到獨立可執(zhí)行程序;執(zhí)行命令為:mcc –m –I /files_source(源文件路徑)–d /files_target(目標文件路徑)*.m ;離開MATLAB執(zhí)行exe文件時要把生成的所有文件包括相應庫文件全部帶上。

      Page 319: MATLAB提供了客戶/服務器(Client/Server,C/S)功能,利用動態(tài)數(shù)據(jù)交換(DynamicDataExchange,DDE)功能和ActiveX自動化服務功能,可以實現(xiàn)在其他程序中對MATLAB程序及函數(shù)的調用,且通過mxArray與工作空間交換數(shù)據(jù),從而增強其他語言的數(shù)值計算能力和數(shù)據(jù)可視化能力;MATLAB引擎是一組函數(shù)庫,他提供了一種在用戶程序進程中與MATLAB進程通信的方法,在WINDOWS下使用ActiveX技術實現(xiàn),使用組件對象模型(ComponentObjectModel,COM)接口;C語言MATLAB計算引擎包括引擎函數(shù)和mx-函數(shù)兩類,常用引擎函數(shù)有engOpen, engClose, engGetVariable, engPutVariable, engEvalString等,mx-函數(shù)的具體用法參見幫助文件中section為External Interfaces Reference部分;引擎編程首先要將mxArray轉換成MATLAB中可操作的形式,將源程序編寫存盤后再用mex命令對源程序文件進行編譯,注意源文件中不能有中文(即使是注釋);mex用來編譯簡單文件合適,但工程復雜時需在VC++6.0的集成環(huán)境中編譯鏈接。

      Page 324: 常用FORTRAN引擎函數(shù)有engOpen(startcmd), engClose(ep), engGetVariable(ep,name), engPutVariable(ep,name,pm), engEvalString(ep,command)等,其中startcmd 為引擎參數(shù)(字符型),ep為引擎指針(整型),name為矩陣名,pm為mxArray矩陣指針,command為MATLAB命令;在MATLAB命令窗口使用的編譯命令是optsfile=[matlabroot 'binwin32mexoptsdf60engmatopts.bat'];mex('-f',optsfile,'*.f90');但有時候沒有df60engmatopts.bat文件,這時候需在VisualFortran的集成環(huán)境中編譯鏈接;可先用VF打開該f90文件然后選Tools->Options->Directories,在Include files中添加matlabrootexterninclude,在Library files中添加externlibwin32microsoft,然后選Project->Settings->Link,在Object modules中添加libmx.lib libmat.lib libeng.lib,再用默認的編譯鏈接可生成可執(zhí)行文件*.exe。

      Page 325: MEX(MATLAB executable)動態(tài)鏈接函數(shù)接口使MATLAB可直接調用C,FORTRAN語言編寫的算法程序,應用如下:對已有的C,FORTRAN子程序通過添加入口程序mexFunction可由MATLAB調用而不必重編M文件,可把要求大量循環(huán)迭代的部分用C語言編寫為MEX文件提高計算速度,直接控制硬件如數(shù)據(jù)采集卡等;MEX文件優(yōu)于M文件執(zhí)行,用C語言編寫MEX文件的特點是編程靈活指針功能強,但應注意C和MATLAB中數(shù)據(jù)存儲方式的差別,其源程序包括兩部分:入口子程序(作用是建立通信聯(lián)系),計算子程序(可是普通的C程序),注意都要包括頭文件mex.h;可在命令窗口輸入mex filename.c編譯MEX程序,但在VC環(huán)境下更好,項目類型為Win32 Dynamic-link library,(設置環(huán)境和參數(shù)都較麻煩)編譯鏈接無誤后產(chǎn)生*.dll,運行時會自動打開新的MATLAB應用程序。

      Page 330: FORTRAN語言數(shù)值計算功能強但指針功能弱,其MEX文件同樣由入口子程序和計算子程序組成,它只支持雙精度類型和字符串類型的數(shù)據(jù);mexFunction()中參數(shù)的意義和C語言一樣,入口子程序也和C語言大體相同,編譯時先輸入命令mex –setup選擇DigitalVisualFortran6.0作為默認編譯器,有些MATLAB軟件里沒有(如我的只能用VC++);集成環(huán)境中編譯步驟如下:新建一個項目類型為FortranDynamicLinkLibrary,選Project->Add to project->new->Text file創(chuàng)建與項目同名的定義文件(*.def),選Tools->options->directories-> include files添加externinclude,library files添加libwin32digitaldf60,選project->settings-> output file name輸入*.dll,Object modeles增加libmx.lib,libmex.lib,將文件加入到項目中再進行編譯鏈接,可生成*.dll;將MATLAB數(shù)據(jù)接口和其他開發(fā)環(huán)境結合可充分發(fā)揮數(shù)值計算長處避開執(zhí)行效率低的不足,MATLAB還提供了與excel中數(shù)據(jù)交互的工具箱、VB算法庫及MATLABwebServer可通過HTTP協(xié)議在安裝了web服務器主機上提供MATLAB計算遠程服務,硬件操作方面MATLAB提供了串行通信對象操縱串行口并可通過mex程序調用設備驅動程序?!禡ATLAB7.x程序設計語言》

      Page 266: 建立多維數(shù)組有四種方法:利用下標建立,如2×2的矩陣也可看作是2×2×1的數(shù)組可擴展維數(shù),標量輸入表示擴展維元素均相同;利用特殊數(shù)組函數(shù)(如rand, randn, ones等)可直接產(chǎn)生多維數(shù)組,也可用repmat(A,m,n)直接產(chǎn)生;利用cat(n,A,B)連接A,B矩陣,n為指定維數(shù),連接時是最后一維變化;編寫M文件將記錄組合成多維數(shù)組;ndims獲得維數(shù),size得到各維尺寸,whos得到數(shù)組存儲格式。

      Page 269: 多維陣列(即數(shù)組)的下標訪問即采用各維的下標訪問其元素,可用向量來表示多個元素,: 表示其他維固定該維變化的所有元素還可用a:b取出部分元素;陣列重新排列可用reshape函數(shù)按列重排,用squeeze函數(shù)刪除單點維(尺寸size為1的維);序列變換可用permute函數(shù)改變指定維次序。

      Page 272: 面向向量的函數(shù)(如sum,mean,prod等)通常在第一個非單點維上操作且允許指定的維,也有例外如cross函數(shù);元素對元素的操作函數(shù)(如三角、指數(shù)函數(shù)等)對每個元素進行同樣操作,算術、邏輯、關系操作符也按元素對元素方式處理,有一個為標量則對陣列所有元素與該標量進行同樣操作;面向矩陣的函數(shù)(如線性代數(shù)函數(shù))不能用于多維陣列,需從中取出維數(shù)為2的一部分進行操作;RGB(m,n,3)的三色原理Color=0.3*RGB(:,:,1)+0.59*RGB(:,:,2)+0.11*RGB(:,:,3)。Page 273: 結構陣列由多個域構成,不同域可存放不同類型的數(shù)據(jù),可用結構名(下標).域名對結構陣列賦值;用結構名顯示結構信息,只有一個結構元素顯示各元素值,可用rmfield函數(shù)刪除錯誤域名;用struct函數(shù)可產(chǎn)生一個結構元素的結構數(shù)組,再利用單元數(shù)組{}可輸入多個結構元素;訪問結構數(shù)組中的元素可用下標,利用getfield(結構名,{下標},’域名’,{a:b,c:d})可得到域的部分值(域元素),利用setfield函數(shù)可改變結構的域值。Page 277: MATLAB函數(shù)和操作符可用于結構數(shù)組中的域和域元素,可用循環(huán)來完成指定功能,還可對同名域的數(shù)據(jù)用函數(shù)直接處理;結構陣列的數(shù)據(jù)組織方式有平面組織和元素對元素組織等,如對三個獨立存儲矩陣,平面組織方式下每個域是一個平面的數(shù)據(jù)(矩陣),這樣容易提取平面數(shù)據(jù)并擴展平面?zhèn)€數(shù),訪問子集時稍麻煩,元素對元素組織結構的建立需用循環(huán),訪問子集較容易但訪問平面還要用循環(huán);結構陣列的域值可以是另一個已定義過的結構,即結構嵌套,如用struct建立一個結構元素再用賦值語句*.原域名.域名擴展。

      Page 282: 單元陣列中每個單元可以是標量、向量、矩陣、字符陣列、結構陣列、多維陣列等,在建立單元陣列之前應確保不存在同名數(shù)值陣列否則會導致錯誤;對單元陣列賦值時應使用花括號,放左邊較方便,可用cell(m,n,?)預分配空單元陣列;顯示單元數(shù)組可直接輸入數(shù)組名顯示單元信息,也可采用celldisp函數(shù)顯示詳細信息和cellplot函數(shù)顯示存儲結構圖形;使用單元陣列數(shù)據(jù)也用下標訪問但注意括號,訪問一個單元用花括號,訪問單元中的元素和部分單元用圓括號;刪除元素也用賦空值,如A(:,2)=[]后A可能成了一維單元陣列。

      Page 285: 花括號內采用冒號操作符相當于指示多個獨立的單元內容如A{m:n},形如[a{1};a{2}]可構造數(shù)值陣列;可用單元數(shù)組代替函數(shù)輸入、輸出、顯示操作等的變量列表,如[a{1:2}]=eig(B)此時a{1}為特征向量(模態(tài))矩陣a{2}為特征值(規(guī)范)矩陣;利用下標可將函數(shù)和操作符應用于單元陣列,用循環(huán)可對所有單元進行處理;單元陣列比結構陣列更具包容性,它可在一條賦值語句中訪問多個數(shù)據(jù)域,如使用[a,b]=c{1:2}相當于a=s.f1;b=s.f2其中c為單元陣列,s為等價結構陣列;利用花括號、cell函數(shù)及賦值語句可建立嵌套的單元陣列,不用cell函數(shù)預分配完全可以但賦值系統(tǒng)會花更多時間;單元陣列與數(shù)值陣列之間的轉換應采用循環(huán)程序,num2cell可實現(xiàn)數(shù)值到單元。

      Page 290: 多維單元數(shù)組可利用cat函數(shù)連接產(chǎn)生,如A,B為2×2的單元數(shù)組則可用cat(3,A,B)生成2×2×2的多維單元數(shù)組;多維結構數(shù)組可利用直接賦值或cat函數(shù)產(chǎn)生,定義后可用結構的域名來訪問還可對其數(shù)據(jù)應用函數(shù)和操作符;利用單元數(shù)組還可將具有不同域結構的結構數(shù)組存儲在一起,每個單元為一個結構數(shù)組;多維數(shù)值陣列適用于規(guī)則數(shù)據(jù),結構陣列適用于不一致的數(shù)據(jù),單元陣列可用于任意數(shù)據(jù)混合;一般結構名首字母大寫,單元數(shù)組名大寫,其余名稱小寫,較復雜的數(shù)據(jù)庫用單元中有結構,結構中有數(shù)值和字符的形式。

      Page 314: MATLAB中字符以其ASCII碼表示,每個字符都采用16位的ASCII碼存儲,字符串即一維字符數(shù)組;double函數(shù)可把字符串中每個字符轉變成ASCII碼,char函數(shù)可把ASCII碼數(shù)組轉變成對應字符串;建立二維字符數(shù)組時應注意確保每行上的字符數(shù)相等,方法是先disp每行字符串的長度length()后用blanks函數(shù)在較短的字符串末尾補上空格;從字符數(shù)組中提取字符串時,可用deblank函數(shù)刪除末尾多余的空格;利用cellstr函數(shù)可將字符數(shù)組變換成字符串單元數(shù)組,每個單元均為字符串且已刪除末尾空格,利用char函數(shù)可進行其逆操作,且可自動在每行末尾加上適當空格。

      Page 317: 比較兩字符串是否完全相同用strcmp函數(shù),strcmpi函數(shù)比較時忽略大小寫,strncmp函數(shù)比較兩字符串前n個字符是否相同,相同時,返回邏輯真,值為1不同為0;可用MATLAB關系操作符逐字比較兩個字符串是否相同或大小關系,采用的是ASCII碼,表達式為真值為1;可用isletter函數(shù)逐字比較字符串是否全由字母構成,是則為1,isspace函數(shù)逐字比較字符串是否有空格,還可用或操作符檢測字符串是否全由字母和空格構成。Page 319: 利用findstr和strrep函數(shù)可實現(xiàn)字符串中部分字符的搜索與替代;用strtok函數(shù)可找出第一個分隔符之前的字符串,若有n個單詞可用循環(huán)和array=strvcat(string,n)從英文句子中提取單詞;MATLAB提供了一組函數(shù)如int2str,num2str,bin2dec,hex2dec,base2dec等在各種數(shù)制和字符串之間進行變換;只有用num2str函數(shù)才可將含小數(shù)的數(shù)值變換成字符串如在圖形標記中使用數(shù)值,用mat2str函數(shù)可將矩陣變換成字符串形式。

      下載Matlab學習心得系列——005. 結構數(shù)組[大全五篇]word格式文檔
      下載Matlab學習心得系列——005. 結構數(shù)組[大全五篇].doc
      將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
      點此處下載文檔

      文檔為doc格式


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

      相關范文推薦

        MATLAB學習心得

        MATLAB學習心得 MATLAB命令 要查詢某一命令是在搜尋路徑的何處,可用which命令: >>which fact E:studycodematlabfact.m what 列出當前目錄下的.m文件和.mat who:顯示當前......

        MATLAB學習心得

        MATLAB學習報告 一. 對MATLAB的認識 正如課本《MATLAB教程及實訓》中的前言所說,MATLAB是MathWords公司于1984年開發(fā)的,目前已經(jīng)發(fā)展成國際上最流行、應用最廣泛的科學與工程......

        matlab學習心得

        學習MATLAB的心得體會 隨著期末的臨近,本學期的MATLAB的學習也就此落下了帷幕?;仡櫸抑皩W習MATLAB的歷程,我有以下幾點感悟: 1. 要有耐心。在編程序的時候少不了的要出現(xiàn)許......

        MATLAB學習心得

        學習Matlab對我的幫助及感想 專業(yè):通信工程 班級:141 姓名:張焱 學號:2014136123 不知是對老師的好感還是因為專業(yè)的需要,當c語言的學習結束后我主動選擇了學習Matlab。以前的......

        MATLAB學習心得體

        MATLAB學習心得體 真正接觸matlab已經(jīng)一學期左右,我很喜歡matlab的簡單的語法,易于繪制圖形一開始就感覺跟變魔術一樣簡單的語句就會有精美的圖形這就更加讓我對他如癡如......

        matlab學習心得5則范文

        matlab學習心得 王信權 39172215 學習matlab是聽說它是一個功能強大的數(shù)學軟件,但是正被微積分的計算纏身,聽說有一個高級的計算器當然高興,以后可以偷懶了,當然現(xiàn)在不能偷懶。......

        matlab學習心得[五篇范文]

        1 回車:表示一個命令結束 2 一個命令行可以輸入若干條命令,各命令之間以逗號分隔。若一條命令后帶有分號,逗號可以省略。 3 若一條命令很長,可在一條物理行之后加上3個小黑點并......

        對matlab的學習心得

        Matlab的學習心得 通過初步對matlab的學習,我覺得收獲很大。我了解到matlab是一個功能很大的數(shù)學實驗軟件,即一個很好的計算機數(shù)學軟件平臺。我在學習matlab主要是圍繞實驗,初......