データの加工

- 概要
- 数式変換の定数
- 数式変換の変数
- 数式変換の演算子
- 数式変換の関数
- 数式変換の関数・演算子の優先順位
- 数式変換の使用例

概要

> 描画は隣接平均, 数式変換などデ−タの加工を行った後に行われます。 グラフを作成する際その処理手順を意識することが重要な場合があります。 以下にデ−タの流れを示します。
> データファイル
> ↓
> 数式変換
> ↓
> マスクされたデ−タを削除
> ↓
> 移動されたデ−タを移動
> ↓
> 隣接平均
> ↓
> [曲線の補間係数, 最小二乗フィットの係数を求める]
> ↓
> 出力(グラフ描画)
> ロググラフを作成する場合, 曲線の補間はデ−タを対数変換した後に行われるので通常の線形グラフとロググラフでは結果が異なります。 最小二乗法に関してはロググラフでも通常の線形グラフと同じ係数を求めます。

数式変換で使用できる定数

> 数値 | 数値定数(1, 2.0, 3.0E10等)
> PI | 円周率
> E | 自然対数の底
> EULER | オイラ−の定数
> NAN | 欠損デ−タ エラー表示
> UNDEF | 欠損デ−タ エラー非表示
> CONT | 欠損データ (データ線は結合)
> BREAK | 欠損データ (データ線は分断)
> NUM | デ−タの個数
> MINX | (X) column の生デ−タの最小値
> MAXX | (X) column の生デ−タの最大値
> MINY | (Y) column の生デ−タの最小値
> MAXY | (Y) column の生デ−タの最大値
> SUMX | (X) column の生デ−タの和
> SUMY | (Y) column の生デ−タの和
> SUMXX | (X) column の生デ−タの二乗和
> SUMYY | (Y) column の生デ−タの二乗和
> SUMXY | (X) column, (Y) column の生デ−タの積和
> AVX | (X) column の生デ−タの平均
> AVY | (Y) column の生デ−タの平均
> SGX | (X) column の生デ−タの標準偏差
> SGY | (Y) column の生デ−タの標準偏差
> FIRST | diagonal, errorbar など一行のデータで2回の変換が行われる場合、1回目の呼出しで真(=1)、2回目の呼出しで偽(=0)

数式変換で使用できる変数

> X | (X)column の生のデ−タ
> Y | (Y)column の生のデ−タ
> %0 | デ−タを読み込んだ順番に1から番号をつけたときの値
> %1〜%999 | 同一行中 1〜999 カラムの生デ−タ
> %D | データファイルの番号
> %Fxx1〜%Fxx999 | データファイル xx の同じ行の 1〜999 カラムの生デ−タ

数式変換で使用できる演算子

> - + | 負(正)の数値
> + - * / | 四則演算
> \ | 実数乗算の乗余
> ^ | ベキ乗
> ! | 階乗(引数は167 以下の正の整数)
> ( ) | 括弧(20 重まで)
> = | 式の終端(省略可能) 別の式を後に続けることが可能

数式変換で使用できる関数

> 変換関数

> ABS(x) | 絶対値
> SIGN(x) | 正負の符号
> INT(x) | 0に向かって切捨てた整数部
> GAUSS(x) | ガウスの記号[ ] ([n]はnを越えない最大の整数)
> FRAC(x) | 小数部
> ROUND(x) | 四捨五入した整数部
> MIN(x,y) | x, y の小さい方
> MAX(x,y) | x, y の大きい方

> 初等関数

> SQR(x) | 二乗
> SQRT(x) | 平方根
> EXP(x) | 指数(x≦690)
> LN(x) | 自然対数
> LOG(x) | 常用対数
> SIN(x) | サイン
> COS(x) | コサイン
> TAN(x) | タンジェント
> ASIN(x) | 逆サイン
> ACOS(x) | 逆コサイン
> ATAN(x) | 逆タンジェント
> SINH(x) | ハイパボリックサイン
> COSH(x) | ハイパボリックコサイン
> TANH(x) | ハイパボリックタンジェント
> ASINH(x) | 逆ハイパボリックサイン
> ACOSH(x) | 逆ハイパボリックコサイン
> ATANH(x) | 逆ハイパボリックタンジェント

> 特殊関数

