73 const T A = T(r2 * (r1 - one) + one);
74 const T B = T(r1 * r2 - r2 + one);
75 if (A == zero || B == zero)
77 "mamap2m_can1_coefficients: the canonical denominators vanish at this (r1, r2); the "
78 "marking coefficients are undefined there");
80 c.
G[0] = T(one - r1 / A);
81 c.
G[1] = T(-(r1 * (r2 - one)) / B);
82 c.
G[2] = T((r1 * r2) / B);
83 c.
G[3] = T((r1 * (r1 - one)) / A - r1 + one);
84 c.
G[4] = T(-(r1 * (r1 - one) * (r2 - one) * (r2 - two)) / B);
85 c.
G[5] = T((r1 * r2 * (r1 - one) * (r2 - one)) / B);
86 c.
G[6] = T((r1 * r1 * (r2 - one) * (r2 - one)) / A);
87 c.
G[7] = T(-(r1 * r2 * (r1 + one) * (r2 - one)) / B);
90 c.
G[8] = T((r1 * r2 * r2) / B);
91 c.
G[9] = T(h1 - (h1 * r1) / A);
92 c.
G[10] = T(-(r1 * (r2 - one) * (h1 + h2 - h1 * r2)) / B);
93 c.
G[11] = T((r1 * r2 * (h1 + h2 - h1 * r2)) / B);
94 c.
G[12] = T(((h1 + h2 * r1) * (r1 - one) * (r2 - one)) / B);
95 c.
G[13] = T(-(r1 * (h1 + h2 * r1) * (r2 - one)) / B);
96 c.
G[14] = T((h2 * r1 * r2) / B);
98 const T t1 = T(h1 - h2 + h2 * r1);
100 c.
U[1] = T(-B * (two * h1 - h1 * r1 - two * h1 * r2 + three * h2 * r1 - h2 * r1 * r1 +
101 h2 * r1 * r1 * r2 + h1 * r1 * r2 - h2 * r1 * r2));
102 c.
U[2] = T(r1 * (r2 - one) * t1 * t1);
103 c.
U[3] = T(B * (h2 * h2 * r1 - h1 * h1 * r2 + h1 * h1 + h1 * h2 * r1 - h1 * h2 * r1 * r2));
104 c.
U[4] = T(-r1 * (r2 - one) * B * t1);
105 c.
U[5] = T(r1 * (r2 - one) * (h1 - h1 * r2 + h2 * r1) * t1);
106 const T t2 = T(h2 - h1 * r2);
108 c.
U[7] = T(-B * (two * h1 - two * h1 * r2 + h2 * r1 - h1 * r1 * r2 * r2 + h1 * r1 * r2 +
110 c.
U[8] = T(r1 * t2 * t2 * (r2 - one));
111 c.
U[9] = T(B * (h2 * h2 * r1 - h1 * h1 * r2 + h1 * h1 + h1 * h2 * r1 - h1 * h2 * r1 * r2));
112 c.
U[10] = T(-r1 * t2 * (r2 - one) * B);
113 c.
U[11] = T(r1 * t2 * (r2 - one) * (h1 - h1 * r2 + h2 * r1));
117 c.
Y[0] = T(c.
G[0] * c.
G[10] * c.
G[14] - c.
G[0] * c.
G[11] * c.
G[13] -
118 c.
G[1] * c.
G[9] * c.
G[14] + c.
G[1] * c.
G[11] * c.
G[12] +
119 c.
G[2] * c.
G[9] * c.
G[13] - c.
G[2] * c.
G[10] * c.
G[12]);
120 c.
Y[1] = T(c.
G[2] * c.
G[12] - c.
G[0] * c.
G[14]);
121 c.
Y[2] = T(c.
G[9] * c.
G[2] - c.
G[11] * c.
G[0]);
132 c.
G.assign(14, zero);
133 c.
U.assign(12, zero);
136 const T A = T(r2 * (r1 - one) - r1 + two);
137 const T B = T(r1 * (r2 - one) - r2 + two);
138 const T C = T(r1 + r2 - r1 * r2 - two);
139 if (A == zero || B == zero || C == zero)
141 "mamap2m_can2_coefficients: the canonical denominators vanish at this (r1, r2); the "
142 "marking coefficients are undefined there");
144 c.
G[0] = T(one - one / A);
145 c.
G[1] = T(-(r2 - one) / B);
147 c.
G[3] = T((r2 - two) / B - r2 + two);
148 c.
G[4] = T(r2 - r2 / B);
149 c.
G[5] = T(-(r1 * (r2 - one) * (r2 - one)) / C);
150 c.
G[6] = T(-r2 - (r2 * (two * r2 - three)) / B);
151 c.
G[7] = T(r2 * r2 / A);
152 c.
G[8] = T(h1 - h1 / A);
153 c.
G[9] = T(h1 * (r2 - one) - ((r2 - one) * (two * h1 + h2 - h1 * r2)) / B);
154 c.
G[10] = T((r2 * (two * h1 + h2 - h1 * r2)) / B - h1 * r2);
155 c.
G[11] = T(h2 - h2 / A);
156 c.
G[12] = T(((h1 + h2 * r1) * (r2 - one)) / C);
157 c.
G[13] = T((h2 * r2) / B);
159 const T t1 = T(h1 - h2 + h2 * r1);
160 const T t2 = T(h1 - h2 - h1 * r1 + h1 * r1 * r2);
162 c.
U[1] = T(-C * (two * h1 + two * h2 - h1 * r2 - h2 * r2 + h2 * r1 * r2));
163 c.
U[2] = T(h2 * (two * h1 - h1 * r2 + h2 * r1) * C);
164 c.
U[3] = T((r2 - one) * t1 * t1);
165 c.
U[4] = T(t1 * (two * r2 - r1 * r2 + r1 * r2 * r2 - r2 * r2));
166 c.
U[5] = T(-(h1 * r2 + h2 * r2 - h1 * r2 * r2) * t1);
168 c.
U[7] = T(-C * (two * h1 + two * h2 - h1 * r2 - h2 * r2 + h1 * r1 * r2 * r2 - h1 * r1 * r2));
169 c.
U[8] = T(h1 * C * (two * h2 + h1 * r1 - h2 * r2 + h1 * r1 * r2 * r2 - two * h1 * r1 * r2));
170 c.
U[9] = T((r2 - one) * t2 * t2);
171 c.
U[10] = T(-r2 * t2 * C);
172 c.
U[11] = T(-r2 * (h1 + h2 - h1 * r2) * t2);
174 c.
Y[0] = T(c.
G[9] * c.
G[11] * c.
G[2] - c.
G[9] * c.
G[13] * c.
G[0] -
175 c.
G[10] * c.
G[11] * c.
G[1] + c.
G[10] * c.
G[12] * c.
G[0] -
176 c.
G[12] * c.
G[2] * c.
G[8] + c.
G[13] * c.
G[1] * c.
G[8]);
177 c.
Y[1] = T(c.
G[11] * c.
G[1] - c.
G[12] * c.
G[0]);
178 c.
Y[2] = T(c.
G[9] * c.
G[0] - c.
G[1] * c.
G[8]);
Mamap2mCoefficients< T > mamap2m_can1_coefficients(const T &h1, const T &h2, const T &r1, const T &r2)
First canonical form, a positive autocorrelation decay.
Mamap2mCoefficients< T > mamap2m_can2_coefficients(const T &h1, const T &h2, const T &r1, const T &r2)
Second canonical form, a negative autocorrelation decay (E, V, Z).