sum=0;Sum=2000;fori=1:Sumsum=sum+i;ifsum>=SumN=ibreakendend
有很多人對MATLAB循環(huán)+選擇很疑惑?今天就讓小編來為您講講!
方法
循環(huán)結(jié)構(gòu):for語句
輸出不正常的原因:matlab 中case 不同于if else, case 后面跟的應該是變量確切的值,而不是邏輯判斷。詳細可以在command window中輸入doc case查看。 舉例: function z=Untitled(x) a=1;b=2;c=3;d=4; z=0; switch x case 5 z=0; case 6 z=1; c
格式:
for 循環(huán)變量=表達式1:表達式2:表達式3
switch模塊是simulink公共模塊庫的一個基本模塊,switch模塊也可以理解開關(guān)模塊。其功能是輸入1時,輸入2,滿足選定的標準,否則,通過輸入3。輸入編號為底部(或左至右)。輸入1通過標準輸入2大于或等于,大于或不等于閾值。第一和第三個輸入端
循環(huán)體
function z=myfun1(x,y) if y==1 z=sin(x); elseif y==2 z=cos(x); else z=sin(x)*cos(x); end function z=myfun2(x) if x
end
嗯就是你f(x,y)右邊 的這個等號不正確啊,這樣的定義是無效的。 if y == 1, z = sin(x); elseif y == 2, z = cos(x); else z = cos(x).*sin(x); end
while語句:
clear a=input('input a'); b=input('input b'); c=input('input c'); x=0.5:0.01:5.5; for i=1:length(x);%%用循環(huán)求對應的x(i)取整和對應的y(i) t=fix(x(i)-0.5); switch(t) %%switch開關(guān)來選擇y(i)表達式 case 0 y(i)=a*x(i)*x(i)+b*x(i)+c;
格式:
while(條件)
function y = yfun(a,b,c,x) if (x>=0.5&x=1.5&x=3.5&x
循環(huán)體
if h(i,j)==a1(i,j) e(i,j)=a(i,j); elseif h(i,j)==b1(i,j) e(i,j)=b(i,j); elseif h(i,j)==c1(i,j) e(i,j)=c(i,j); else h(i,j)==d1(i,j) e(i,j)=d(i,j); end 對這一段程序仔細分析,我沒有仔細分析前面的程序,但可以猜測以下,h(i,j)肯定會
end
嗯就是你f(x,y)右邊 的這個等號不正確啊,這樣的定義是無效的。 if y == 1, z = sin(x); elseif y == 2, z = cos(x); else z = cos(x).*sin(x); end
【注】:條件成立時,執(zhí)行循環(huán)體
您好,比如 switch expr case {a1, a2,} do_something_1; case b do_something_2; case {c1,c2,} do_something_3; end expr表達式從上至下尋找匹配,當它與某個case后面的元胞數(shù)組中的某個元素匹配,則執(zhí)行該case分支的操作,然后跳出
break語句&& continue語句:
??? SWITCH expression must be a scalar or string constant. 表示:switch的表達式必須是數(shù)值或字符常量,不能是矩陣。 按你的程序,還是使用if選擇結(jié)構(gòu)比較合適。
break:破壞,破壞循環(huán),終止循環(huán)的進行,跳出循環(huán),程序?qū)?zhí)行循環(huán)語句的下一語句。
case語言表達式常用于舉例判斷的情況(比如常用的就是數(shù)組匹配返回的索引) switch value case {8} disp('良'); case {7} disp('中'); case {6} disp('及格'); otherwise disp('不合格'); end 如果是區(qū)間的條件判斷 應該而且建議用if value=input
continue:繼續(xù),循環(huán)繼續(xù),程序?qū)⑻^循環(huán)體中剩下的語句,繼續(xù)下一次循環(huán)。
將字母變?yōu)樾?例子 lower ('This Is an Example. There Are 9 Letters Will Convert to Lowercase.')
循環(huán)的嵌套—多重循環(huán)結(jié)構(gòu)
其實這種情況不適合用switch ,用if else判斷語句合適。為了說明switch用,這里我加了一個switch的判斷: n1=0; %表示優(yōu)的人數(shù)>=90分 n2=0;%表示良的人數(shù)>=80分 n3=0;%表示中的人數(shù)>=60分 n4=0;%表示不及格的人數(shù)=90 cj(i,1)='優(yōu)'; elseif f>=80
如圖所示
選擇結(jié)構(gòu):if-else語句
if-else-end語句所對應的是多重判斷選擇,而有時也會遇到多分支判斷選擇的問題。 MATLAB語言為解決多分支判斷選擇提供了switch-case語句。 switch-case語句的一般表達形式為: switch〈選擇判斷量〉 Case 選擇判斷值1 選擇判斷語句1 case 選擇判
格式:
if 表達式
首先你這個switch的用法就是錯的,case后跟一個值(注意是一個值?。脕砼袛鄐witch后的數(shù)是不是等于這個值,而不是case后接判斷語句。還有matlab 里可以運行C語言程序。你這個程序可以將case用ifelse..條件代替,就能修改正確。(下
程序模塊
sco=input('Please input the scoren'); switch floor(sco/10) case {9,10} t='A'; case 8 t='B'; case 7 t='C'; case 6 t='D'; case {0,1,2,3,4,5} t='E'; otherwise disp('Invalid score') end disp(['the score is ' t])
end
嗯就是你f(x,y)右邊 的這個等號不正確啊,這樣的定義是無效的。 if y == 1, z = sin(x); elseif y == 2, z = cos(x); else z = cos(x).*sin(x); end
或
if 表達式
首先你這個switch的用法就是錯的,case后跟一個值(注意是一個值?。?,用來判斷switch后的數(shù)是不是等于這個值,而不是case后接判斷語句。還有matlab 里可以運行C語言程序。你這個程序可以將case用ifelse..條件代替,就能修改正確。(下
程序模塊
sco=input('Please input the scoren'); switch floor(sco/10) case {9,10} t='A'; case 8 t='B'; case 7 t='C'; case 6 t='D'; case {0,1,2,3,4,5} t='E'; otherwise disp('Invalid score') end disp(['the score is ' t])
1else
switch語句適合分支的選擇結(jié)構(gòu),比較適合方式固定的選擇,比如對于那些分段函數(shù)比較 switch-case語句的一般表達形式為: switch〈選擇判斷量〉 Case 選擇判斷值1 選擇判斷語句1 case 選擇判斷值2 選擇判斷語句2 …… otherwise 判斷執(zhí)行語句 end
程序模塊
sco=input('Please input the scoren'); switch floor(sco/10) case {9,10} t='A'; case 8 t='B'; case 7 t='C'; case 6 t='D'; case {0,1,2,3,4,5} t='E'; otherwise disp('Invalid score') end disp(['the score is ' t])
2end
嗯就是你f(x,y)右邊 的這個等號不正確啊,這樣的定義是無效的。 if y == 1, z = sin(x); elseif y == 2, z = cos(x); else z = cos(x).*sin(x); end
switch語句:
case 貌似不能用判斷。。 一定要用case做的話 可以這么做 clear,clc candy=input('Enter the number of candy bars you would like to buy:n'); if candy>3 candy1=candy; candy='BiggerThan3'; end switch candy case 1 a=0.75; case 2 a=1.25
格式:
switch 表達式
我自己編的對任意底求對數(shù)的函數(shù)如下: function y=logn(n,x) switch(n) case 1 errordlg('不好意思,出錯了!??!'); case 2 y=log2(x); case exp(1) y=log(x); case 10 y=log10(x); otherwise y=log10(x)/log10(n); end 其中n為底數(shù),x為真數(shù)
case 數(shù)值1
閏年的概念: 普通閏年:能被4整除但不能被100整除的年份。(如2004年就是閏年,1999年不是閏年); 世紀閏年:能被400整除的的年份。(如2000年是閏年,1900年不是閏年); 根據(jù)閏年的概念,用matlab的switch語句實現(xiàn),即任意輸入一個年份,判斷是不是閏
程序模塊
sco=input('Please input the scoren'); switch floor(sco/10) case {9,10} t='A'; case 8 t='B'; case 7 t='C'; case 6 t='D'; case {0,1,2,3,4,5} t='E'; otherwise disp('Invalid score') end disp(['the score is ' t])
1case 數(shù)值2
程序模塊
sco=input('Please input the scoren'); switch floor(sco/10) case {9,10} t='A'; case 8 t='B'; case 7 t='C'; case 6 t='D'; case {0,1,2,3,4,5} t='E'; otherwise disp('Invalid score') end disp(['the score is ' t])
2case 數(shù)值3
程序模塊
sco=input('Please input the scoren'); switch floor(sco/10) case {9,10} t='A'; case 8 t='B'; case 7 t='C'; case 6 t='D'; case {0,1,2,3,4,5} t='E'; otherwise disp('Invalid score') end disp(['the score is ' t])
3......
otherwise
程序模塊
sco=input('Please input the scoren'); switch floor(sco/10) case {9,10} t='A'; case 8 t='B'; case 7 t='C'; case 6 t='D'; case {0,1,2,3,4,5} t='E'; otherwise disp('Invalid score') end disp(['the score is ' t])
nend
嗯就是你f(x,y)右邊 的這個等號不正確啊,這樣的定義是無效的。 if y == 1, z = sin(x); elseif y == 2, z = cos(x); else z = cos(x).*sin(x); end
擴展閱讀,以下內(nèi)容您可能還感興趣。
matlab switch 語句能否判斷多變量?
您好,比如
switch expr
case {a1, a2,...}
do_something_1;
case b
do_something_2;
case {c1,c2,...}
do_something_3;
...
end
expr表達式從上至下尋找匹配,當它與某個case后面的元胞數(shù)組中的某個元素匹配,則執(zhí)行該case分支的操作,然后跳出switch-case結(jié)構(gòu)。
注意,Matlab中switch后面的表達式可以是顯式邏輯值,即邏輯0和1(因此含比較運算的表達式不算在內(nèi))、標量或者字符串,因而case后面如果不是這些類型的值,那么就不匹配。
與switch語句相比,if語句則靈活得多,if后面的表達式幾乎可以是任意的表達式。
下面舉個綜合的例子來說明switch表達式的特性,比如
switch 1
case [2,1]
disp('case1')
case {3,1}
disp('case2')
case {1,2}
disp('case3')
end
復制代碼
結(jié)果返回 case2
這說明,不符合條件的case(第一個case類型不對)不匹配;出現(xiàn)重疊的情況(第二、三個case),switch僅僅匹配最前面一個。
之所以Maltab只是匹配最前面的,就是因為它支持了case后面可以使用元胞數(shù)組的情況,這就相當于多個重復匹配的case集中在一起(這就相當于實現(xiàn)C/C++中不加break的情形)。
另外,如果使用if-elseif結(jié)構(gòu)來實現(xiàn)上述功能,也是可行的,但是if-elseif本身是一個實現(xiàn)復雜分支程序流的結(jié)構(gòu),對于case情況非常多的時候,使用if-elseif不但代碼量很大,而且可讀性也沒switch那么清晰(殺雞焉用牛刀)。而使用switch-case結(jié)構(gòu),則能縮減代碼量,可讀性也好得多。
對于效率方面,switch-case和if-elseif結(jié)構(gòu)實現(xiàn)同樣功能,究竟孰優(yōu)孰劣,這個就有待測試的檢驗了。個人認為if-elseif的效率更低,有2點原因:
1. switch-case語句只需要計算一次switch后面的表達式,然后去匹配各個case;而if-elseif對于每個if后面的表達式都要進行計算,然后判斷。
2. 從匯編的角度來說,if...elseif編譯完后是很多條比較指令和跳轉(zhuǎn)指令,而switch-case語句編譯完之后,則是一張地址表,使用case的值做表的索引,因此case里的值最好步進為一。
總的來說,switch-case語句犧牲了靈活性,但提高了效率并使得代碼整潔。追問那就是說向這個情況 只能用if來完成了?
MATLAB中的switch問題
??? SWITCH expression must be a scalar or string constant.
表示:switch的表達式必須是數(shù)值或字符常量,不能是矩陣。
按你的程序,還是使用if選擇結(jié)構(gòu)比較合適。
matlab switch-case的疑問
case語言表達式常用于舉例判斷的情況(比如常用的就是數(shù)組匹配返回的索引)
switch value
case {8}
disp('良');
case {7}
disp('中');
case {6}
disp('及格');
otherwise
disp('不合格');
end
如果是區(qū)間的條件判斷 應該而且建議用if
value=input('value=')
if value<=4.0 && value>3.5
disp(lettergrade='A');
elseif value<=3.5 && value>2.5
disp(lettergrade='B');
elseif value<=2.5 && value>1.5
disp(lettergrade='C');
elseif value<=1.5 && value>0.5
disp(lettergrade='D');
elseif value<=0.5 &&value>=0
disp(lettergrade='F');
else
disp(lettergrade='NA');
end
秒殺把
MATLAB中switch后面加上lower是什么意思
你看一下switch后面的語句里是不是有case,這是個循環(huán)語句,類似于if else。
lower函數(shù)是把字母變成小寫。
matlab中switch語句統(tǒng)計分段人數(shù)
其實這種情況不適合用 switch ,用if else判斷語句合適。為了說明switch用,這里我加了一個switch的判斷:
n1=0; %表示優(yōu)的人數(shù) >=90分
n2=0;%表示良的人數(shù) >=80分
n3=0;%表示中的人數(shù) >=60分
n4=0;%表示不及格的人數(shù) <60分
fs=[20,30,40,50,60,70,80,90,85,98,91,85,94];%表示所有人的分數(shù),可以是個行向量,根據(jù)情況自己賦值就行
cj=num2str(zeros(length(fs),1));
for i=1:length(fs)
f=fs(i);
if f>=90
cj(i,1)='優(yōu)';
elseif f>=80&&f<90
cj(i,1)='良';
elseif f>=60&&f<80
cj(i,1)='中';
elseif f<60
cj(i,1)='不';
cj(i,2)='及';
cj(i,3)='格';
end
switch cj(i,1)
case '優(yōu)'
n1=n1+1;
case '良'
n2=n2+1;
case '中'
n3=n3+1;
case '不'
n4=n4+1;
end
end
運行結(jié)果:
cj = %與分數(shù)對應
不及格
不及格
不及格
不及格
中
中
良
優(yōu)
良
優(yōu)
優(yōu)
良
優(yōu)
n1 =
4
>> n2
n2 =
3
>> n3
n3 =
2
>> n4
n4 =
4追問謝謝了,只是我們實驗必須要用switch 的
。追答這次是switch
n1=0; %表示優(yōu)的人數(shù) >=90分
n2=0;%表示良的人數(shù) >=80分
n3=0;%表示中的人數(shù) >=60分
n4=0;%表示不及格的人數(shù) <60分
fs=[20,30,40,50,60,70,80,90,85,98,91,85,94];%表示所有人的分數(shù),可以是個行向量,根據(jù)情況自己賦值就行
cj=num2str(zeros(length(fs),1));
for i=1:length(fs)
f=floor(fs(i)/10);
switch f
case 10
n1=n1+1;
cj(i,1)='優(yōu)';
case 9
n1=n1+1;
cj(i,1)='優(yōu)';
case 8
n2=n2+1;
cj(i,1)='良';
case 7
n3=n3+1;
cj(i,1)='中';
case 6
n3=n3+1;
cj(i,1)='中';
case 5
n4=n4+1;
cj(i,1)='不';
cj(i,2)='及';
cj(i,3)='格';
case 4
n4=n4+1;
cj(i,1)='不';
cj(i,2)='及';
cj(i,3)='格';
case 3
n4=n4+1;
cj(i,1)='不';
cj(i,2)='及';
cj(i,3)='格';
case 2
n4=n4+1;
cj(i,1)='不';
cj(i,2)='及';
cj(i,3)='格';
case 1
n4=n4+1;
cj(i,1)='不';
cj(i,2)='及';
cj(i,3)='格';
case 0
n4=n4+1;
cj(i,1)='不';
cj(i,2)='及';
cj(i,3)='格';
end
end
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com