Main Content

이번역최신을있지않습니다않습니다。최신내용으로보려면를하십시오하십시오하십시오。

제어 흐름

조건부 제어 — if, else, switch

조건문을 사용하면 런타임에 실행할 코드 블록을 선택할 수 있습니다. 가장 단순한 형태의 조건문은如果문입니다。예를다음과같습니다。

%生成一个随机数a = randi(100,1);%偶数,如果rem(a,2)== 0 disp('a是偶数')b = a/2;结尾

如果문은(선택사항)Elseif또는别的를사용선택을포함수있습니다있습니다。예를다음과같습니다。

a = randi(100,1);如果<30 disp('small')elseif a <80 disp('edimed')else disp('大')端

또는,알고알고의값같은지테스트경우경우switch문을합니다。예를다음과같습니다。

[dayNum, dayString] = weekday(date, 'long', 'en_US'); switch dayString case 'Monday' disp('Start of the work week') case 'Tuesday' disp('Day 2') case 'Wednesday' disp('Day 3') case 'Thursday' disp('Day 4') case 'Friday' disp('Last day of the work week') otherwise disp('Weekend!') end

如果switch모두에 대해 MATLAB®true true조건조건해당하는를하고코드을종료합니다합니다합니다각각의조건문에는结尾키워드가합니다。

알고있는이면서값개수가많을때일반으로으로으로switch문을 사용하는 편이如果문을하는보다편합니다편합니다。하지만switch값과案子값 간에 부등식을 테스트할 수는 없습니다. 예를 들어, 다음과 같은 조건 유형은switch로는 구현할 수 없습니다.

yournumber =输入('输入数字:');如果您的number <0 disp('pangis')elsef yournumber> 0 disp('正')else disp('Zero')结束

조건문의배열비교

관계연산자와如果문이 행렬에 대해 동작하는 방식을 이해하는 것은 중요합니다. 두 변수 간의 등식을 확인하려는 경우 다음을 사용해야 할 수 있습니다.

如果a == b,...

이는유효한matlab코드이며,一个b가 스칼라일 경우 예상대로 동작합니다. 하지만一个b가행렬인경우a == b는이두같은지여부를테스트않으며두행렬의어느부분이같은지테스트합니다。그결과,요소별동일성나타내는내는내는내는내는내는내는로로구성또만들어집니다만들어집니다만들어집니다만들어집니다。

一个= magic(4); B = A; B(1,1) = 0; A == B ans = 4×4 logical array 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

두변수의을확인하는올바른은은是平等的함수를하는입니다입니다。

如果是等于(a,b),...

