FC2ブログ

# ベイリー法 Bailey's Method
# 引数 予想される真の解に近いと思われる値 方程式 ($Solution, \@Equations)
# 戻り値 ベイリー法 ($BaileysMethod)
sub BAILEYSMETHOD{
my ($Solution, $Equations) = @_;
my $BaileysMethod = 0;
my @FirstDerivative = ();
my @SecondDerivative = ();
my $X = $Solution;
my $PrevX = 0;
my $Limit = 100;
my $Epsilon = 1.0e-10;
my $Degree1 = @$Equations - 1;
my $Degree2 = @$Equations - 2;
my $Degree3 = @$Equations - 3;

# 配列数と解の確認
if(($Degree3 < 0) || ($Solution == 0)){
return 0;
}

# 1階微分
for(my $i = 0; $i < $Degree1; $i++){
$FirstDerivative[$i] = ($Degree1 - $i) * $$Equations[$i];
}
# 2階微分
for(my $i = 0; $i < $Degree2; $i++){
$SecondDerivative[$i] = ($Degree2 - $i) * $FirstDerivative[$i];
}

# 計算
for(my $i = 0; $i <= $Limit; $i++){
my $Sum1 = 0;
my $Sum2 = 0;
my $Sum3 = 0;

# 方程式
for(my $j = 0; $j <= $Degree1; $j++){
$Sum1 += $$Equations[$j] * ($X ** ($Degree1 - $j));
}
# 1階微分
for(my $j = 0; $j <= $Degree2; $j++){
$Sum2 += $FirstDerivative[$j] * ($X ** ($Degree2 - $j));
}
# 2階微分
for(my $j = 0; $j <= $Degree3; $j++){
$Sum3 += $SecondDerivative[$j] * ($X ** ($Degree3 - $j));
}

# 近似解
$PrevX = $X;
$X = $X - ($Sum1 / ($Sum2 - (($Sum1 * $Sum3) / (2 * $Sum2))));
# ベイリー法 Bailey's Method
$BaileysMethod = $X;

# 収束判定
last if(abs($X - $PrevX) < $Epsilon);
}

return $BaileysMethod;
}



x^2 - 2 = 0

my $Solution = 1;
my @Equations = (1,0,-2);
my $Bailey = &BAILEYSMETHOD($Solution, \@Equations);
print "$Bailey\n";


参考URL
Halley's method - Wikipedia, the free encyclopedia
オンライン コンパイラ/インタプリタ
テクニカル分析
プロフィール

Author:雨宮
Firefoxを使用しているので気づかなかったけど、IE6でソースコードを上手くコピーできない

5/3
携帯用ならIE6でもソースコードをコピーできる
携帯用

検索フォーム


あわせて読みたいブログパーツ
一寸先は闇 RSS