maxima入門

条件分岐(if)

maximaでの条件分岐の処理の仕方を説明します。
条件分岐とは、ある条件の時はこの処理を行うといった処理のことです。
条件分岐にはifを使います。
ifの書式は次の3種類です。

ifの書式

if 条件1 then 処理 if 条件1 then 処理1 else 処理2 if 条件1 then 処理1 elseif 条件2 then 処理2 ... else 処理n
最初の形式は条件1が満たされたときだけ処理を実行します。 二番目の形式は、条件1が満たされた場合は処理1を、それ以外は処理2を実行します。 最後の形式は条件1が満たされれば処理1、それ以外で条件2が満たされれば処理2を、 と続き、どの条件も満たされなければ処理nを実行します。 条件の箇所は真偽値(true/false)である必要があります。 例えば比較演算子の結果は真偽値になります。

if文の例

(%i1) if true then print(1) 1 (%o1) 1 (%i2) if false then print(1) (%o2) false (%i3) x:10; (%o3) 10 (%i4) if x>5 then "large" else "small"; (%o4) "large" (%i5) if x < 0 then "minus" elseif x < 5 then "small" elseif x < 10 then "medium" else "large"; (%o5) "large" (%i6) /* 符号関数sgn(x)を実装する */ sgn(x) := if x>0 then 1 elseif x=0 then 0 else -1; (%o6) sgn(x):=if x>0 then 1 elseif x=0 then 0 else −1 (%i7) sgn(10) (%o7) 1 (%i8) sgn(0) (%o8) 0 (%i9) sgn(-5) (%o9) -1
print関数は、指定された値を画面に出力する関数です。 例では条件がtrueの時だけ結果が出力されているのがわかります。 最後の例のように、関数定義と組み合わせると より実用的になります。 最後に、ifのために色々な条件をテストする関数が用意されていますので これについて説明します。

条件

x = y xとyが等しいか x # y xとyが異なっているか x > y xがyより大きいか x >= y xがy以上であるか x < y xがyより小さいか x <= y xがy以下か oddp(x) xが奇数か evenp(x) xが偶数か integerp(x) xが整数か nonintegerp(x) xが整数以外か primep(x) xが素数か numberp(x) xが文字リテラル、有理数、浮動少数点数、多倍長浮動少数か(%e,%i,%pi,sqrtなど除く) constantp(x) xが定数か(%e,%i,%pi,sqrtなど含む) ratnump(x) xが有理数か floatnump(x) xが多倍長でない少数か bfloatp(x) xが多倍長少数か listp(x) xがリストか matrixp(x) xが行列か setp(x) xがセットか emptyp(x) x(リストや集合)が空か member(x,list) xがlistに含まれているか
数が多いのでいくつかの例をあげるにとどめます。

様々な条件を扱う

(%i1) oddp(10); (%o1) false (%i2) if evenp(10) then print("even"); even (%o2) "even" (%i3) ratnump(3/4); (%o3) true (%i4) floatnump(0.345); (%o4) true (%i5) matrixp(matrix([1,1],[1,1])); (%o5) true (%i6) member(10,[1,3,5,7,9]); (%o6) false
論理演算子もあります。 これは真偽値同士を組み合わせて使います。

論理演算子

x and y xとyがともにtrueか x or y xとyのどちらかがtrueか not x xがtrueならfalse,xがfalseならtrue x equal y xとyが同じ真偽値か x notequal y xとyが異なった真偽値か

論理演算子の例

(%i1) evenp(10) and integerp(10); (%o1) true (%i2) if not(primep(10)) then "composite number" (%o2) "composite number"
since 2014/03/23