matlab 基本語句

鴨脖發表於2013-01-27

matlab 基本語句

1.迴圈語句for
for  i=s1:s3:s2
    迴圈語句組
end
解釋:首先給i賦值s1;然後,判斷i是否介於s1與s2之間;如果是,則執行迴圈語句組,i=i+s3(否則,退出迴圈.);執行完畢後,繼續下一次迴圈。

例:求1到100的和,可以程式設計如下:
   sum=0
   for i=1:1:100
     sum=sum+i
   end
   這個程式也可以用while語句程式設計。
   
   注:for迴圈可以通過break語句結束整個for迴圈.

2.迴圈語句while
  例:sum=0;i=1;
      while(i<=100)
       sum=sum+i;i=i+1;
      end
      
3.if語句
  if(條件)
    語句
  end
  
  if(條件)
    語句
  else
    語句
  end


  if(條件)
    語句
  elseif
    語句
  end
  
  
4.關係表示式:
 =,>,<,>=,<=,==(精確等於)
5.邏輯表示式:|(或),&(且)

6.[n,m]=size(A)(A為矩陣)
這樣可以得到矩陣A的行和列數
n=length(A),可以得到向量A的分量個數;如果是矩陣,則得到矩陣A的行與列數這兩個數字中的最大值。

7.!後面接Dos命令可以呼叫執行一個dos程式。
8.常見函式:
poly():為求矩陣的特徵多項式的函式,得到的為特徵多項式的各個係數。如a=[1,0,0;0,2,0;0,0,3],則poly(a)=1    -6    11    -6。相當於poly(a)=1入^3+(-6)入^2+11入+(-6)。
compan():可以求矩陣的伴隨矩陣.
sin()等三角函式。

MATLAB在數學建模中的應用(3)
 
  一、程式設計概述
  MATLAB所提供的程式設計語言是一種被稱為第四代程式語言的高階程式設計語言,其程式簡潔,可讀性很強,容易除錯。同時,MATLAB的程式設計效率比C/C++語言要高得多。
  MATLAB程式設計環境有很多。常用的有:
  1. 命令視窗
  2. word視窗
  3. M-檔案編輯器,這是最好的程式設計環境。
  M-檔案的副檔名為“.m”。M-檔案的格式分為兩種:
  ①l M-指令碼檔案,也可稱為“命令檔案”。
  ② M-函式檔案。這是matlab程式設計的主流。l
    儲存後的檔案可以隨時呼叫。
    二、MATLAB程式結構
  按照現代程式設計的觀點,任何演算法功能都可以通過三種基本程式結構來實現,這三種結構是:順序結構、選擇結構和迴圈結構。其中順序結構是最基本的結構,它依照語句的自然順序逐條地執行程式的各條語句。如果要根據輸入資料的實際情況進行邏輯判斷,對不同的結果進行不同的處理,可以使用選擇結構。如果需要反覆執行某些程式段落,可以使用迴圈結構。
  1  順序結構
順序結構是由兩個程式模組串接構成。一個程式模組是完成一項獨立功能的邏輯單元,它可以是一段程式、一個函式,或者是一條語句。

 
  看圖可知,在順序結構中,這兩個程式模組是順序執行的,即先執行<程式模組1>,然後執行<程式模組2>。
實現順序結構的方法非常簡單,只需將程式語句順序排列即可。
2  選擇結構


  在MATLAB中,選擇結構可由兩種語句來實現。
  (1)  if語句
  if語句的最簡單用法為:
    if  表示式; 
     程式模組; 
    end


  if語句的另一種用法為:
    if  表示式 
     程式模組1 
    else 
     程式模組2
    end


  例1  使用if語句判斷學生的成績是否及格。
  程式:
   clear   
   n=input(’輸入n= ’)   
   m=60; 
   if  n<m,
