MCPcopy Create free account
hub / github.com/NanoComp/meep / sym_matrix_positive_definite

Function sym_matrix_positive_definite

scheme/structure.cpp:74–93  ·  view source on GitHub ↗

Returns whether or not V is positive-definite. */

Source from the content-addressed store, hash-verified

72
73/* Returns whether or not V is positive-definite. */
74int sym_matrix_positive_definite(symmetric_matrix *V) {
75 double det2, det3;
76 double m00 = V->m00, m11 = V->m11, m22 = V->m22;
77
78#if defined(WITH_HERMITIAN_EPSILON)
79 scalar_complex m01 = V->m01, m02 = V->m02, m12 = V->m12;
80
81 det2 = m00 * m11 - CSCALAR_NORMSQR(m01);
82 det3 = det2 * m22 - m11 * CSCALAR_NORMSQR(m02) - CSCALAR_NORMSQR(m12) * m00 +
83 2.0 * ((m01.re * m12.re - m01.im * m12.im) * m02.re +
84 (m01.re * m12.im + m01.im * m12.re) * m02.im);
85#else /* real matrix */
86 double m01 = V->m01, m02 = V->m02, m12 = V->m12;
87
88 det2 = m00 * m11 - m01 * m01;
89 det3 = det2 * m22 - m02 * m11 * m02 + 2.0 * m01 * m12 * m02 - m12 * m12 * m00;
90#endif /* real matrix */
91
92 return (m00 > 0.0 && det2 > 0.0 && det3 > 0.0);
93}
94
95static meep::ndim dim = meep::D3;
96

Callers 1

eff_chi1inv_rowMethod · 0.70

Calls

no outgoing calls

Tested by

no test coverage detected