找回密码
 注册
Simdroid-非首页
查看: 1746|回复: 14

【原创】MATLAB新手教學 (2) 控制流程

[复制链接]
发表于 2003-6-3 06:18:42 | 显示全部楼层 |阅读模式 来自 台湾
MATLAB新手教學 (2)  控制流程
  
對於初次接觸MATLAB的人,控制流程可以說是非常重要的,有時候您可能須要自行撰寫特殊的程式碼或完成一系列的動作時,特別適合使用控制流程。MATLAB提供四種控制流程結構。它們是:For迴圈,While迴圈和If-Else-End結構與Sitch Case。由於這些結構經常包含大量的MATLAB命令,故經常出現在M文件中,而不是直接加在MATLAB提示符下
  
For 迴圈
For迴圈允許一組命令以固定與預定的次數重復。
  
For迴圈的一般形式是:
for x = 起始值:間隔值:終止值
.....執行命令.....
end
在for和end語句之間的.....執行命令.....
就會按 起始值:間隔值:終止值執行
  
其中間隔值預設為1
  
例如,
  
>>for n=1:10
x(n)=sin(n*pi/10);
>>end
  
>>x
x =
Columns 1 through 7
0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090
Columns 8 through 10
0.5878 0.3090 0.0000
  
對n等於1到10,求sin(n*pi/10)的值,直至下一個end語句。
第一次通過For迴圈n=1,第二次,n=2,如此繼續,直至n=10。在n=10以後,For迴圈結束,然後求end語句後面的任何命令值
  
語句1 :10 是一個標準的MATLAB陣列創建語句。在For迴圈內接受任何有效的MATLAB
B陣列。
>>data=[1 3 5;2 4 6]
  
data =
  
     1     3     5
     2     4     6
  
>>for n=data
x=n(2)-n(1)
>>end
  
x =
  
    1
  
x =
  
    1
  
x =
  
    1
  
巢狀for迴圈
  
最常使用於矩陣運算
  
for x1 = 起始值:間隔值:終止值
    for x2 = 起始值:間隔值:終止值
.....執行命令.....
      end
end
  
建立一5*5矩陣
>> for I = 1:5
             for J = 1:5
                 A(I,J) = 1/(I+J-1);
             end
end
>> A
  
A =
  
    1.0000    0.5000    0.3333    0.2500    0.2000
    0.5000    0.3333    0.2500    0.2000    0.1667
    0.3333    0.2500    0.2000    0.1667    0.1429
    0.2500    0.2000    0.1667    0.1429    0.1250
    0.2000    0.1667    0.1429    0.1250    0.1111
  
While 迴圈
與For迴圈以固定次數求一組命令的值相反,While 迴圈以不定的次數求一組語句的值 
?
While迴圈的一般形式是:
while 條件式
.....執行命令.....
end
只要在條件式裏的所有元素為真,就執行while和end 語句之間的.....執行命令.....。
  
考慮下列例子:
如果norm(E+F-E,1) > 0一直成立
則它會一直跑E = E + F; F = A*F/N; N = N + 1;
>>E = 0*A; F = E + eye(size(E)); N = 1;
            while norm(E+F-E,1) > 0
               E = E + F;
               F = A*F/N;
               N = N + 1;
            end
  
E =
  
    3.3206    1.2579    0.8769    0.6768    0.5525
    1.2579    1.7774    0.5718    0.4543    0.3776
    0.8769    0.5718    1.4344    0.3524    0.2973
    0.6768    0.4543    0.3524    1.2904    0.2478
    0.5525    0.3776    0.2973    0.2478    1.2134
  
If-Else-End結構來提供。最簡單的If-Else-End結構是
if 條件式
.....執行命令.....
end
  
如果在運算式中的所有元素為真(非零),那就執行if和end語言之間的.....執行命令.....。
  
例如,
>>a=10; b=a*25  
b =
   250
  
>>if a>5  
b=(1-20/100)*b;
>>end
  
b =
  
   200
  
假如有兩個選擇,If-Else-End結構是:
if 條件式
.....執行命令1.....
else
.....執行命令2.....
end
在這裏,如果運算式為真,則執行第一組命令;如果運算式是假,則執行第二組命令。
  