r=’不及格’ 
         else 
         r=’及格’ 
   end


    練習一:將例1寫入M-檔案編輯器,然後在command window 呼叫這個程式。

    當針對多個條件進行選擇時,可以採用下面的格式:
    if  表示式1 
         程式模組1
          elseif  表示式2 
                 程式模組2
            ……   ……
              elseif  表示式n
                     程式模組n 
        else  
           程式模組n+1
        end
  例2  將百分之的學生成績轉換為五分制輸出。
  程式:
 clear 
 n=input(’輸入n= ’) 
 if  n>=90 
 chji=’優秀’ 
 elseif  n>=80 
 chji=’良好’ 
 elseif  n>=70 
 chji=’中等’ 
 elseif  n>=60 
 chji=’及格’ 
 else 
 chji=’不及格’ 
 end

  練習二:將例2寫入M-檔案編輯器,然後在command window 呼叫這個程式。

  (2)  switch語句
  switch語句可以替代多分支的if語句,而且switch語句簡潔明瞭,可讀性更好。其格式為:
   switch  表示式    
   case  數值1      
          程式模組1 
   case  數值2 
          程式模組2 
   …… 
   otherwise 
   程式模組n 
   end

其中的otherwise模組可以省略。
  switch語句的執行過程是:首先計算表示式的值,然後將其結果與每一個case後面的數值依次進行比較,如果相等,則執行該case的程式模組;如果都不相等,則執行otherwise模組中的語句。如圖3所示。

 
  例3  用switch…case開關結構將百分制的學生成績轉換為五分制的成績輸出。
  程式:
 clear 
 x=58   
 switch  fix(x/10) 
    case  {10,9}
        y=’
優秀’ 
    case  8
        y=’
良好’ 
    case  7
        y=’
中等’ 
    case  6
        y=’
及格’ 
    otherwise
        y=’
不及格’ 
 end   

  練習三:將例3寫入M-檔案編輯器,然後在command window 呼叫這個程式。

  3  迴圈結構
  迴圈結構的流程圖如圖4所示它可以多次重複執行某一組語句。迴圈是計算機解決問題的主要手段。

 
  在MATLAB中,迴圈結構可以由兩種語句結構實現。
  (1) for…end 迴圈結構。其格式為:
                        for i=V,迴圈體結構,end
    其中V為一個行向量,迴圈變數i每次從V中取一個數值,執行一次迴圈體的內容,如此下去,直到完成V中的所有分量,就自動結束迴圈體的執行。
  例4    計算  s=12+22+52
  程式: 
  a=[1 2 5 ]; s=0;  
  for k=a,  
    s=s+k^2;  
  end,  
   s,
  

  該例題只是為了說明for語句的格式,事實上,用下面的語句求和更為簡單。
  命令:
    p=sum(a.^2)  

  練習四:建立MATLAB與word的連線,在新建的m-book中寫入上面的程式,並用notebook選單執行之。

  迴圈結構裡面還可以包含迴圈結構,形成多重迴圈。
  例5    設計一個九九乘法表。
  程式:
   clear 
   for  i=1:9 
    for  j=1:9 
     a(i , j)=i*j; 
    end 
    end 
       a
  
    練習五:①直接在命令窗編寫上面的程式。
      ②試執行下面的程式,並加以分析:
  程式: disp(’     九九乘法表 ’),for i=1:9,
      for j=1:i,p{i}(j)=j*i;end,disp(p{i}),end  

  (2) while…end 迴圈結構。其格式為:
        while  (表示式)
          迴圈結構體
        end
  例6  求MATLAB的相對精度
  解:解題的思路是,讓y值不斷減小,直到MATLAB分不出1+y與1的差別為止。
  程式:
    y=1; while  1+y>1;  y1=y;  y=y/2; end,y1

  說明:
  ①for迴圈與while迴圈的區別是,for語句的迴圈次數是確定的,而while語句的迴圈次數是不確定的。
  ②一定要注意在迴圈結構體內設定“修改條件表示式的語句”,以免進入“死迴圈”。
  ③一旦出現死迴圈,在命令窗用ctrl+c可使程式中止。
  ④注意程式的可讀性。
  練習六:在M-檔案編輯器內編寫上面的指令碼檔案,並利用選單或快捷按鈕執行之。

  三、M-檔案
  M檔案是包含MATLAB程式碼的檔案。M檔案按其內容和功能可分為指令碼M檔案和函式M檔案這兩大類。
  1、指令碼M檔案
  指令碼M檔案是許多MATLAB程式碼按順序組成的命令集合,不接受引數的輸入和輸出,與MATLAB工作區共享變數空間。指令碼檔案一般用來實現一個相對獨立的功能,比如對某個資料集進行某種分析、繪圖,求解方程等等。
