#!/usr/bin/perl

use lib 'd:/Programs/Perl/lib';
#use lib 'd:/MyWebs/cgi-bin/lib';

use lib '/home/tkamiya/bin/lib';
use lib '/home/tkamiya/bin';

use strict;
#use warnings;
use Math::MatrixReal;
use Math::Complex;

use JFile;

my (@Hij, @E, @Vij);

my $in = JFile->new('matrix.in', 'r') or die $!;
my ($n, $eps) = Utils::Split("\\s+", $in->ReadLine());
$in->ReadLine();
for(my $i = 0 ; $i < $n ; $i++) {
	for(my $j = 0 ; $j < $n ; $j++) {
		my ($i2, $j2, $ar, $ai) = Utils::Split("\\s+", $in->ReadLine());
		$ar = 0.0 if(abs($ar) < 1.0e-6);
		$ai = 0.0 if(abs($ai) < 1.0e-6);
#print "$i2 $j2 ($i,$j) $ar $ai\n";
		$Hij[$i][$j] = $ar + i * $ai;
	}
}
$in->Close();

my $in = JFile->new('matrix.out', 'r') or die $!;
my ($n) = Utils::Split("\\s+", $in->ReadLine());
$in->ReadLine();
for(my $i = 0 ; $i < $n ; $i++) {
	my ($i2, $v) = Utils::Split("\\s+", $in->ReadLine());
	$v = 0.0 if(abs($v) < 1.0e-6);
#print "$i2($i) $v\n";
	$E[$i] = $v;
}
$in->ReadLine();
for(my $i = 0 ; $i < $n ; $i++) {
	for(my $j = 0 ; $j < $n ; $j++) {
		my ($i2, $j2, $ar, $ai) = Utils::Split("\\s+", $in->ReadLine());
		$ar = 0.0 if(abs($ar) < 1.0e-6);
		$ai = 0.0 if(abs($ai) < 1.0e-6);
#print "$i2 $j2 ($i,$j) $ar $ai\n";
		$Vij[$i][$j] = $ar + i * $ai;
	}
}
$in->Close();

print "Hij:\n";
&PrintMatrix(\@Hij);
print "Vij:\n";
&PrintMatrix(\@Vij);

for(my $i = 0 ; $i < $n ; $i++) {
	print "E[$i] = $E[$i]\n";
	for(my $j = 0 ; $j < $n ; $j++) {
		my $a = 0.0 + i * 0.0;
		for(my $k = 0 ; $k < $n ; $k++) {
			$a += $Hij[$j][$k] * $Vij[$k][$i];
#print" $i,$j,$k: a += $Hij[$j][$k] * $Vij[$k][$i] = $a\n";
		}
		printf "(%8.4f,%8.4f)[%8.4f,%8.4f] ", Re($a/$E[$i]), Im($a/$E[$i]), Re($Vij[$j][$i]), Im($Vij[$j][$i]);
#exit if($j >= 1);
	}
	print "\n";
}

exit;

sub PrintMatrix
{
	my ($pM) = @_;
	
	my $n = @$pM;
	for(my $i = 0 ; $i < $n ; $i++) {
		print "[";
		for(my $j = 0 ; $j < $n ; $j++) {
			my $v = $pM->[$i][$j];
			$v = 0.0 if(abs($v) < 1.0e-6);
			printf " (%8.4g,%8.4g)", Re($v), Im($v);
		}
		print "]\n";
	}
}