> RAND(x) | 0≦RAND(x)＜x (x＞0のとき)の乱数
> THETA(x) | 階段関数(x≧0 のとき 1, それ以外は 0 )
> DELTA(x) | クロネッカ−のδ(x=0 のとき 1, それ以外は 0)
> GAMMA(x) | ガンマ関数 Γ(x)
> ICGAM(m,x) | 不完全ガンマ関数 Γ(μ,x)
> ERFC(x) | 誤差関数 Erfc(x)
> QINV(x) | 誤差関数 Erfc(x) の逆関数
> EI(x) | 積分指数関数 Ei(x)
> BETA(x,y) | ベ−タ関数 B(p,q)
> JN(n,x) | 第1種n次ベッセル関数
> YN(n,x) | 第2種n次ベッセル関数
> PN(n,x) | ルジャンドル多項式
> LGN(n,a,x) | ラゲ−ル倍多項式
> HN(n,x) | エルミ−ト多項式
> TN(n,x) | チェビシフ多項式
> MJD(year,month,day) | 修正ユリウス日(year, month, day はグレゴリオ暦)

> 論理関数 0を偽, それ以外を真とする。

> EQ(x,y) | x＝y のとき真(=1)
> NEQ(x,y) | x≠y のとき真(=1)
> GE(x,y) | x≧y のとき真(=1)
> GT(x,y) | x＞y のとき真(=1)
> LE(x,y) | x≦y のとき真(=1)
> LT(x,y) | x＜y のとき真(=1)
> NOT(x) | x＝0 のとき真(=1)
> OR(x,y) | (x≠0) or (y≠0) のとき真(=1)
> AND(x,y) | (x≠0) and (y≠0) のとき真(=1)
> XOR(x,y) | (x≠0) xor (y≠0) のとき真(=1)

> その他の関数

> SUM(x) | 積算(一つの数式で 10 個まで)
> DIF(x) | 差分(一つの数式で 10 個まで)
> M(n,x) | 引数を第nメモリ−に代入する(n=0〜19)
> RM(n) | 現在の第nメモリ−の値(n=0〜19)
> F(x,y,z) | ユーザ定義関数
> G(x,y,z) | ユーザ定義関数
> H(x,y,z) | ユーザ定義関数
> COLOR(0,x) | R値を X (0≦X＜256)に設定
> COLOR(1,x) | G値を X (0≦X＜256)に設定
> COLOR(2,x) | B値を X (0≦X＜256)に設定
> COLOR(3,x) | RGB値を X (0≦X＜256)に設定
> RGB(r,g,b) | 色のRGB値をそれぞれ r, g, b (0≦r,g,b≦1)に設定
> HSB(h,s,b) | 色のHSB値をそれぞれ h, s, b (0≦h,s,b≦1)に設定
> MARKSIZE(x) | マークのサイズをXに設定
> MARKTYPE(x) | マークの種類をXに設定
> IF(x,ex1,ex2) | X≠0のときex1, x=0のときex2 (ネストは20まで)
> FOR(m,begin,end,step,ex) | 第mメモリの値がbeginからendになるまでstepでexを繰り返す

関数・演算子の優先順位

> 高 | E (指数表記)
> ↑ | () (括弧)
> | - +(負(正)の符号)
> | 関数
> | ^ !
> | * / \
> ↓ | + -
> 低 | =

数式変換の使用例

- = 使用例
  = は式の終端を示しますが、さらに続けて別の式を書くことができます。 式の値は一番最後の式の値になります。 例えば、長い式が何度も現れるときメモリ関数と組み合わせて

  > M(0,...式...)= ... RM(0) .... =

  のようにすれば同じ式は１度書くだけですみます。また式最後の = は省略できます。
- メモリ関数 M(), RM() 使用例
  M() はメモリへの代入、RM() は読みだしです。 またメモリはデ−タファイル先頭から最後まで有効です(ただし，X, Yの変換式で独立)。 例えば

  > M(0,RM(0)+Y)=

  とすることで Y の積算グラフを描画することができます。