當有三個或更多的選擇時,If-Else-End結構採用形式
if 條件式1
.....執行命令1.....
elseif 條件式2
.....執行命令2.....
elseif 條件式3
.....執行命令3.....
elseif ……



else
.....除以上之外的命令......
end
最後的else命令可有可無
  
switch.....case
與前面之if-else-end 敘述相同的條件式亦可利用SWITCH 之敘述方式有時會更有條理化。SWITCH 之陳述型式如下:   
  
switch 條件式1
case 變數值1或索引值1
.....執行命令1.....
case 變數值2或索引值2
.....執行命令2.....
otherwise
.....除以上之外的命令......
  
end
  
只要第一個 CASE 的條件相符合時,其後之敘述指令即會被執行。若CASE 之條件是以數個單元之集合表示(如第二個CASE),則只要其中一單元符合SWITCH後之條件,即會執行第二CASE下之指令陳述。若所有條件均不符合,則會執行OTHERWISE後之指令陳述。若上面所設立之條件均不符合時,則什麼都不執行,摸著鼻子就離開了。不論如何,僅其中一個CASE的內容會被執行,執行後即會跳到 END後面之敘述去執行下一段之指令。
  
大家可以試試
发表于 2003-9-27 23:52:14 | 显示全部楼层 来自 上海闸北区

回复: 【原创】MATLAB新手教學 (2) 控制流程

Simdroid开发平台
真的很佩服版主的良苦用心,天地可鉴。
YKK 该用户已被删除
发表于 2003-10-6 21:19:45 | 显示全部楼层 来自 浙江杭州
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2003-10-7 12:26:56 | 显示全部楼层 来自 江苏南京

回复: 【原创】MATLAB新手教學 (2) 控制流程

谢谢版主!不过你的文字为何总是繁体?疑惑中~~~
jiuh 该用户已被删除
发表于 2003-11-17 19:50:06 | 显示全部楼层 来自 上海交通大学
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2003-11-26 18:17:50 | 显示全部楼层 来自 LAN

回复: 【原创】MATLAB新手教學 (2) 控制流程

>>data=[1 3 5;2 4 6]  
  
data =  
  
     1 3 5  
     2 4 6  
  
>>for n=data  
x=n(2)-n(1)  
>>end  
  
在这个循环里,n是取那些数的呢?
n是不是也是一个矩阵?那n(2)和n(1)取那些数呢?
发表于 2003-11-26 18:47:54 | 显示全部楼层 来自 LAN

回复: 【原创】MATLAB新手教學 (2) 控制流程

我debug了一下,发现n竟然是一个2x1的矩阵,在循环过程中会分别等于1,2     3,4    5,6
为什么会这样呢?烦劳版主解释一下。
发表于 2004-3-12 13:38:19 | 显示全部楼层 来自 香港

回复: 【原创】MATLAB新手教學 (2) 控制流程

n=[n1  n2  n3]
  =[ 1  3  5
      2  4  6]
第一次循环n=n1=[1 2]'
第二次循环n=n2=[3 4]'
第三次循环n=n3=[5 6]'
发表于 2004-3-18 18:49:36 | 显示全部楼层 来自 同济大学

回复: 【原创】MATLAB新手教學 (2) 控制流程

楼主辛苦呀
duweiyang2 该用户已被删除
发表于 2004-9-11 21:35:15 | 显示全部楼层 来自 辽宁沈阳
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2004-9-19 11:06:19 | 显示全部楼层 来自 山西太原

回复: 【原创】MATLAB新手教學 (2) 控制流程

谢谢斑竹
发表于 2005-1-30 05:52:40 | 显示全部楼层 来自 美国

Re:【原创】MATLAB新手教學 (2) 控制流程

多谢斑竹呀,
我可以好好体会程序的结构·
sunbae 该用户已被删除
发表于 2005-4-3 17:17:57 | 显示全部楼层 来自 湖北
提示: 作者被禁止或删除 内容自动屏蔽
wangyunfeng2001 该用户已被删除
发表于 2005-4-12 21:49:20 | 显示全部楼层 来自 湖北宜昌
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2005-4-20 17:42:42 | 显示全部楼层 来自 北京交通大学

Re:【原创】MATLAB新手教學 (2) 控制流程

谢谢斑竹
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-5-23 23:21 , Processed in 0.048252 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表