Eigenvalues and Eigenvectors

Eigenvalues and Eigenvectors Computing with Rubix

Using Rubix ML, we can also compute eigenvalues and eigenvectors.

Rubix ML Example:

 
<?php

use Rubix\ML\Datasets\Labeled;
use 
Rubix\ML\Transformers\ZScaleStandardizer;
use 
Rubix\ML\Datasets\Unlabeled;
use 
Tensor\Matrix;

try {
    
$samples = [
        [
41],
        [
23],
    ];

    
// Create Matrix directly from samples
    
$matrix Matrix::quick($samples);

    
$eig $matrix->eig(false);

    echo 
"Eigenvalues:\n";
    echo 
'[' implode(', '$eig->eigenvalues()) . "]\n";

    
// After getting the results, to get non-normalized vectors:
    
$eigenvectors $eig->eigenvectors()->asArray();

    
// Scale first eigenvector to get [1, 1]
    
$eigenvectors[0] = array_map(function ($x) {
        return 
$x sqrt(2);
    }, 
$eigenvectors[0]);

    
// Scale second eigenvector to get [2, -1]
    
$eigenvectors[1] = array_map(function ($x) {
        return 
$x sqrt(5);
    }, 
$eigenvectors[1]);

    echo 
"\nEigenvectors:\n";
    
$rows = [];
    foreach (
$eigenvectors as $vector) {
        
$rows[] = '[' implode(', '$vector) . ']';
    }
    echo 
'[' implode(', '$rows) . ']';

} catch (
Exception $e) {
    echo 
'Error: ' $e->getMessage() . PHP_EOL;
}