このペ,ジの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
条件付きステ,トメントでは,ランタ,ムに実行するコ,ドのブロックを選択できます。最もシンプルな条件付きステ,トメントは,如果
ステ,トメントです。以下に例を示します。
%生成随机数a = randi(100,1);%如果是偶数,则除以2如果rem(a, 2) == 0 disp('a是偶数')b = a/2;结束
如果
ステ,トメントでは,オプションのキ,ワ,ドelseif
または其他的
を使用して,代替の選択肢を含めることができます。以下に例を示します。
A = randi(100,1);如果disp < 30 ('small'),则elseif disp < 80 ('medium'),否则disp('large')结束
または,一連の既知の値を使用して等価性をテストする場合は,开关
ステ,トメントを使用します。以下に例を示します。
[dayNum, dayString] = weekday(date, 'long', 'en_US');switch dayString case 'Monday' disp('工作周的开始')case 'Tuesday' disp('Day 2') case 'Wednesday' disp('Day 3') case 'Thursday' disp('Day 4') case 'Friday' disp('工作周的最后一天')否则disp('Weekend!')结束
如果
と开关
のいずれの場合も,最初の真の条件まで対応するコ,ドが実行されて,コ,ドブロックが終了されます。各条件付きステ,トメントでは,结束
キ,ワ,ドが必要です。
一般的に,多数の既知の値で条件分岐する場合は,如果
ステ,トメントよりも开关
ステ,トメントの方が読みやすくなります。ただし,开关
の値と情况下
の値の間で非等価性をテストすることはできません。たとえば,开关
で次のような条件を使用することはできません。
yourNumber = input('输入一个数字');if yourNumber < 0 disp('Negative') elseif yourNumber > 0 disp('Positive') else disp('Zero')结束
関係演算子と如果
ステ,トメントが行列にどのように機能するかを理解することは重要です。2 .の変数間の等価性をチェックする場合,次のようにします。
如果A == B,……
これは正しいmatlab®のコ,ドで,一个
とB
がスカラ,であるときに予想されることを実行します。しかし,一个
とB
が行列の場合,A == b
はそれらが“等しいかどうか”をテストせずに,それらの“どこが等しいか”をテストします。結果は,要素ごとの等価性を表わす0と1からなる行列になります。
A =魔术(4);B = a;B(1,1) = 0;A == B ans = 4×4逻辑阵列0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
2 .の変数間の等価性をチェックする適切な方法は,関数isequal
を使うことです。
如果isequal(A, B),…
isequal
は,関数如果
による結果の表現として,行列ではなく“スカラ”逻辑値1
(真正的
を表す)または0
(假
)を出力します。上記の行列一个
とB
を使って以下を得ます。
isequal(A,B) ans =逻辑0
次に,このことを強調する他の例を示します。一个
とB
がスカラ,である場合,次のプログラムは予想通りの結果になります。列を交換した魔方陣を含む行列のほとんどの組に対して,行列の条件A > b
、A < b
,またはA == b
は“どの”要素に対しても真ではないため,其他的
句が実行されます。
if A > B 'greater' elseif A < B 'less' elseif A == B 'equal' else错误('意外情况')结束
次の関数は,如果
と共に使って,行列の比較結果をスカラ,条件にするのに使うことができます。
Isequal isempty all any
この節では,プログラムのル,プ制御を与える以下のmatlab関数を述べます。
为
ル,プは,前もって定義した固定回数だけステ,トメント群を繰り返し実行します。対応する结束
でステ,トメント群を区別します。
对于n = 3:32 r(n) = rank(magic(n));结束r
ループ内のステートメントの最後のセミコロンは,繰り返し表示されないようにして,最終結果を表示するためループの後にr
を使います。
読みやすくするため,特に入れ子状態のときには,ル,プに,ンデントを適用することは良い考えです。
H(i,j) = 1/(i+j);结束结束
而
ル,プは,回数を定義しないで,繰り返し回数を論理条件によりコントロ,ルするときに使います。対応する结束
でステ,トメント群を区別します。
而
、如果
、其他的
、结束
を使ったプログラムを示します。これは,多項式のゼロを見けるために区間2分割を使います。
A = 0;fa = -Inf;B = 3;fb = Inf;而b-a > eps*b x = (a+b)/2;Fx = x^3-2*x-5;如果sign(fx) == sign(fa) a = x;Fa = fx;Else b = x;Fb = fx; end end x
結果は,多項式x3.- 2 * 5の根になります。まり,次のようになります。
X = 2.09455148154233
如果
ステ,トメントの節で議論した行列比較に関する注意は,而
ステ,トメントにも適用されます。
ステ,トメント继续
は,ル,プの本体の中で,为
,または,而
のル,プの中で,あるステ,トメントをスキップして,次の反復をコントロ,ルします。入れ子のル,プ内の继续
ステ,トメントに対して同じことが当てはまります。まり,继续
ステ,トメントが遭遇したル,プの初めで実行が続きます。
次の例は,继续
ルプを使って,ファルmagic.m
の中の空白行とコメント行をスキップしたコドのランをカウントするものです。继续
ステ,トメントを使って,空白行やコメント行に出会うとカウントしないで,magic.m
の中の次のラ@ @ンに進みます。
Fid = fopen('magic.m','r');计数= 0;当~feof(fid) line = fgetl(fid);If isempty(line) || strncmp(line,'%',1) || ~ischar(line) continue end count = count + 1;结束fprintf('%d lines\n',count);文件关闭(fid);
打破
ステ,トメントは,为
または而
ル,プから抜け出すためのものです。入れ子になったル,プでは,打破
は最下部のル,プのみから退出します。
前の節の例を改良したものを以下に示します。打破
の使用はなぜ良い考えなのでしょうか?
A = 0;fa = -Inf;B = 3;fb = Inf;而b-a > eps*b x = (a+b)/2;Fx = x^3-2*x-5;If fx == 0 break elseif sign(fx) == sign(fa) a = x;Fa = fx;Else b = x;Fb = fx; end end x
この節では,プログラムを最後まで実行せず途中で終了させるmatlab関数返回
にいて述べます。
返回
はコマンドの現在のシ,ケンスを終了し,起動関数またはキ,ボ,ドに制御を戻します。返回
は,键盘
モ,ドの終了にも使用されます。呼ばれた関数は通常その機能を終了すると,それを起動した関数に制御を移します。呼ばれた関数の中に返回
を挿入することで強制的に早く終了し起動した関数に制御を移すことができます。
MATLABをスピードアップする1つの方法は,Mファイルのアルゴリズムをベクトル化することです。他のプログラミング言語が为
または做
ル,プを使う部分で,matlabではベクトルまたは行列演算を使うことができます。次のコ,ドは,簡単な例として,対数表を作成するものです。
X = 0.01;Y = log10(x);对于k = 1:9 999 x(k+1) = x(k) + 0.01;Y (k+1) = log10(x(k+1));结束
同じコ,ドをベクトル化すると,次のようになります。
X = .01:.01:10;Y = log10(x);
さらに複雑なコ,ドに対しては,ベクトル化の効果が常に顕著とは限りません。
コードの一部をベクトル化することができない場合,出力結果をストアするベクトルまたは配列を前もって設定しておくことによって为
ル,プをスピ,ドアップできます。たとえば,次のコ,ドは,为
ル,プで作成されるベクトルを前もって作成するために関数0
を使うものです。これにより,为
ル,プの実行はかなり速くなります。
R = 0 (32,1);对于n = 1:32 r(n) = rank(magic(n));结束
前の例の中で前もってスペースを設定しないと,MATLABインタープリターは,ループに関する1回の実行で,1要素ずつr
ベクトルを拡大します。ベクトルの領域を前もって確保することは,この手順を省略させ,より高速の実行になります。