遅行スパンクラス

遅行スパンクラスファイル作成 その4

遅行スパンクラスファイル delay_dif-cla-gra.php の各メソッドを作り込んでいきます。
作成ファイル内容は、
63Pear Village に戻り
左サイドナビ「遅行スパンクラス」の中の
遅行スパンクラス PHP ファイル
から見てください。
遅行スパンクラスファイル各メソッドの作成の流れについてはフロ-チャ-トを 遅行スパンクラスファイル作成 から見てください。
ここまで、比較期間の平均値を 遅行スパンクラスファイル作成 その3で算出してきました。
引き続き、遅行スパンクラス メソッド function dif_arry を作成していきます。

偏差σ(m)を求める

基本期間 h とここから h 以上離れた期間を Δavg(m) を補正しながら比較しその偏差σ(m) を求めます。


偏差σ(m)

k = m + n - 1
m:(h+1) ・・・・・・ (N-h)
n: 1 ・・・・・ h


中ル-プ-3 偏差σ(m)の計算

$difs は偏差σ^2 の仮の値を入れる変数です。
初期値は 0 とします。
for($j1 = $n1; $j1 <= $n1l; $j1++){
 $difs[$j1+1] = 0;
・・・・小ル-プ-3.1・・・・
 $difs[$j1+1] =
  sqrt($difs[$j1+1]/$n1);//σ
}
合計偏差σ^2 を期間で割って平方根をとって偏差σを算出します。

小ル-プ-3.1 偏差σ(m)の2乗合計値の計算

$j1 の初期値は比較期間ですから、初期比較期間+1 を起点mとし、比較期間を対象に偏差σを計算し
σ(m):$difs[$j1+1]
に格納します。


 for($k1 = 1;$k1 <= $n1; $k1++){
 //小ル-プ-3.1 START
  $dif0 = $owa100[$k1+$j1][5]
   -$owa100[$k1][5]-$DAvg_m[$j1+1];
  $difs[$j1+1] =
   $dif0 * $dif0 + $difs[$j1+1];
 }//小ル-プ-3.1 END

例えば、$j1 = 10 とすると最初は $k = 1 ですから、
$owa100[$k1 + $j1][5]
 = $owa100[11][5]
 → 最新から11番目の終値
$owa100[$k1][5] = $owa100[1][5]
 → 最新の終値
$DAvg_m[$j1+1] = $DAvg_m[11]
 → 比較期間の平均値 Avg_m[11] と基本比較期間の平均値 Avg(1) との差分
から偏差 $dif0 を求めこれを2乗し、順次 $difs[$j1+1] に合計していきます。

偏差σは最小か?

小ル-プ-3.1 偏差σ(m)の2乗合計値の計算が終わったら これを期間で割って平方根をとって偏差σを算出します。
$difs[$j1+1] = sqrt($difs[$j1+1]/$n1);//σ
そして、この偏差σの値がここまで計算してきたσ値より小さかったら、 その時の暫定の最小値となる条件を一旦保存します。
$mi:最小σ
$mi_j:最小となる遅行数
$mi_n:最小となる比較期間
$mi_DA:最小となるΔAvg
$mi_nl:
 最終比較足(デ-タ数-期間)
$mi_Avg:最小となる基本Avg
$mi_Avg_m:
 最小となるh期間の比較平均値


 if($difs[$j1+1] < $mi){
  $mi = $difs[$j1+1];
  $mi_j = $j1+1;
  $mi_n = $n1;
  $mi_DA = $DAvg_m[$j1+1];
  $mi_nl = $n1l;
  $mi_Avg = $Avg;
  $mi_Avg_m = $Avg_m[$j1+1];
 }

計算進捗過程表示?

もし計算進捗過程を表示することになっていれば仮の最小値の条件値を表示します。
$delay['disp'] は、結果表示形式指示値で「1」ならば、途中経過含め全表示します。
$this -> disp = $delay['disp'];
ですから


 if($this -> disp == 1){
  echo "<br>σmin =".round($mi,3);
  echo "<br>遅行値 =".$mi_j;
  echo "<br>期間 =".$mi_n;
  echo
   "<br>最終比較足(デ-タ数-期間) = "
   .$mi_nl;
  echo "<br>基本Avg = "
   .round($mi_Avg,3);
  echo "<br>Avg_m = "
   .round($mi_Avg_m,3);
  echo "<br>ΔAvg ="
   .round($mi_DA,3)
   ."<br>";
 }

なお、round($mi_Avg,3) は PHP関数で数値を四捨五入します。
括弧内最後の数値 3 は、小数点以下の桁数を表します。
すなわち $mi_Avg を四捨五入し、小数点以下 3 桁の数値に変換しています。

大ル-プに戻る

ル-プ最後の処理です。
大ル-プの最初に戻る訳ですから、比較期間 $n1 が +1 されるので、あらかじめ
$n1l → デ-タ行数-比較期間数
を -1 して
$n1l = $n1l-1;
として、大ル-プの最初に帰ります。

CSV ファイルのデータ数の正常性確認

CSV ファイルから受取ったデ-タ数が正常か判定します。
異常値ならばエラ-表示します。
try~catch 命令で例外処理を実行します。
この例外処理は PHP関数 PDO クラスで、例外メッセ-ジを出力してくれる getMessage() メソッド により実行します。
書式は以下の通りです。
try{
 通常はif文等で発生例外予測条件を記入
}
 $e のところにエラ-文を設定して
 throw new Exception($e);
}catch(Exception $e){
 例外クラスの呼出し、インスタンスは不要
 echo $e->getMessage();
}
なお、例外処理が発生したとしてもプログラム処理は継続して実行します。
catch ブロックが賢く処理してくれます。


 try{
  if ($last_l < 101){
   throw new Exception(
   '<br>エラ--デ-タ数は 100 以上必要です<br>'
    );
  }
  if ($this -> limit > $last_l){
   throw new Exception(
   'エラ--グラフの足数は
    デ-タ数までにしてください<br>');
  }
 }catch(Exception $e) {
   echo $e->getMessage();
 }
 return;
 }

これで、遅行スパンクラス メソッド function dif_arry の作成は完了です。 引き続き、結果表示メソッド function res_dis を作成していきます。


遅行スパンクラスファイル作成 その5 に進む
遅行スパンクラスファイル作成 その3 に戻る
遅行スパンクラスファイル作成 その2 に戻る
遅行スパンクラスファイル作成 に戻る
遅行スパンクラス概要 に戻る

63PearVillage に戻る