- 関数 DIF() 使用例
  関数 DIF() は微分でなく差分を返す関数です。 現在のデ−タがデ−タファイル中 n 番目としそれを Y(n) で表すとすると

  > DIF(Y)=Y(n) - Y(n-1)

  です。これを用い簡単に微分近似値を求めるには

  > DIF(Y)/DIF(X)

  とします。

  > DIF(Y)/DIF(X)は {Y(n)-Y(n-1)} / {X(n)-X(n-1)} になります。

  この時、Xの変換数式を

  > X-DIF(X)*0.5

  としてXを"現在のデ−タと一つ前のデ−タの中間値"としておいた方がより真に近いグラフが得られると思われます。

  > X変換式: X-DIF(X)*0.5 (これは { X(n-1)+X(n) }*0.5 になります)
  > Y変換式: DIF(Y)/DIF(X) (これは { Y(n)-Y(n-1) } / { X(n)-X(n-1) } になります)

  > DIF() は現在のデ−タと一つ前のデ−タとの差分を返しますから、Y-DIF(Y) とすることで一つ前のデ−タを取り出すことができます。 同様に Y-DIF(Y)-DIF(Y-DIF(Y)) で2つ前のデ−タを取り出すことができます。 Y-DIF(Y)-DIF(Y-DIF(Y))-DIF(Y-DIF(Y)-DIF(Y-DIF(Y)))は3つ前のデ−タです．

  > 一番初めの DIF() の戻り値は"不定"です．このため，式全体の値も"不定"となり、結果としてデ−タの個数は1つ減ります(一番初めのデ−タに差分は存在しない)。 また DIF() をいくつも含む式では、全ての DIF() が初期化されるまで式全体の値は"不定"です。 例えば DIF() をネストして DIF(DIF()) のように使った場合、一番初めのデ−タでは内側の DIF() が初期化されその戻り値は不定の為、外側の DIF() の初期化は行われません。 外側の DIF() が初期化されるのは 2番目のデ−タの時です。 従ってデ−タの個数は2つ減ることになります。

- 関数 SUM() 使用例
  関数 SUM() は積算を返す関数です。 現在のデ−タが n 番目としそれを Y(n) で表すとすると

  > SUM(Y)=Σ Y(n) (n=1..n)

  これを用い簡単に積分近似値を求めるには

  > SUM(Y*DIF(X))

  とします。

  > SUM(Y*DIF(X)) は Σ Y(n)*{ X(n)-X(n-1) } (n=1..n) になります。

  また、台形公式を用いて積分近似値を評価したい場合

  > SUM(0.5*(2*Y-DIF(Y))*DIF(X))

  とします。

  > SUM(0.5*(2*Y-DIF(Y))*DIF(X)) は Σ(Y(n-1)+Y(n))/2*{X(n)-X(n-1)} (n=1..n) になります。

  さらに積分の上限(b)、下限(a)を指定したい場合は階段関数 THETA() を用い

  > SUM(0.5*(2*Y-DIF(Y))*DIF(X)*THETA(X-a)*THETA(b-X))

  とします。IF() を使って

  > IF(AND(GE(x,a),LE(x,b)),INTEG(0.5*(2*Y-DIF(Y))*DIF(X)),0)

  としても可能です。
- 関数 IF() 使用例
  IF(x,ex1,ex2) は x が真(<>0)のとき ex1 を，偽(=0)のとき ex2 を返す関数です。 x には論理関数を使うと便利です。例えば次の式

  > IF( LT(x,0), 0, SQRT(x) )

  は x<0 のとき 0、x>=0 のとき√x を返す関数になります。また必ず ex1, ex2 どちらか一方しか評価されません。 例えば

  > IF( EQ(%00,1), M(0,値), ...式... )

  のような使い方をしたとき M(0,値) は EQ(%00,1) が真のとき(すなわちデ−タの最初)だけ実行されるので、メモリ関数の初期化に使えます。
- 関数 MARKSIZE(), COLOR() 使用例
  MARKSIZE()、COLOR()関数は数学関数では無く、それぞれプロットされたマークのサイズ、色を指定する関数です。 例えば、(x,y,z) の 3 カラムから成るデータファイルがあり、マークのサイズを z の値で変更したいような場合には

  > MARKSIZE(%03)

  とします。ただこれですと、プロットされるデータも %03 となりますので、前述の = を使って

  > MARKSIZE(%03)=Y

  とするのが正しい使い方です。 COLOR()関数も同様で

  > COLOR(3,%03)=Y

  のように使います。