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]));
Eigenvalues and eigenvectors of symmetric matrix.