(教科書未記載)モデル記述言語CASTの「算術関数」
本家のブログから収集しました.09.08.21 更新

 教科書p.152図表4.3に追加してもいいかも.
  mのn乗はpow(m,n), 平方根はsqrt(m)
x:=pow(m,n)で,mのn乗がxに代入されます.
  例)pow(2,3)=8 です.
x:=sqrt(m)で,mの平方根がxに代入されます.
  例)sqrt(2)=1.4142 です.

  指数関数exp(x)と対数関数log(x)
底(てい)がe=2.718281..のときの指数関数と対数関数(自然対数)です.
   y=exp(x)は,eのx乗をyに代入します.
   y=log(x)は,eを何乗したらxになるかを求め,yに代入します.
xはリスト(例 x=[[10,20],[30,40]])でもいいみたい.

  三角関数 sin( ), cos( ), tan( )
角度の単位はラジアンとして,
三角関数の sin( ), cos( ), tan( ) も使えるようです.

  整数部分を抜き出す関数floor()
小数点以下を切り捨て,整数部分を抜き出す関数はfoor( )です.
floor(4.82)=4 となります.
言い換えると,その数を超えない最大の整数のことです.

【更新】 一様分布の乱数を発生させる myrandom(r)
説明(これだけは特殊です)
 myrandom(r)で,変数rに0以上1未満の数がランダムに代入されます.
一様分布になります.

使い方
 小数点以下を切り捨てる関数floorとかけ算を使うと,たとえば,
  myrandom(r),
  x:=floor(7*r)+1,
で,変数xに1から7までの整数がランダムに代入されるでしょう.

### 関数にしたければ,ユーザ関数randを作ります.
func([rand]);
rand()=r <-> myrandom(r);
こうしておけば,r:=rand()でrに乱数が代入されます.

【訂正】 範囲指定は project(x,["r",m,n]) です
  m番目からn番目まで範囲(range)を指定して射影をとるのは,
  project(x, ["r",m,n])でした."r"が必要です.
  <教科書p.154の記述は誤りです>

例:"r"があると,m番目からn番目まで抽出されます.
  y:=project([5,6,7,8,9],["r",2,4]) とすると,y=[6,7,8]となります.
例:"r"がないときは,m番目とn番目が抽出されます.
  y:=project([5,6,7,8,9],[2,4]) とすると,y=[6,8]となります.

  invproject(- , x, "l")の l は小文字のエル
教科書 p.155「図表4.5つづき」の第2行の中にある,
関数invprojectは値xの位置をすべて求めます.
A=[1,2,7,7]のとき,invproject(A , 7, "l")の値は,[3,4]です.

ただし,invproject(- , x, "l")の l は,数字の1ではありません.
返り値がリストlistなので,
その頭文字のアルファベットの小文字のエルです.
間違いではありませんが,間違えやすいので書いておきます.

【追加】 部分行列を抜き出す projectMatrix
書式 N:=projectMatrix(M,x1,y1,x2,y2)
意味 行列Mのセル(x1,y1)からセル(x2,y2)までの長方形の部分行列Nを作成する.
例  N:=projectMatrix([[1,2,3],[4,5,6],[7,8,9]],2,2,3,3) のとき,N=[[5,6],[8,9]] となる.

【追加】 行列の値を変更する replaceMatrix
書式 N:=replaceMatrix(M,[[x1,y1,v1],[x2,y2,v2],...])
意味 行列Mのxi行yi列の値をviに変更した行列Nを作成する.
例  N:=replaceMatrix[[1,1,1],[2,2,2],[3,3,3]],[[1,2,3],[2,3,4],[3,1,7]] のとき,N=[[1,3,1],[2,2,4],[7,3,3]] となる.