前面的幾個例題都是指令碼檔案的型別。
  2、函式M檔案
  MATLAB的M-函式是由function語句引導的,其基本格式如下:
       function [輸出形參列表] = 函式名 (輸入形參列表)
       註釋說明語句段,由%引導;
       函式體語句
  函式檔案需要在M-檔案編輯器中編寫。寫完以後,按照當前的搜尋路徑儲存。以後就可以隨時呼叫這個函式了。
  與指令碼M檔案不同的是,呼叫函式M檔案時需要輸入自變數的實際值。
隨便開啟一個M-檔案看一看:
        open lsqlin

  程式設計例項
  例7. 定義一個函式  f(x)=[sin(x)]2, 其中x以“度”為單位。然後再呼叫該函式。
  解:在M-檔案編輯器內寫入下面的檔案:
    function y=sinsd(x)
    %自變數x以“度”為單位。
    %
    %白城師院

    %數學建模協會,2007-5-12
    a=x/180*pi;
    y=sin(a).^2;
  將上面的檔案儲存之後即可隨時呼叫。
  命令:
    t=sinsd(45) 
  t =
      0.5000  
  命令:
    help sinsd  
  命令:
    t=sinsd([45,60])  
  t =
      0.5000    0.7500  
表明該函式對元素群運算有效。上面的語句相當於
  命令:
    x=[45,60];t=sinsd(x)  
  t =
      0.5000    0.7500  
  命令:
    x=[45,60;30,90];f=sinsd(x)  
  f =
      0.5000    0.7500
      0.2500    1.0000  
  將原始檔中最後一行的“.”去掉,再執行以上兩條命令,我們會發現什麼? 
  例8. 在MATLAB中,一個函式可以呼叫其它函式,也可以呼叫自身,即遞迴呼叫。下面利用遞迴演算法編寫一個函式,用來計算Fibonacci數列的第k項。
  Fibonacci數列:
    1,1,2,3,5,8,13,21,……
  M-函式檔案:
    function a=my_fibo(k) 
    if k==1|k==2,a=1; 
    else,a=my_fibo(k-1)+my_fibo(k-2);end
  
  將這個檔案寫入M-檔案編輯器並以名稱“my_fibo.m”儲存,以後就可以呼叫這個函式。
  遞迴演算法無疑是解決某一類問題的有效方法,但不宜濫用,因為它的運算速度往往很慢。
  命令:
    tic,  n= my_fibo(26)  ,toc  
  n =
       121393
  elapsed_time =
      34.4290  
  下面我們嘗試用一般的迴圈語句來求解這個問題。
  程式:
    tic,n=[1,1];for k=3:100,n(k)=n(k-1)+n(k-2);end,toc,  

  elapsed_time =
          0.0100  
  命令:
    n(1:26)  

  ans =
  Columns 1 through 8  
       1       1       2       3       5    8    13        21
  Columns 9 through 16  
      34      55      89     144     233   377      610       987
  Columns 17 through 24  
    1597    2584    4181    6765   10946  17711    28657     46368
  Columns 25 through 26  
   75025  121393  
  例9. 可變輸入變數個數的函式
  MATLAB提供的conv( )函式可用來求兩個多項式的乘積。對於多個多項式的連乘,則不能直接使用此函式,需要用該函式巢狀使用,用起來很不方便。下面編寫一個MATLAB函式,使它能直接處理任意多個多項式的乘積問題。
  M-函式檔案:
    function a=convs(varargin)
      a=1;
    for i=1:length(varargin)

相關文章