eigSymmetric

Eigenvalues and eigenvectors of symmetric matrix.

eigSymmetric
(
Flag!"computeVectors" cv = Yes.computeVectors
SliceKind kind
Iterator
)
(
Slice!(kind, [2], Iterator) a
,
char store = 'L'
)

Return Value

Type: auto

Examples

import mir.ndslice.slice: sliced;
import mir.ndslice.topology: universal, map;
import mir.ndslice.dynamic: transposed;
import std.math: approxEqual;

auto a = [
    1.0000, 0.5000, 0.3333, 0.2500,
    0.5000, 1.0000, 0.6667, 0.5000,
    0.3333, 0.6667, 1.0000, 0.7500,
    0.2500, 0.5000, 0.7500, 1.0000].sliced(4, 4);

auto eigr = a.eigSymmetric;

assert(eigr.values.approxEqual([0.2078,0.4078,0.8482,2.5362]));

auto test = [
     0.0693, -0.4422, -0.8105, 0.3778,
    -0.3618,  0.7420, -0.1877, 0.5322,
     0.7694,  0.0486,  0.3010, 0.5614,
    -0.5219, -0.5014,  0.4662, 0.5088]
        .sliced(4, 4)
        .universal
        .transposed;

foreach (i; 0 .. 4)
    assert(eigr.vectors[i].approxEqual(test[i]) ||
        eigr.vectors[i].map!"-a".approxEqual(test[i]));

Meta