是平等的如果함수실행로,행렬행렬스칼라논리값1((true에해당)또는0((错误的)을반환。위의一个행렬과b행렬을사용다음과결과얻게됩니다됩니다。

quequal(a,b)ans =逻辑0

다음은을중점적설명하기또다른입니다입니다입니다。一个b가스칼경우은절대절대절대절대예기치상황상황에에도달않습니다않습니다않습니다。하지만이전한,열열서로한을포함대부분의행렬쌍는는a> b,,,,a ,,,,a == b중 어떤 행렬 조건도모든true가가가아니므로别的절이실행됩니다。

如果a> b'大'

다음을 포함한 여러 함수가如果조건사용비교를스칼라조건줄이는도움이됩니다됩니다。

全部

루프제어 - 因为,继续,休息

이섹션는루프를제어하는다음다음함수함수함수다룹니다다룹니다다룹니다。

为了

为了루프는그룹을,미리지정고정만큼해서합니다합니다합니다。이와짝이루는结尾는해당의을합니다합니다。

为了n = 3:32 r(n) = rank(magic(n)); end r

내부명령문으로출력이반복표시되지않으며,루프루프에에에에r이 있으면 최종 결과만 표시됩니다.

특히,루프가루프가있는에는을높이기루프안쪽들여쓰는것이좋습니다좋습니다。

对于i = 1:m表示j = 1:n H(i,j)= 1/(i+j);结尾

while

while루프는의에따라특정을무한으로실행합니다합니다합니다。이와짝이루는结尾는해당의을합니다합니다。

다음은을하여다항식의해찾는한한,여기에는에는에는에는while,,,,如果,,,,别的,,,,结尾가포함있습니다。

a = 0;fa = -inf;b = 3;fb = inf;而B-A> EPS*B X =(A+B)/2;fx = x^3-2*x-5;如果符号(fx)== sign(fa)a = x;fa = fx;否则b = x;fb = fx; end end x

그다항식다항식다항식x3- 2x - 5의얻게됩니다。

X = 2.09455148154233

如果문에섹션설명된비교관련주의사항은while문에적용됩니다。

继续

继续문은为了루프또는while루프에서의명령문을건너다음반복위치제어를전달합니다합니다。이는중첩루프있는继续문의경우도입니다입니다。즉,继续문이 발견된 루프의 시작 부분에서 실행이 계속 진행됩니다.

아래 예제에서는 파일魔术에서모든있는과을건너뛰고라인수를세는继续루프를줍니다。继续문은비어 있는 라인이나 주석 라인이 발견될 때마다 개수를 늘리지 않고魔术의다음으로하는사용됩니다됩니다。

fid = fopen('Magic.m','r');计数= 0;而〜feof(fid)line = fgetl(fid);如果Isempty(行)||strncmp(线,'%',1)||〜ischar(线)继续端计数=计数 + 1;end fprintf('%d行\ n',count);fclose(fid);

休息

休息문을사용하면为了루프또는while루프가조기종료됩니다。중첩루프의경우休息는해당만에끝냅니다。

다음은에서예제개선개선입니다입니다입니다。여기에休息를사용것좋은이유무엇일까요?

a = 0;fa = -inf;b = 3;fb = inf;而B-A> EPS*B X =(A+B)/2;fx = x^3-2*x-5;如果fx == 0 break eleseif sign(fx)== sign(fa)a = x;fa = fx;否则b = x;fb = fx; end end x

프로그램종료 - 返回

이 섹션에서는 실행이 완료되기 전에 프로그램을 종료하는 데 사용할 수 있는 MATLAB返回함수에다룹니다。

返回

返回은명령시퀀스종료하고함수또는제어를합니다합니다합니다。또한返回keyboard모드를하는에도됩니다됩니다。호출된일반으로함수끝도달하면한에제어를전달합니다합니다。호출된함수에返回문을강제로에종료되도록호출함수로제어전달할수있습니다있습니다。

벡터화

matlab프로그램실행를높이기가지방법프로그램을할할때사용하는알고리즘알고리즘을벡터화하는입니다입니다입니다。다른프로그래밍언어는为了루프나루프를 사용할 수 있는 데 비해 MATLAB에서는 벡터 연산 또는 행렬 연산을 사용할 수 있습니다. 로그 테이블을 생성하는 간단한 예를 하나 들어보겠습니다.

x = 0.01;y = log10(x);对于k = 1:999 x(k + 1)= x(k) + 0.01;y(k+1)= log10(x(k+1));结尾

이와코드벡터화된은같습니다같습니다같습니다。

x = .01:.01:10;y = log10(x);

좀 더 복잡한 코드의 경우에는 벡터화로 프로그래밍하는 게 더 어려울 수 있습니다.

사전할당(预先定位)

코드의화할수경우결과가저장벡터나배열배열을사전사전에할당할당해으로为了루프의 실행 속도를 높일 수 있습니다. 예를 들어, 이 코드에서는 함수를사용하여为了루프에서벡터사전에해놓습니다놓습니다。이렇게하면为了루프의속도훨씬됩니다됩니다。

r= zeros(32,1); for n = 1:32 r(n) = rank(magic(n)); end

위의에서할당을사용하지하지않으면않으면인터프리터인터프리터에서를를돌때마다요소하나씩,r벡터를하게됩니다。벡터사전활용이단계를필요가없어가빨라집니다빨라집니다빨라집니다。