forやwhileで繰り返し処理させてみる無償ソフトで技術計算しよう【プログラミング基礎編】(2)(2/2 ページ)

» 2014年05月09日 10時00分 公開
[伊藤孝宏,MONOist]
前のページへ 1|2       

breakコマンド、continueコマンド

 forやwhileループで、条件によっては処理を中断したい場合は、「break」コマンドや「continue」コマンドを用います。ヘルプの最初の行を下記に示します。

The break statement is used to exit a loop prematurely.

The continue statement is used to change the order of execution within a loop.

 意味は、「breakはループを予定より早く終了させる場合に用います。continueはループ内の実行を変える(行わせない)場合に用います」となります。

 ループ内にbreakコマンドを入れると、ループが終了します。一方、continueコマンドを入れると、continue以下の処理を飛ばして、ループの先頭に戻ります。通常、breakやcontinueコマンドは「if」(条件式を満たしている場合に処理)コマンドと組み合わせて使います。

 例として、グラフィックス編で例題とした減衰系の強制振動での振幅倍率曲線で、振幅倍率が10となる減衰比ζを求めてみます(関連記事:曲面と曲線、2種類の3次元グラフの描き方)。減衰比を変えながら振幅倍率を求め、振幅倍率の最大値が10以上となったらループを終了させます。ex307.mがプログラムで、ifコマンドでmfの最大値が10以上で、breakコマンドを動作させています。ex307.mを動作させると、図1が得られ、図のタイトル欄にzeta=0.05とあるように、振幅倍率が10となる減衰比は0.05であることが分かります。

clear;
eta=0:0.01:3;
for zeta=1:-0.01:0.01
    mf=1./sqrt((1-eta.^2).^2+(2*zeta*eta).^2);
    if max(mf)>=10
        break;
    end
end
plot(eta,mf);
title(['zeta=',num2str(zeta)]);
xlabel('f/fn');ylabel('x/xst');grid('on');
ex307.m

>>「ex307.m」ダウンロード

図 1 振幅倍率曲線

 最後に、エラーコマンドを紹介します。エラーコマンドは矛盾した計算や無意味な計算をさせないように、以降の処理を中断させるものです。error('comment');とすると、処理が終了し、commentをコマンドウィンドウに表示します。通常は、ifコマンドと組み合わせます。

 例えば、下記はnが奇数か偶数かを判定するプログラムです。n/2を整数化して2倍にすると、偶数であれば、4/2*2=4となり、元の数値と等しくなります。If文で判別し、元の数値と等しい場合(==は論理演算で、両辺が等しい場合1を、等しくない場合0を返します)、even(偶数)と表示させます。一方、奇数であれば、5/2の整数は2となり、2*2=4で元の数値とは異なった値となりif文を満足せず次の行に移動します。偶数以外であれば、奇数であるので、else文(条件式を満たしていない場合に処理)で、odd(奇数)と表示させます。

clear;
n=5;
if(n==int32(n/2)*2)
    printf('%d is even\n',n);
else
    printf('%d is odd\n',n);
end

 しかし偶数・奇数は0以外の整数であるため、0や小数での計算結果はプログラム上、エラーが生じないとしても、意味がありません。そこで、下記のex308.mでは、ifコマンドでnが0に等しい場合、エラーとなり、「zero is neither even nor odd」(0は偶数でも奇数でもない)と表示させるようにしています。

clear;
n=0;
if (n==0)
    error('zero is neither even nor odd');
elseif ( n ~= fix(n) )
    error('expecting integer argument');
end
if(n==int32(n/2)*2)
    printf('%d is even\n',n);
else
    printf('%d is odd\n',n);
end
ex308.m

>>「ex308.m」ダウンロード

 また、elseifコマンドでnが小数の場合(fixコマンドで整数化した数値が元のnと等しくない。「~=」は論理演算で「等しい」の否定で、両辺が等しくない場合1を、等しい場合0を返します)、エラーとなり「expecting integer argument」(整数の引数を見込む)と表示させるようにしています。

 ex308.mを動作させると、n=0であるため、最初のifコマンドのerrorコマンドが動作し、先ほどの「zero is neither even nor odd」(0は偶数でも奇数でもない)というコメントが表示されていることが分かります。

In docli(builtin) at line 4
    In base(base)
    In base()
    In global()
Error: zero is neither even nor odd

 次回は入出力変数を持つプログラム、関数mファイルについて説明します。

参考文献

  • 「MATLABハンドブック」小林一行著、秀和システム刊
  • 「はじめてのFreeMat」赤間世紀著、工学社刊

無償ソフトで技術計算しよう

FreeMat

無償の工学計算ソフトでも、かなり高度な計算ができる!


筆者紹介

伊藤孝宏(いとう・たかひろ)

1960年生。小型モーターメーカーのエンジニア。博士(工学)。専門は流体工学、音・振動工学。現在は、LabVIEWを使って、音不良の計測・診断ソフト、特性自動検査装置などの開発を行っている。




前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.