C:\>perl -le "@S = map{rand} @S[0..9]; print \"@S\";" 0.6502685546875 0.025390625 0.410919189453125 0.35791015625 0.797760009765625 0.361724853515625 0.340911865234375 0.92474365234375 0.505035400390625 0.580718994140625 C:\>
上のようにすると大量に乱数を変数にセットできるんだな。こいつを使ってある関数g(x)、h(x)の線形結合を出力してみるんだな。
C:\>perl -le "sub f{@S=map{rand}@S[0..3]; return $S[3]*$_**3+$S[2]*$_**2+$S[1]*$_+$S[0];} for(1..10){$f=&f($_); print \"$_ $f\";}" 1 2.25576782226563 2 7.90341186523438 3 13.4155578613281 4 35.8011169433594 5 49.6056213378906 6 233.369232177734 7 120.380859375 8 267.388641357422 9 58.6871643066406 10 589.035797119141 C:\>
上の例が最大にスクリプトを長く書いた例で、これ以上は入力できないんだな。これを改良してより多くの独立な変数を使うことを考えるんだな。
C:\>perl -le "sub f{($a,$b,$c,$d)=map{rand}@S[0..9]; return $d*$_**3+$c*$_**2+$b*$_+$a;} for(1..10){$f=&f($_); print \"$_ $f\";}" 1 1.01864624023438 2 2.65805053710938 3 31.4973754882813 4 5.29510498046875 5 135.414398193359 6 117.433990478516 7 191.104675292969 8 240.653472900391 9 701.856262207031 10 420.729797363281 C:\>
最初の改良例はこんな感じなんだな。確かにf(x)の表記は単純になったけど、その分だけmap{}から受ける配列が複雑になってプラマイゼロの内容なんだな。どうにかしてもう一つ余分な変数上の例では$eもう一つ上の例では$S[4]をどうにかしたいんだな。