21 lines
736 B
Perl
21 lines
736 B
Perl
# 20240920 Perl programming solution
|
|
|
|
use strict;
|
|
use warnings;
|
|
use Math::GSL::Matrix;
|
|
use Math::GSL::Linalg qw/gsl_linalg_SV_decomp/;
|
|
|
|
my $M = Math::GSL::Matrix->new(2, 2);
|
|
$M->set_elem(0,0,3)->set_elem(0,1,0)->set_elem(1,0,4)->set_elem(1,1,5);
|
|
|
|
my $V = Math::GSL::Matrix->new(2, 2);
|
|
my ($S, $work) = ( Math::GSL::Vector->new(2), Math::GSL::Vector->new(2) );
|
|
|
|
gsl_linalg_SV_decomp($M->raw, $V->raw, $S->raw, $work->raw);
|
|
|
|
print "U factor:\n";
|
|
for my $i (0 .. $M->rows - 1) { print join(", ",$M->row($i)->as_list),"\n" }
|
|
print "singular values:\n";
|
|
print join(", ", map { sprintf("%.10g", $_) } $S->as_list), "\n";
|
|
print "Vt factor:\n";
|
|
for my $i (0 .. $V->rows - 1) { print join(", ",$V->row($i)->as_list),"\n" }
|