sum=0;Sum=2000;fori=1:Sumsum=sum+i;ifsum>=SumN=ibreakendend
有很多人對MATLAB迴圈+選擇很疑惑?今天就讓小編來為您講講!
方法
迴圈結構: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 迴圈變數=表示式1:表示式2:表示式3
switch模組是simulink公共模組庫的一個基本模組,switch模組也可以理解開關模組。其功能是輸入1時,輸入2,滿足選定的標準,否則,通過輸入3。輸入編號為底部(或左至右)。輸入1通過標準輸入2大於或等於,大於或不等於閾值。第一和第三個輸入端
迴圈體
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);%%用迴圈求對應的x(i)取整和對應的y(i) t=fix(x(i)-0.5); switch(t) %%switch開關來選擇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
迴圈體
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
【注】:條件成立時,執行迴圈體
您好,比如 switch expr case {a1, a2,} do_something_1; case b do_something_2; case {c1,c2,} do_something_3; end expr表示式從上至下尋找匹配,當它與某個case後面的元胞陣列中的某個元素匹配,則執行該case分支的操作,然後跳出
break語句&& continue語句:
??? SWITCH expression must be a scalar or string constant. 表示:switch的表示式必須是數值或字元常量,不能是矩陣。 按你的程式,還是使用if選擇結構比較合適。
break:破壞,破壞迴圈,終止迴圈的進行,跳出迴圈,程式將執行迴圈語句的下一語句。
case語言表示式常用於舉例判斷的情況(比如常用的就是陣列匹配返回的索引) switch value case {8} disp('良'); case {7} disp('中'); case {6} disp('及格'); otherwise disp('不合格'); end 如果是區間的條件判斷 應該而且建議用if value=input
continue:繼續,迴圈繼續,程式將跳過迴圈體中剩下的語句,繼續下一次迴圈。
將字母變為小寫 例子 lower ('This Is an Example. There Are 9 Letters Will Convert to Lowercase.')
迴圈的巢狀—多重迴圈結構
其實這種情況不適合用switch ,用if else判斷語句合適。為了說明switch用,這裡我加了一個switch的判斷: n1=0; %表示優的人數>=90分 n2=0;%表示良的人數>=80分 n3=0;%表示中的人數>=60分 n4=0;%表示不及格的人數=90 cj(i,1)='優'; elseif f>=80
如圖所示
選擇結構:if-else語句
if-else-end語句所對應的是多重判斷選擇,而有時也會遇到多分支判斷選擇的問題。 MATLAB語言為解決多分支判斷選擇提供了switch-case語句。 switch-case語句的一般表達形式為: switch〈選擇判斷量〉 Case 選擇判斷值1 選擇判斷語句1 case 選擇判
格式:
if 表示式
首先你這個switch的用法就是錯的,case後跟一個值(注意是一個值!),用來判斷switch後的數是不是等於這個值,而不是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後的數是不是等於這個值,而不是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語句適合分支的選擇結構,比較適合方式固定的選擇,比如對於那些分段函式比較 switch-case語句的一般表達形式為: switch〈選擇判斷量〉 Case 選擇判斷值1 選擇判斷語句1 case 選擇判斷值2 選擇判斷語句2 …… otherwise 判斷執行語句 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 表示式
我自己編的對任意底求對數的函式如下: 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為底數,x為真數
case 數值1
閏年的概念: 普通閏年:能被4整除但不能被100整除的年份。(如2004年就是閏年,1999年不是閏年); 世紀閏年:能被400整除的的年份。(如2000年是閏年,1900年不是閏年); 根據閏年的概念,用matlab的switch語句實現,即任意輸入一個年份,判斷是不是閏
程式模組
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 數值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 數值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
擴充套件閱讀,以下內容您可能還感興趣。
matlab switch 語句能否判斷多變數?
您好,比如
switch expr
case {a1, a2,...}
do_something_1;
case b
do_something_2;
case {c1,c2,...}
do_something_3;
...
end
expr表示式從上至下尋找匹配,當它與某個case後面的元胞陣列中的某個元素匹配,則執行該case分支的操作,然後跳出switch-case結構。
注意,Matlab中switch後面的表示式可以是顯式邏輯值,即邏輯0和1(因此含比較運算的表示式不算在內)、純量或者字串,因而case後面如果不是這些型別的值,那麼就不匹配。
與switch語句相比,if語句則靈活得多,if後面的表示式幾乎可以是任意的表示式。
下面舉個綜合的例子來說明switch表示式的特性,比如
switch 1
case [2,1]
disp('case1')
case {3,1}
disp('case2')
case {1,2}
disp('case3')
end
複製程式碼
結果返回 case2
這說明,不符合條件的case(第一個case型別不對)不匹配;出現重疊的情況(第二、三個case),switch僅僅匹配最前面一個。
之所以Maltab只是匹配最前面的,就是因為它支援了case後面可以使用元胞陣列的情況,這就相當於多個重複匹配的case集中在一起(這就相當於實現C/C++中不加break的情形)。
另外,如果使用if-elseif結構來實現上述功能,也是可行的,但是if-elseif本身是一個實現複雜分支程式流的結構,對於case情況非常多的時候,使用if-elseif不但程式碼量很大,而且可讀性也沒switch那麼清晰(殺雞焉用牛刀)。而使用switch-case結構,則能縮減程式碼量,可讀性也好得多。
對於效率方面,switch-case和if-elseif結構實現同樣功能,究竟孰優孰劣,這個就有待測試的檢驗了。個人認為if-elseif的效率更低,有2點原因:
1. switch-case語句只需要計算一次switch後面的表示式,然後去匹配各個case;而if-elseif對於每個if後面的表示式都要進行計算,然後判斷。
2. 從彙編的角度來說,if...elseif編譯完後是很多條比較指令和跳轉指令,而switch-case語句編譯完之後,則是一張地址表,使用case的值做表的索引,因此case裡的值最好步進為一。
總的來說,switch-case語句犧牲了靈活性,但提高了效率並使得程式碼整潔。追問那就是說向這個情況 只能用if來完成了?
MATLAB中的switch問題
??? SWITCH expression must be a scalar or string constant.
表示:switch的表示式必須是數值或字元常量,不能是矩陣。
按你的程式,還是使用if選擇結構比較合適。
matlab switch-case的疑問
case語言表示式常用於舉例判斷的情況(比如常用的就是陣列匹配返回的索引)
switch value
case {8}
disp('良');
case {7}
disp('中');
case {6}
disp('及格');
otherwise
disp('不合格');
end
如果是區間的條件判斷 應該而且建議用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,這是個迴圈語句,類似於if else。
lower函式是把字母變成小寫。
matlab中switch語句統計分段人數
其實這種情況不適合用 switch ,用if else判斷語句合適。為了說明switch用,這裡我加了一個switch的判斷:
n1=0; %表示優的人數 >=90分
n2=0;%表示良的人數 >=80分
n3=0;%表示中的人數 >=60分
n4=0;%表示不及格的人數 <60分
fs=[20,30,40,50,60,70,80,90,85,98,91,85,94];%表示所有人的分數,可以是個行向量,根據情況自己賦值就行
cj=num2str(zeros(length(fs),1));
for i=1:length(fs)
f=fs(i);
if f>=90
cj(i,1)='優';
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 '優'
n1=n1+1;
case '良'
n2=n2+1;
case '中'
n3=n3+1;
case '不'
n4=n4+1;
end
end
執行結果:
cj = %與分數對應
不及格
不及格
不及格
不及格
中
中
良
優
良
優
優
良
優
n1 =
4
>> n2
n2 =
3
>> n3
n3 =
2
>> n4
n4 =
4追問謝謝了,只是我們實驗必須要用switch 的
。追答這次是switch
n1=0; %表示優的人數 >=90分
n2=0;%表示良的人數 >=80分
n3=0;%表示中的人數 >=60分
n4=0;%表示不及格的人數 <60分
fs=[20,30,40,50,60,70,80,90,85,98,91,85,94];%表示所有人的分數,可以是個行向量,根據情況自己賦值就行
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)='優';
case 9
n1=n1+1;
cj(i,1)='優';
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