FC2ブログ
ヤコビ法

# 逐次過緩和法 SOR法 Successive Over Relaxation Method
# 引数 過緩和係数 方程式 ($RelaxationParameter, \@Equations)
# 戻り値 逐次過緩和法 SOR法 (@SuccessiveOverRelaxation)
sub SUCCESSIVEOVERRELAXATION{
my ($RelaxationParameter, $Equations) = @_;
my @SuccessiveOverRelaxation = ();
my @Approximation = ();
my $Column = $#$Equations;
my $Row = $#{$$Equations[0]};
my $Limit = $Column * 100;

# 過緩和係数と配列数の確認
if(($RelaxationParameter <= 0) || (2 <= $RelaxationParameter) || ($Column != ($Row - 1))){
return 0;
}
for(my $i = 1; $i <= $Column; $i++){
if($Row != $#{$$Equations[$i]}){
return 0;
}
}

# 近似解の初期値
for(my $i = 0; $i <= $Column; $i++){
$Approximation[$i] = 0;
}

# 計算
for(my $i = 0; $i <= $Limit; $i++){
my @PrevApproximation = @Approximation;

for(my $j = 0; $j <= $Column; $j++){
my $sum = $$Equations[$j][$Row];

# $Column = ($Row - 1);
for(my $k = 0; $k <= $Column; $k++){
next if($j == $k);

$sum = $sum - ($$Equations[$j][$k] * $PrevApproximation[$k]);
}

# 近似解
$Approximation[$j] = $sum / $$Equations[$j][$j];

# 逐次過緩和法 SOR法 Successive Over Relaxation Method
$SuccessiveOverRelaxation [$j] = $PrevApproximation[$j] + ($RelaxationParameter * ($Approximation[$j] - $PrevApproximation[$j]));
}
}

return @SuccessiveOverRelaxation;
}


ガウス・ザイデル法

# 逐次過緩和法 SOR法 Successive Over Relaxation Method
# 引数 過緩和係数 方程式 ($RelaxationParameter, \@Equations)
# 戻り値 逐次過緩和法 SOR法 (@SuccessiveOverRelaxation)
sub SUCCESSIVEOVERRELAXATION{
my ($RelaxationParameter, $Equations) = @_;
my @SuccessiveOverRelaxation = ();
my @Approximation = ();
my $Column = $#$Equations;
my $Row = $#{$$Equations[0]};
my $Limit = $Column * 100;

# 過緩和係数と配列数の確認
if(($RelaxationParameter <= 0) || (2 <= $RelaxationParameter) || ($Column != ($Row - 1))){
return 0;
}
for(my $i = 1; $i <= $Column; $i++){
if($Row != $#{$$Equations[$i]}){
return 0;
}
}

# 近似解の初期値
for(my $i = 0; $i <= $Column; $i++){
$Approximation[$i] = 0;
}

# 計算
for(my $i = 0; $i <= $Limit; $i++){
my @PrevApproximation = @Approximation;

for(my $j = 0; $j <= $Column; $j++){
my $sum = $$Equations[$j][$Row];

# $Column = ($Row - 1);
for(my $k = 0; $k <= $Column; $k++){
next if($j == $k);

$sum = $sum - ($$Equations[$j][$k] * $Approximation[$k]);
}

# 近似解
$Approximation[$j] = $sum / $$Equations[$j][$j];

# 逐次過緩和法 SOR法 Successive Over Relaxation Method
$SuccessiveOverRelaxation [$j] = $PrevApproximation[$j] + ($RelaxationParameter * ($Approximation[$j] - $PrevApproximation[$j]));
}
}

return @SuccessiveOverRelaxation;
}


参考URL
SOR法 - Wikipedia

一言
収束判定がないので意味なし
オンライン コンパイラ/インタプリタ
テクニカル分析
プロフィール

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

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

検索フォーム


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