mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-08-12 19:59:05 +08:00
cleaning f2c mess / trivial stuff
This commit is contained in:
parent
93fabbff5e
commit
a35586504e
@ -4,10 +4,10 @@ void ei_covar(int n, Scalar *r__, int ldr,
|
|||||||
const int *ipvt, Scalar tol, Scalar *wa)
|
const int *ipvt, Scalar tol, Scalar *wa)
|
||||||
{
|
{
|
||||||
/* System generated locals */
|
/* System generated locals */
|
||||||
int r_dim1, r_offset, i__1, i__2, i__3;
|
int r_dim1, r_offset;
|
||||||
|
|
||||||
/* Local variables */
|
/* Local variables */
|
||||||
int i__, j, k, l, ii, jj, km1;
|
int i, j, k, l, ii, jj, km1;
|
||||||
int sing;
|
int sing;
|
||||||
Scalar temp, tolr;
|
Scalar temp, tolr;
|
||||||
|
|
||||||
@ -24,8 +24,7 @@ void ei_covar(int n, Scalar *r__, int ldr,
|
|||||||
/* form the inverse of r in the full upper triangle of r. */
|
/* form the inverse of r in the full upper triangle of r. */
|
||||||
|
|
||||||
l = 0;
|
l = 0;
|
||||||
i__1 = n;
|
for (k = 1; k <= n; ++k) {
|
||||||
for (k = 1; k <= i__1; ++k) {
|
|
||||||
if (ei_abs(r__[k + k * r_dim1]) <= tolr) {
|
if (ei_abs(r__[k + k * r_dim1]) <= tolr) {
|
||||||
goto L50;
|
goto L50;
|
||||||
}
|
}
|
||||||
@ -34,13 +33,11 @@ void ei_covar(int n, Scalar *r__, int ldr,
|
|||||||
if (km1 < 1) {
|
if (km1 < 1) {
|
||||||
goto L30;
|
goto L30;
|
||||||
}
|
}
|
||||||
i__2 = km1;
|
for (j = 1; j <= km1; ++j) {
|
||||||
for (j = 1; j <= i__2; ++j) {
|
|
||||||
temp = r__[k + k * r_dim1] * r__[j + k * r_dim1];
|
temp = r__[k + k * r_dim1] * r__[j + k * r_dim1];
|
||||||
r__[j + k * r_dim1] = 0.;
|
r__[j + k * r_dim1] = 0.;
|
||||||
i__3 = j;
|
for (i = 1; i <= j; ++i) {
|
||||||
for (i__ = 1; i__ <= i__3; ++i__) {
|
r__[i + k * r_dim1] -= temp * r__[i + j * r_dim1];
|
||||||
r__[i__ + k * r_dim1] -= temp * r__[i__ + j * r_dim1];
|
|
||||||
/* L10: */
|
/* L10: */
|
||||||
}
|
}
|
||||||
/* L20: */
|
/* L20: */
|
||||||
@ -57,27 +54,23 @@ L50:
|
|||||||
if (l < 1) {
|
if (l < 1) {
|
||||||
goto L110;
|
goto L110;
|
||||||
}
|
}
|
||||||
i__1 = l;
|
for (k = 1; k <= l; ++k) {
|
||||||
for (k = 1; k <= i__1; ++k) {
|
|
||||||
km1 = k - 1;
|
km1 = k - 1;
|
||||||
if (km1 < 1) {
|
if (km1 < 1) {
|
||||||
goto L80;
|
goto L80;
|
||||||
}
|
}
|
||||||
i__2 = km1;
|
for (j = 1; j <= km1; ++j) {
|
||||||
for (j = 1; j <= i__2; ++j) {
|
|
||||||
temp = r__[j + k * r_dim1];
|
temp = r__[j + k * r_dim1];
|
||||||
i__3 = j;
|
for (i = 1; i <= j; ++i) {
|
||||||
for (i__ = 1; i__ <= i__3; ++i__) {
|
r__[i + j * r_dim1] += temp * r__[i + k * r_dim1];
|
||||||
r__[i__ + j * r_dim1] += temp * r__[i__ + k * r_dim1];
|
|
||||||
/* L60: */
|
/* L60: */
|
||||||
}
|
}
|
||||||
/* L70: */
|
/* L70: */
|
||||||
}
|
}
|
||||||
L80:
|
L80:
|
||||||
temp = r__[k + k * r_dim1];
|
temp = r__[k + k * r_dim1];
|
||||||
i__2 = k;
|
for (i = 1; i <= k; ++i) {
|
||||||
for (i__ = 1; i__ <= i__2; ++i__) {
|
r__[i + k * r_dim1] = temp * r__[i + k * r_dim1];
|
||||||
r__[i__ + k * r_dim1] = temp * r__[i__ + k * r_dim1];
|
|
||||||
/* L90: */
|
/* L90: */
|
||||||
}
|
}
|
||||||
/* L100: */
|
/* L100: */
|
||||||
@ -87,21 +80,19 @@ L110:
|
|||||||
/* form the full lower triangle of the covariance matrix */
|
/* form the full lower triangle of the covariance matrix */
|
||||||
/* in the strict lower triangle of r and in wa. */
|
/* in the strict lower triangle of r and in wa. */
|
||||||
|
|
||||||
i__1 = n;
|
for (j = 1; j <= n; ++j) {
|
||||||
for (j = 1; j <= i__1; ++j) {
|
|
||||||
jj = ipvt[j];
|
jj = ipvt[j];
|
||||||
sing = j > l;
|
sing = j > l;
|
||||||
i__2 = j;
|
for (i = 1; i <= j; ++i) {
|
||||||
for (i__ = 1; i__ <= i__2; ++i__) {
|
|
||||||
if (sing) {
|
if (sing) {
|
||||||
r__[i__ + j * r_dim1] = 0.;
|
r__[i + j * r_dim1] = 0.;
|
||||||
}
|
}
|
||||||
ii = ipvt[i__];
|
ii = ipvt[i];
|
||||||
if (ii > jj) {
|
if (ii > jj) {
|
||||||
r__[ii + jj * r_dim1] = r__[i__ + j * r_dim1];
|
r__[ii + jj * r_dim1] = r__[i + j * r_dim1];
|
||||||
}
|
}
|
||||||
if (ii < jj) {
|
if (ii < jj) {
|
||||||
r__[jj + ii * r_dim1] = r__[i__ + j * r_dim1];
|
r__[jj + ii * r_dim1] = r__[i + j * r_dim1];
|
||||||
}
|
}
|
||||||
/* L120: */
|
/* L120: */
|
||||||
}
|
}
|
||||||
@ -111,11 +102,9 @@ L110:
|
|||||||
|
|
||||||
/* symmetrize the covariance matrix in r. */
|
/* symmetrize the covariance matrix in r. */
|
||||||
|
|
||||||
i__1 = n;
|
for (j = 1; j <= n; ++j) {
|
||||||
for (j = 1; j <= i__1; ++j) {
|
for (i = 1; i <= j; ++i) {
|
||||||
i__2 = j;
|
r__[i + j * r_dim1] = r__[j + i * r_dim1];
|
||||||
for (i__ = 1; i__ <= i__2; ++i__) {
|
|
||||||
r__[i__ + j * r_dim1] = r__[j + i__ * r_dim1];
|
|
||||||
/* L140: */
|
/* L140: */
|
||||||
}
|
}
|
||||||
r__[j + j * r_dim1] = wa[j];
|
r__[j + j * r_dim1] = wa[j];
|
||||||
|
@ -5,11 +5,11 @@ int ei_fdjac1(minpack_func_nn fcn, void *p, int n, Scalar *x, const Scalar *
|
|||||||
int mu, Scalar epsfcn, Scalar *wa1, Scalar *wa2)
|
int mu, Scalar epsfcn, Scalar *wa1, Scalar *wa2)
|
||||||
{
|
{
|
||||||
/* System generated locals */
|
/* System generated locals */
|
||||||
int fjac_dim1, fjac_offset, i__1, i__2, i__3, i__4;
|
int fjac_dim1, fjac_offset;
|
||||||
|
|
||||||
/* Local variables */
|
/* Local variables */
|
||||||
Scalar h__;
|
Scalar h__;
|
||||||
int i__, j, k;
|
int i, j, k;
|
||||||
Scalar eps, temp;
|
Scalar eps, temp;
|
||||||
int msum;
|
int msum;
|
||||||
Scalar epsmch;
|
Scalar epsmch;
|
||||||
@ -38,8 +38,7 @@ int ei_fdjac1(minpack_func_nn fcn, void *p, int n, Scalar *x, const Scalar *
|
|||||||
|
|
||||||
/* computation of dense approximate jacobian. */
|
/* computation of dense approximate jacobian. */
|
||||||
|
|
||||||
i__1 = n;
|
for (j = 1; j <= n; ++j) {
|
||||||
for (j = 1; j <= i__1; ++j) {
|
|
||||||
temp = x[j];
|
temp = x[j];
|
||||||
h__ = eps * ei_abs(temp);
|
h__ = eps * ei_abs(temp);
|
||||||
if (h__ == 0.) {
|
if (h__ == 0.) {
|
||||||
@ -51,9 +50,8 @@ int ei_fdjac1(minpack_func_nn fcn, void *p, int n, Scalar *x, const Scalar *
|
|||||||
goto L30;
|
goto L30;
|
||||||
}
|
}
|
||||||
x[j] = temp;
|
x[j] = temp;
|
||||||
i__2 = n;
|
for (i = 1; i <= n; ++i) {
|
||||||
for (i__ = 1; i__ <= i__2; ++i__) {
|
fjac[i + j * fjac_dim1] = (wa1[i] - fvec[i]) / h__;
|
||||||
fjac[i__ + j * fjac_dim1] = (wa1[i__] - fvec[i__]) / h__;
|
|
||||||
/* L10: */
|
/* L10: */
|
||||||
}
|
}
|
||||||
/* L20: */
|
/* L20: */
|
||||||
@ -65,11 +63,8 @@ L40:
|
|||||||
|
|
||||||
/* computation of banded approximate jacobian. */
|
/* computation of banded approximate jacobian. */
|
||||||
|
|
||||||
i__1 = msum;
|
for (k = 1; k <= msum; ++k) {
|
||||||
for (k = 1; k <= i__1; ++k) {
|
for (j = k; msum< 0 ? j >= n: j <= n; j += msum) {
|
||||||
i__2 = n;
|
|
||||||
i__3 = msum;
|
|
||||||
for (j = k; i__3 < 0 ? j >= i__2 : j <= i__2; j += i__3) {
|
|
||||||
wa2[j] = x[j];
|
wa2[j] = x[j];
|
||||||
h__ = eps * ei_abs(wa2[j]);
|
h__ = eps * ei_abs(wa2[j]);
|
||||||
if (h__ == 0.) {
|
if (h__ == 0.) {
|
||||||
@ -83,19 +78,16 @@ L40:
|
|||||||
/* goto L100; */
|
/* goto L100; */
|
||||||
return iflag;
|
return iflag;
|
||||||
}
|
}
|
||||||
i__3 = n;
|
for (j = k; msum< 0 ? j >= n: j <= n; j += msum) {
|
||||||
i__2 = msum;
|
|
||||||
for (j = k; i__2 < 0 ? j >= i__3 : j <= i__3; j += i__2) {
|
|
||||||
x[j] = wa2[j];
|
x[j] = wa2[j];
|
||||||
h__ = eps * ei_abs(wa2[j]);
|
h__ = eps * ei_abs(wa2[j]);
|
||||||
if (h__ == 0.) {
|
if (h__ == 0.) {
|
||||||
h__ = eps;
|
h__ = eps;
|
||||||
}
|
}
|
||||||
i__4 = n;
|
for (i = 1; i <= n; ++i) {
|
||||||
for (i__ = 1; i__ <= i__4; ++i__) {
|
fjac[i + j * fjac_dim1] = 0.;
|
||||||
fjac[i__ + j * fjac_dim1] = 0.;
|
if (i >= j - mu && i <= j + ml) {
|
||||||
if (i__ >= j - mu && i__ <= j + ml) {
|
fjac[i + j * fjac_dim1] = (wa1[i] - fvec[i]) / h__;
|
||||||
fjac[i__ + j * fjac_dim1] = (wa1[i__] - fvec[i__]) / h__;
|
|
||||||
}
|
}
|
||||||
/* L70: */
|
/* L70: */
|
||||||
}
|
}
|
||||||
|
@ -5,11 +5,11 @@ int ei_fdjac2(minpack_func_mn fcn, void *p, int m, int n, Scalar *x,
|
|||||||
Scalar epsfcn, Scalar *wa)
|
Scalar epsfcn, Scalar *wa)
|
||||||
{
|
{
|
||||||
/* System generated locals */
|
/* System generated locals */
|
||||||
int fjac_dim1, fjac_offset, i__1, i__2;
|
int fjac_dim1, fjac_offset;
|
||||||
|
|
||||||
/* Local variables */
|
/* Local variables */
|
||||||
Scalar h__;
|
Scalar h__;
|
||||||
int i__, j;
|
int i, j;
|
||||||
Scalar eps, temp, epsmch;
|
Scalar eps, temp, epsmch;
|
||||||
int iflag;
|
int iflag;
|
||||||
|
|
||||||
@ -28,8 +28,7 @@ int ei_fdjac2(minpack_func_mn fcn, void *p, int m, int n, Scalar *x,
|
|||||||
epsmch = epsilon<Scalar>();
|
epsmch = epsilon<Scalar>();
|
||||||
|
|
||||||
eps = ei_sqrt((std::max(epsfcn,epsmch)));
|
eps = ei_sqrt((std::max(epsfcn,epsmch)));
|
||||||
i__1 = n;
|
for (j = 1; j <= n; ++j) {
|
||||||
for (j = 1; j <= i__1; ++j) {
|
|
||||||
temp = x[j];
|
temp = x[j];
|
||||||
h__ = eps * ei_abs(temp);
|
h__ = eps * ei_abs(temp);
|
||||||
if (h__ == 0.) {
|
if (h__ == 0.) {
|
||||||
@ -42,9 +41,8 @@ int ei_fdjac2(minpack_func_mn fcn, void *p, int m, int n, Scalar *x,
|
|||||||
return iflag;
|
return iflag;
|
||||||
}
|
}
|
||||||
x[j] = temp;
|
x[j] = temp;
|
||||||
i__2 = m;
|
for (i = 1; i <= m; ++i) {
|
||||||
for (i__ = 1; i__ <= i__2; ++i__) {
|
fjac[i + j * fjac_dim1] = (wa[i] - fvec[i]) / h__;
|
||||||
fjac[i__ + j * fjac_dim1] = (wa[i__] - fvec[i__]) / h__;
|
|
||||||
/* L10: */
|
/* L10: */
|
||||||
}
|
}
|
||||||
/* L20: */
|
/* L20: */
|
||||||
|
@ -4,10 +4,10 @@ void ei_qform(int m, int n, Scalar *q, int
|
|||||||
ldq, Scalar *wa)
|
ldq, Scalar *wa)
|
||||||
{
|
{
|
||||||
/* System generated locals */
|
/* System generated locals */
|
||||||
int q_dim1, q_offset, i__1, i__2, i__3;
|
int q_dim1, q_offset;
|
||||||
|
|
||||||
/* Local variables */
|
/* Local variables */
|
||||||
int i__, j, k, l, jm1, np1;
|
int i, j, k, l, jm1, np1;
|
||||||
Scalar sum, temp;
|
Scalar sum, temp;
|
||||||
int minmn;
|
int minmn;
|
||||||
|
|
||||||
@ -25,12 +25,10 @@ void ei_qform(int m, int n, Scalar *q, int
|
|||||||
if (minmn < 2) {
|
if (minmn < 2) {
|
||||||
goto L30;
|
goto L30;
|
||||||
}
|
}
|
||||||
i__1 = minmn;
|
for (j = 2; j <= minmn; ++j) {
|
||||||
for (j = 2; j <= i__1; ++j) {
|
|
||||||
jm1 = j - 1;
|
jm1 = j - 1;
|
||||||
i__2 = jm1;
|
for (i = 1; i <= jm1; ++i) {
|
||||||
for (i__ = 1; i__ <= i__2; ++i__) {
|
q[i + j * q_dim1] = 0.;
|
||||||
q[i__ + j * q_dim1] = 0.;
|
|
||||||
/* L10: */
|
/* L10: */
|
||||||
}
|
}
|
||||||
/* L20: */
|
/* L20: */
|
||||||
@ -43,11 +41,9 @@ L30:
|
|||||||
if (m < np1) {
|
if (m < np1) {
|
||||||
goto L60;
|
goto L60;
|
||||||
}
|
}
|
||||||
i__1 = m;
|
for (j = np1; j <= m; ++j) {
|
||||||
for (j = np1; j <= i__1; ++j) {
|
for (i = 1; i <= m; ++i) {
|
||||||
i__2 = m;
|
q[i + j * q_dim1] = 0.;
|
||||||
for (i__ = 1; i__ <= i__2; ++i__) {
|
|
||||||
q[i__ + j * q_dim1] = 0.;
|
|
||||||
/* L40: */
|
/* L40: */
|
||||||
}
|
}
|
||||||
q[j + j * q_dim1] = 1.;
|
q[j + j * q_dim1] = 1.;
|
||||||
@ -57,31 +53,26 @@ L60:
|
|||||||
|
|
||||||
/* accumulate q from its factored form. */
|
/* accumulate q from its factored form. */
|
||||||
|
|
||||||
i__1 = minmn;
|
for (l = 1; l <= minmn; ++l) {
|
||||||
for (l = 1; l <= i__1; ++l) {
|
|
||||||
k = minmn - l + 1;
|
k = minmn - l + 1;
|
||||||
i__2 = m;
|
for (i = k; i <= m; ++i) {
|
||||||
for (i__ = k; i__ <= i__2; ++i__) {
|
wa[i] = q[i + k * q_dim1];
|
||||||
wa[i__] = q[i__ + k * q_dim1];
|
q[i + k * q_dim1] = 0.;
|
||||||
q[i__ + k * q_dim1] = 0.;
|
|
||||||
/* L70: */
|
/* L70: */
|
||||||
}
|
}
|
||||||
q[k + k * q_dim1] = 1.;
|
q[k + k * q_dim1] = 1.;
|
||||||
if (wa[k] == 0.) {
|
if (wa[k] == 0.) {
|
||||||
goto L110;
|
goto L110;
|
||||||
}
|
}
|
||||||
i__2 = m;
|
for (j = k; j <= m; ++j) {
|
||||||
for (j = k; j <= i__2; ++j) {
|
|
||||||
sum = 0.;
|
sum = 0.;
|
||||||
i__3 = m;
|
for (i = k; i <= m; ++i) {
|
||||||
for (i__ = k; i__ <= i__3; ++i__) {
|
sum += q[i + j * q_dim1] * wa[i];
|
||||||
sum += q[i__ + j * q_dim1] * wa[i__];
|
|
||||||
/* L80: */
|
/* L80: */
|
||||||
}
|
}
|
||||||
temp = sum / wa[k];
|
temp = sum / wa[k];
|
||||||
i__3 = m;
|
for (i = k; i <= m; ++i) {
|
||||||
for (i__ = k; i__ <= i__3; ++i__) {
|
q[i + j * q_dim1] -= temp * wa[i];
|
||||||
q[i__ + j * q_dim1] -= temp * wa[i__];
|
|
||||||
/* L90: */
|
/* L90: */
|
||||||
}
|
}
|
||||||
/* L100: */
|
/* L100: */
|
||||||
|
@ -4,16 +4,11 @@ void ei_qrfac(int m, int n, Scalar *a, int
|
|||||||
lda, int pivot, int *ipvt, int /* lipvt */, Scalar *rdiag,
|
lda, int pivot, int *ipvt, int /* lipvt */, Scalar *rdiag,
|
||||||
Scalar *acnorm, Scalar *wa)
|
Scalar *acnorm, Scalar *wa)
|
||||||
{
|
{
|
||||||
/* Initialized data */
|
|
||||||
|
|
||||||
#define p05 .05
|
|
||||||
|
|
||||||
/* System generated locals */
|
/* System generated locals */
|
||||||
int a_dim1, a_offset, i__1, i__2, i__3;
|
int a_dim1, a_offset;
|
||||||
Scalar d__1, d__2, d__3;
|
|
||||||
|
|
||||||
/* Local variables */
|
/* Local variables */
|
||||||
int i__, j, k, jp1;
|
int i, j, k, jp1;
|
||||||
Scalar sum;
|
Scalar sum;
|
||||||
int kmax;
|
int kmax;
|
||||||
Scalar temp;
|
Scalar temp;
|
||||||
@ -38,8 +33,7 @@ void ei_qrfac(int m, int n, Scalar *a, int
|
|||||||
|
|
||||||
/* compute the initial column norms and initialize several arrays. */
|
/* compute the initial column norms and initialize several arrays. */
|
||||||
|
|
||||||
i__1 = n;
|
for (j = 1; j <= n; ++j) {
|
||||||
for (j = 1; j <= i__1; ++j) {
|
|
||||||
acnorm[j] = Map< Matrix< Scalar, Dynamic, 1 > >(&a[j * a_dim1 + 1],m).blueNorm();
|
acnorm[j] = Map< Matrix< Scalar, Dynamic, 1 > >(&a[j * a_dim1 + 1],m).blueNorm();
|
||||||
rdiag[j] = acnorm[j];
|
rdiag[j] = acnorm[j];
|
||||||
wa[j] = rdiag[j];
|
wa[j] = rdiag[j];
|
||||||
@ -52,8 +46,7 @@ void ei_qrfac(int m, int n, Scalar *a, int
|
|||||||
/* reduce a to r with householder transformations. */
|
/* reduce a to r with householder transformations. */
|
||||||
|
|
||||||
minmn = std::min(m,n);
|
minmn = std::min(m,n);
|
||||||
i__1 = minmn;
|
for (j = 1; j <= minmn; ++j) {
|
||||||
for (j = 1; j <= i__1; ++j) {
|
|
||||||
if (! (pivot)) {
|
if (! (pivot)) {
|
||||||
goto L40;
|
goto L40;
|
||||||
}
|
}
|
||||||
@ -61,8 +54,7 @@ void ei_qrfac(int m, int n, Scalar *a, int
|
|||||||
/* bring the column of largest norm into the pivot position. */
|
/* bring the column of largest norm into the pivot position. */
|
||||||
|
|
||||||
kmax = j;
|
kmax = j;
|
||||||
i__2 = n;
|
for (k = j; k <= n; ++k) {
|
||||||
for (k = j; k <= i__2; ++k) {
|
|
||||||
if (rdiag[k] > rdiag[kmax]) {
|
if (rdiag[k] > rdiag[kmax]) {
|
||||||
kmax = k;
|
kmax = k;
|
||||||
}
|
}
|
||||||
@ -71,11 +63,10 @@ void ei_qrfac(int m, int n, Scalar *a, int
|
|||||||
if (kmax == j) {
|
if (kmax == j) {
|
||||||
goto L40;
|
goto L40;
|
||||||
}
|
}
|
||||||
i__2 = m;
|
for (i = 1; i <= m; ++i) {
|
||||||
for (i__ = 1; i__ <= i__2; ++i__) {
|
temp = a[i + j * a_dim1];
|
||||||
temp = a[i__ + j * a_dim1];
|
a[i + j * a_dim1] = a[i + kmax * a_dim1];
|
||||||
a[i__ + j * a_dim1] = a[i__ + kmax * a_dim1];
|
a[i + kmax * a_dim1] = temp;
|
||||||
a[i__ + kmax * a_dim1] = temp;
|
|
||||||
/* L30: */
|
/* L30: */
|
||||||
}
|
}
|
||||||
rdiag[kmax] = rdiag[j];
|
rdiag[kmax] = rdiag[j];
|
||||||
@ -88,17 +79,15 @@ L40:
|
|||||||
/* compute the householder transformation to reduce the */
|
/* compute the householder transformation to reduce the */
|
||||||
/* j-th column of a to a multiple of the j-th unit vector. */
|
/* j-th column of a to a multiple of the j-th unit vector. */
|
||||||
|
|
||||||
i__2 = m - j + 1;
|
ajnorm = Map< Matrix< Scalar, Dynamic, 1 > >(&a[j + j * a_dim1],m-j+1).blueNorm();
|
||||||
ajnorm = Map< Matrix< Scalar, Dynamic, 1 > >(&a[j + j * a_dim1],i__2).blueNorm();
|
|
||||||
if (ajnorm == 0.) {
|
if (ajnorm == 0.) {
|
||||||
goto L100;
|
goto L100;
|
||||||
}
|
}
|
||||||
if (a[j + j * a_dim1] < 0.) {
|
if (a[j + j * a_dim1] < 0.) {
|
||||||
ajnorm = -ajnorm;
|
ajnorm = -ajnorm;
|
||||||
}
|
}
|
||||||
i__2 = m;
|
for (i = j; i <= m; ++i) {
|
||||||
for (i__ = j; i__ <= i__2; ++i__) {
|
a[i + j * a_dim1] /= ajnorm;
|
||||||
a[i__ + j * a_dim1] /= ajnorm;
|
|
||||||
/* L50: */
|
/* L50: */
|
||||||
}
|
}
|
||||||
a[j + j * a_dim1] += 1.;
|
a[j + j * a_dim1] += 1.;
|
||||||
@ -110,18 +99,15 @@ L40:
|
|||||||
if (n < jp1) {
|
if (n < jp1) {
|
||||||
goto L100;
|
goto L100;
|
||||||
}
|
}
|
||||||
i__2 = n;
|
for (k = jp1; k <= n; ++k) {
|
||||||
for (k = jp1; k <= i__2; ++k) {
|
|
||||||
sum = 0.;
|
sum = 0.;
|
||||||
i__3 = m;
|
for (i = j; i <= m; ++i) {
|
||||||
for (i__ = j; i__ <= i__3; ++i__) {
|
sum += a[i + j * a_dim1] * a[i + k * a_dim1];
|
||||||
sum += a[i__ + j * a_dim1] * a[i__ + k * a_dim1];
|
|
||||||
/* L60: */
|
/* L60: */
|
||||||
}
|
}
|
||||||
temp = sum / a[j + j * a_dim1];
|
temp = sum / a[j + j * a_dim1];
|
||||||
i__3 = m;
|
for (i = j; i <= m; ++i) {
|
||||||
for (i__ = j; i__ <= i__3; ++i__) {
|
a[i + k * a_dim1] -= temp * a[i + j * a_dim1];
|
||||||
a[i__ + k * a_dim1] -= temp * a[i__ + j * a_dim1];
|
|
||||||
/* L70: */
|
/* L70: */
|
||||||
}
|
}
|
||||||
if (! (pivot) || rdiag[k] == 0.) {
|
if (! (pivot) || rdiag[k] == 0.) {
|
||||||
@ -130,16 +116,12 @@ L40:
|
|||||||
temp = a[j + k * a_dim1] / rdiag[k];
|
temp = a[j + k * a_dim1] / rdiag[k];
|
||||||
/* Computing MAX */
|
/* Computing MAX */
|
||||||
/* Computing 2nd power */
|
/* Computing 2nd power */
|
||||||
d__3 = temp;
|
rdiag[k] *= ei_sqrt((std::max(Scalar(0.), Scalar(1.)-ei_abs2(temp))));
|
||||||
d__1 = 0., d__2 = 1. - d__3 * d__3;
|
|
||||||
rdiag[k] *= ei_sqrt((std::max(d__1,d__2)));
|
|
||||||
/* Computing 2nd power */
|
/* Computing 2nd power */
|
||||||
d__1 = rdiag[k] / wa[k];
|
if (Scalar(.05) * ei_abs2(rdiag[k] / wa[k]) > epsmch) {
|
||||||
if (p05 * (d__1 * d__1) > epsmch) {
|
|
||||||
goto L80;
|
goto L80;
|
||||||
}
|
}
|
||||||
i__3 = m - j;
|
rdiag[k] = Map< Matrix< Scalar, Dynamic, 1 > >(&a[jp1 + k * a_dim1],m-j).blueNorm();
|
||||||
rdiag[k] = Map< Matrix< Scalar, Dynamic, 1 > >(&a[jp1 + k * a_dim1],i__3).blueNorm();
|
|
||||||
wa[k] = rdiag[k];
|
wa[k] = rdiag[k];
|
||||||
L80:
|
L80:
|
||||||
/* L90: */
|
/* L90: */
|
||||||
|
@ -4,17 +4,11 @@ void ei_qrsolv(int n, Scalar *r__, int ldr,
|
|||||||
const int *ipvt, const Scalar *diag, const Scalar *qtb, Scalar *x,
|
const int *ipvt, const Scalar *diag, const Scalar *qtb, Scalar *x,
|
||||||
Scalar *sdiag, Scalar *wa)
|
Scalar *sdiag, Scalar *wa)
|
||||||
{
|
{
|
||||||
/* Initialized data */
|
|
||||||
|
|
||||||
#define p5 .5
|
|
||||||
#define p25 .25
|
|
||||||
|
|
||||||
/* System generated locals */
|
/* System generated locals */
|
||||||
int r_dim1, r_offset, i__1, i__2, i__3;
|
int r_dim1, r_offset;
|
||||||
Scalar d__1, d__2;
|
|
||||||
|
|
||||||
/* Local variables */
|
/* Local variables */
|
||||||
int i__, j, k, l, jp1, kp1;
|
int i, j, k, l, jp1, kp1;
|
||||||
Scalar tan__, cos__, sin__, sum, temp, cotan;
|
Scalar tan__, cos__, sin__, sum, temp, cotan;
|
||||||
int nsing;
|
int nsing;
|
||||||
Scalar qtbpj;
|
Scalar qtbpj;
|
||||||
@ -35,11 +29,9 @@ void ei_qrsolv(int n, Scalar *r__, int ldr,
|
|||||||
/* copy r and (q transpose)*b to preserve input and initialize s. */
|
/* copy r and (q transpose)*b to preserve input and initialize s. */
|
||||||
/* in particular, save the diagonal elements of r in x. */
|
/* in particular, save the diagonal elements of r in x. */
|
||||||
|
|
||||||
i__1 = n;
|
for (j = 1; j <= n; ++j) {
|
||||||
for (j = 1; j <= i__1; ++j) {
|
for (i = j; i <= n; ++i) {
|
||||||
i__2 = n;
|
r__[i + j * r_dim1] = r__[j + i * r_dim1];
|
||||||
for (i__ = j; i__ <= i__2; ++i__) {
|
|
||||||
r__[i__ + j * r_dim1] = r__[j + i__ * r_dim1];
|
|
||||||
/* L10: */
|
/* L10: */
|
||||||
}
|
}
|
||||||
x[j] = r__[j + j * r_dim1];
|
x[j] = r__[j + j * r_dim1];
|
||||||
@ -49,8 +41,7 @@ void ei_qrsolv(int n, Scalar *r__, int ldr,
|
|||||||
|
|
||||||
/* eliminate the diagonal matrix d using a givens rotation. */
|
/* eliminate the diagonal matrix d using a givens rotation. */
|
||||||
|
|
||||||
i__1 = n;
|
for (j = 1; j <= n; ++j) {
|
||||||
for (j = 1; j <= i__1; ++j) {
|
|
||||||
|
|
||||||
/* prepare the row of d to be eliminated, locating the */
|
/* prepare the row of d to be eliminated, locating the */
|
||||||
/* diagonal element using p from the qr factorization. */
|
/* diagonal element using p from the qr factorization. */
|
||||||
@ -59,8 +50,7 @@ void ei_qrsolv(int n, Scalar *r__, int ldr,
|
|||||||
if (diag[l] == 0.) {
|
if (diag[l] == 0.) {
|
||||||
goto L90;
|
goto L90;
|
||||||
}
|
}
|
||||||
i__2 = n;
|
for (k = j; k <= n; ++k) {
|
||||||
for (k = j; k <= i__2; ++k) {
|
|
||||||
sdiag[k] = 0.;
|
sdiag[k] = 0.;
|
||||||
/* L30: */
|
/* L30: */
|
||||||
}
|
}
|
||||||
@ -71,30 +61,24 @@ void ei_qrsolv(int n, Scalar *r__, int ldr,
|
|||||||
/* beyond the first n, which is initially zero. */
|
/* beyond the first n, which is initially zero. */
|
||||||
|
|
||||||
qtbpj = 0.;
|
qtbpj = 0.;
|
||||||
i__2 = n;
|
for (k = j; k <= n; ++k) {
|
||||||
for (k = j; k <= i__2; ++k) {
|
|
||||||
|
|
||||||
/* determine a givens rotation which eliminates the */
|
/* determine a givens rotation which eliminates the */
|
||||||
/* appropriate element in the current row of d. */
|
/* appropriate element in the current row of d. */
|
||||||
|
|
||||||
if (sdiag[k] == 0.) {
|
if (sdiag[k] == 0.)
|
||||||
goto L70;
|
goto L70;
|
||||||
}
|
if ( ei_abs(r__[k + k * r_dim1]) >= ei_abs(sdiag[k]))
|
||||||
if ((d__1 = r__[k + k * r_dim1], ei_abs(d__1)) >= (d__2 = sdiag[k],
|
goto L40;
|
||||||
ei_abs(d__2))) {
|
|
||||||
goto L40;
|
|
||||||
}
|
|
||||||
cotan = r__[k + k * r_dim1] / sdiag[k];
|
cotan = r__[k + k * r_dim1] / sdiag[k];
|
||||||
/* Computing 2nd power */
|
/* Computing 2nd power */
|
||||||
d__1 = cotan;
|
sin__ = Scalar(.5) / ei_sqrt(Scalar(0.25) + Scalar(0.25) * ei_abs2(cotan));
|
||||||
sin__ = p5 / ei_sqrt(p25 + p25 * (d__1 * d__1));
|
|
||||||
cos__ = sin__ * cotan;
|
cos__ = sin__ * cotan;
|
||||||
goto L50;
|
goto L50;
|
||||||
L40:
|
L40:
|
||||||
tan__ = sdiag[k] / r__[k + k * r_dim1];
|
tan__ = sdiag[k] / r__[k + k * r_dim1];
|
||||||
/* Computing 2nd power */
|
/* Computing 2nd power */
|
||||||
d__1 = tan__;
|
cos__ = Scalar(.5) / ei_sqrt(Scalar(0.25) + Scalar(0.25) * ei_abs2(tan__));
|
||||||
cos__ = p5 / ei_sqrt(p25 + p25 * (d__1 * d__1));
|
|
||||||
sin__ = cos__ * tan__;
|
sin__ = cos__ * tan__;
|
||||||
L50:
|
L50:
|
||||||
|
|
||||||
@ -113,12 +97,11 @@ L50:
|
|||||||
if (n < kp1) {
|
if (n < kp1) {
|
||||||
goto L70;
|
goto L70;
|
||||||
}
|
}
|
||||||
i__3 = n;
|
for (i = kp1; i <= n; ++i) {
|
||||||
for (i__ = kp1; i__ <= i__3; ++i__) {
|
temp = cos__ * r__[i + k * r_dim1] + sin__ * sdiag[i];
|
||||||
temp = cos__ * r__[i__ + k * r_dim1] + sin__ * sdiag[i__];
|
sdiag[i] = -sin__ * r__[i + k * r_dim1] + cos__ * sdiag[
|
||||||
sdiag[i__] = -sin__ * r__[i__ + k * r_dim1] + cos__ * sdiag[
|
i];
|
||||||
i__];
|
r__[i + k * r_dim1] = temp;
|
||||||
r__[i__ + k * r_dim1] = temp;
|
|
||||||
/* L60: */
|
/* L60: */
|
||||||
}
|
}
|
||||||
L70:
|
L70:
|
||||||
@ -139,8 +122,7 @@ L90:
|
|||||||
/* singular, then obtain a least squares solution. */
|
/* singular, then obtain a least squares solution. */
|
||||||
|
|
||||||
nsing = n;
|
nsing = n;
|
||||||
i__1 = n;
|
for (j = 1; j <= n; ++j) {
|
||||||
for (j = 1; j <= i__1; ++j) {
|
|
||||||
if (sdiag[j] == 0. && nsing == n) {
|
if (sdiag[j] == 0. && nsing == n) {
|
||||||
nsing = j - 1;
|
nsing = j - 1;
|
||||||
}
|
}
|
||||||
@ -152,17 +134,15 @@ L90:
|
|||||||
if (nsing < 1) {
|
if (nsing < 1) {
|
||||||
goto L150;
|
goto L150;
|
||||||
}
|
}
|
||||||
i__1 = nsing;
|
for (k = 1; k <= nsing; ++k) {
|
||||||
for (k = 1; k <= i__1; ++k) {
|
|
||||||
j = nsing - k + 1;
|
j = nsing - k + 1;
|
||||||
sum = 0.;
|
sum = 0.;
|
||||||
jp1 = j + 1;
|
jp1 = j + 1;
|
||||||
if (nsing < jp1) {
|
if (nsing < jp1) {
|
||||||
goto L130;
|
goto L130;
|
||||||
}
|
}
|
||||||
i__2 = nsing;
|
for (i = jp1; i <= nsing; ++i) {
|
||||||
for (i__ = jp1; i__ <= i__2; ++i__) {
|
sum += r__[i + j * r_dim1] * wa[i];
|
||||||
sum += r__[i__ + j * r_dim1] * wa[i__];
|
|
||||||
/* L120: */
|
/* L120: */
|
||||||
}
|
}
|
||||||
L130:
|
L130:
|
||||||
@ -173,8 +153,7 @@ L150:
|
|||||||
|
|
||||||
/* permute the components of z back to components of x. */
|
/* permute the components of z back to components of x. */
|
||||||
|
|
||||||
i__1 = n;
|
for (j = 1; j <= n; ++j) {
|
||||||
for (j = 1; j <= i__1; ++j) {
|
|
||||||
l = ipvt[j];
|
l = ipvt[j];
|
||||||
x[l] = wa[j];
|
x[l] = wa[j];
|
||||||
/* L160: */
|
/* L160: */
|
||||||
|
@ -4,11 +4,10 @@ void ei_r1mpyq(int m, int n, Scalar *a, int
|
|||||||
lda, const Scalar *v, const Scalar *w)
|
lda, const Scalar *v, const Scalar *w)
|
||||||
{
|
{
|
||||||
/* System generated locals */
|
/* System generated locals */
|
||||||
int a_dim1, a_offset, i__1, i__2;
|
int a_dim1, a_offset;
|
||||||
Scalar d__1, d__2;
|
|
||||||
|
|
||||||
/* Local variables */
|
/* Local variables */
|
||||||
int i__, j, nm1, nmj;
|
int i, j, nm1, nmj;
|
||||||
Scalar cos__, sin__, temp;
|
Scalar cos__, sin__, temp;
|
||||||
|
|
||||||
/* Parameter adjustments */
|
/* Parameter adjustments */
|
||||||
@ -27,31 +26,27 @@ void ei_r1mpyq(int m, int n, Scalar *a, int
|
|||||||
/* goto L50; */
|
/* goto L50; */
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
i__1 = nm1;
|
for (nmj = 1; nmj <= nm1; ++nmj) {
|
||||||
for (nmj = 1; nmj <= i__1; ++nmj) {
|
|
||||||
j = n - nmj;
|
j = n - nmj;
|
||||||
if ((d__1 = v[j], ei_abs(d__1)) > 1.) {
|
if (ei_abs(v[j]) > 1.) {
|
||||||
cos__ = 1. / v[j];
|
cos__ = 1. / v[j];
|
||||||
}
|
}
|
||||||
if ((d__1 = v[j], ei_abs(d__1)) > 1.) {
|
if (ei_abs(v[j]) > 1.) {
|
||||||
/* Computing 2nd power */
|
/* Computing 2nd power */
|
||||||
d__2 = cos__;
|
sin__ = ei_sqrt(1. - ei_abs2(cos__));
|
||||||
sin__ = ei_sqrt(1. - d__2 * d__2);
|
|
||||||
}
|
}
|
||||||
if ((d__1 = v[j], ei_abs(d__1)) <= 1.) {
|
if (ei_abs(v[j]) <= 1.) {
|
||||||
sin__ = v[j];
|
sin__ = v[j];
|
||||||
}
|
}
|
||||||
if ((d__1 = v[j], ei_abs(d__1)) <= 1.) {
|
if (ei_abs(v[j]) <= 1.) {
|
||||||
/* Computing 2nd power */
|
/* Computing 2nd power */
|
||||||
d__2 = sin__;
|
cos__ = ei_sqrt(1. - ei_abs2(sin__));
|
||||||
cos__ = ei_sqrt(1. - d__2 * d__2);
|
|
||||||
}
|
}
|
||||||
i__2 = m;
|
for (i = 1; i <= m; ++i) {
|
||||||
for (i__ = 1; i__ <= i__2; ++i__) {
|
temp = cos__ * a[i + j * a_dim1] - sin__ * a[i + n * a_dim1];
|
||||||
temp = cos__ * a[i__ + j * a_dim1] - sin__ * a[i__ + n * a_dim1];
|
a[i + n * a_dim1] = sin__ * a[i + j * a_dim1] + cos__ * a[
|
||||||
a[i__ + n * a_dim1] = sin__ * a[i__ + j * a_dim1] + cos__ * a[
|
i + n * a_dim1];
|
||||||
i__ + n * a_dim1];
|
a[i + j * a_dim1] = temp;
|
||||||
a[i__ + j * a_dim1] = temp;
|
|
||||||
/* L10: */
|
/* L10: */
|
||||||
}
|
}
|
||||||
/* L20: */
|
/* L20: */
|
||||||
@ -59,30 +54,26 @@ void ei_r1mpyq(int m, int n, Scalar *a, int
|
|||||||
|
|
||||||
/* apply the second set of givens rotations to a. */
|
/* apply the second set of givens rotations to a. */
|
||||||
|
|
||||||
i__1 = nm1;
|
for (j = 1; j <= nm1; ++j) {
|
||||||
for (j = 1; j <= i__1; ++j) {
|
if (ei_abs(w[j]) > 1.) {
|
||||||
if ((d__1 = w[j], ei_abs(d__1)) > 1.) {
|
|
||||||
cos__ = 1. / w[j];
|
cos__ = 1. / w[j];
|
||||||
}
|
}
|
||||||
if ((d__1 = w[j], ei_abs(d__1)) > 1.) {
|
if (ei_abs(w[j]) > 1.) {
|
||||||
/* Computing 2nd power */
|
/* Computing 2nd power */
|
||||||
d__2 = cos__;
|
sin__ = ei_sqrt(1. - ei_abs2(cos__));
|
||||||
sin__ = ei_sqrt(1. - d__2 * d__2);
|
|
||||||
}
|
}
|
||||||
if ((d__1 = w[j], ei_abs(d__1)) <= 1.) {
|
if (ei_abs(w[j]) <= 1.) {
|
||||||
sin__ = w[j];
|
sin__ = w[j];
|
||||||
}
|
}
|
||||||
if ((d__1 = w[j], ei_abs(d__1)) <= 1.) {
|
if (ei_abs(w[j]) <= 1.) {
|
||||||
/* Computing 2nd power */
|
/* Computing 2nd power */
|
||||||
d__2 = sin__;
|
cos__ = ei_sqrt(1. - ei_abs2(sin__));
|
||||||
cos__ = ei_sqrt(1. - d__2 * d__2);
|
|
||||||
}
|
}
|
||||||
i__2 = m;
|
for (i = 1; i <= m; ++i) {
|
||||||
for (i__ = 1; i__ <= i__2; ++i__) {
|
temp = cos__ * a[i + j * a_dim1] + sin__ * a[i + n * a_dim1];
|
||||||
temp = cos__ * a[i__ + j * a_dim1] + sin__ * a[i__ + n * a_dim1];
|
a[i + n * a_dim1] = -sin__ * a[i + j * a_dim1] + cos__ * a[
|
||||||
a[i__ + n * a_dim1] = -sin__ * a[i__ + j * a_dim1] + cos__ * a[
|
i + n * a_dim1];
|
||||||
i__ + n * a_dim1];
|
a[i + j * a_dim1] = temp;
|
||||||
a[i__ + j * a_dim1] = temp;
|
|
||||||
/* L30: */
|
/* L30: */
|
||||||
}
|
}
|
||||||
/* L40: */
|
/* L40: */
|
||||||
|
@ -2,17 +2,8 @@
|
|||||||
template <typename Scalar>
|
template <typename Scalar>
|
||||||
void ei_r1updt(int m, int n, Scalar *s, int /* ls */, const Scalar *u, Scalar *v, Scalar *w, int *sing)
|
void ei_r1updt(int m, int n, Scalar *s, int /* ls */, const Scalar *u, Scalar *v, Scalar *w, int *sing)
|
||||||
{
|
{
|
||||||
/* Initialized data */
|
|
||||||
|
|
||||||
#define p5 .5
|
|
||||||
#define p25 .25
|
|
||||||
|
|
||||||
/* System generated locals */
|
|
||||||
int i__1, i__2;
|
|
||||||
Scalar d__1, d__2;
|
|
||||||
|
|
||||||
/* Local variables */
|
/* Local variables */
|
||||||
int i__, j, l, jj, nm1;
|
int i, j, l, jj, nm1;
|
||||||
Scalar tan__;
|
Scalar tan__;
|
||||||
int nmj;
|
int nmj;
|
||||||
Scalar cos__, sin__, tau, temp, giant, cotan;
|
Scalar cos__, sin__, tau, temp, giant, cotan;
|
||||||
@ -36,9 +27,8 @@ void ei_r1updt(int m, int n, Scalar *s, int /* ls */, const Scalar *u, Scalar *v
|
|||||||
/* move the nontrivial part of the last column of s into w. */
|
/* move the nontrivial part of the last column of s into w. */
|
||||||
|
|
||||||
l = jj;
|
l = jj;
|
||||||
i__1 = m;
|
for (i = n; i <= m; ++i) {
|
||||||
for (i__ = n; i__ <= i__1; ++i__) {
|
w[i] = s[l];
|
||||||
w[i__] = s[l];
|
|
||||||
++l;
|
++l;
|
||||||
/* L10: */
|
/* L10: */
|
||||||
}
|
}
|
||||||
@ -50,8 +40,7 @@ void ei_r1updt(int m, int n, Scalar *s, int /* ls */, const Scalar *u, Scalar *v
|
|||||||
if (nm1 < 1) {
|
if (nm1 < 1) {
|
||||||
goto L70;
|
goto L70;
|
||||||
}
|
}
|
||||||
i__1 = nm1;
|
for (nmj = 1; nmj <= nm1; ++nmj) {
|
||||||
for (nmj = 1; nmj <= i__1; ++nmj) {
|
|
||||||
j = n - nmj;
|
j = n - nmj;
|
||||||
jj -= m - j + 1;
|
jj -= m - j + 1;
|
||||||
w[j] = 0.;
|
w[j] = 0.;
|
||||||
@ -62,13 +51,11 @@ void ei_r1updt(int m, int n, Scalar *s, int /* ls */, const Scalar *u, Scalar *v
|
|||||||
/* determine a givens rotation which eliminates the */
|
/* determine a givens rotation which eliminates the */
|
||||||
/* j-th element of v. */
|
/* j-th element of v. */
|
||||||
|
|
||||||
if ((d__1 = v[n], ei_abs(d__1)) >= (d__2 = v[j], ei_abs(d__2))) {
|
if (ei_abs(v[n]) >= ei_abs(v[j]))
|
||||||
goto L20;
|
goto L20;
|
||||||
}
|
|
||||||
cotan = v[n] / v[j];
|
cotan = v[n] / v[j];
|
||||||
/* Computing 2nd power */
|
/* Computing 2nd power */
|
||||||
d__1 = cotan;
|
sin__ = Scalar(.5) / ei_sqrt(Scalar(0.25) + Scalar(0.25) * ei_abs2(cotan));
|
||||||
sin__ = p5 / ei_sqrt(p25 + p25 * (d__1 * d__1));
|
|
||||||
cos__ = sin__ * cotan;
|
cos__ = sin__ * cotan;
|
||||||
tau = 1.;
|
tau = 1.;
|
||||||
if (ei_abs(cos__) * giant > 1.) {
|
if (ei_abs(cos__) * giant > 1.) {
|
||||||
@ -78,8 +65,7 @@ void ei_r1updt(int m, int n, Scalar *s, int /* ls */, const Scalar *u, Scalar *v
|
|||||||
L20:
|
L20:
|
||||||
tan__ = v[j] / v[n];
|
tan__ = v[j] / v[n];
|
||||||
/* Computing 2nd power */
|
/* Computing 2nd power */
|
||||||
d__1 = tan__;
|
cos__ = Scalar(.5) / ei_sqrt(Scalar(0.25) + Scalar(0.25) * ei_abs2(tan__));
|
||||||
cos__ = p5 / ei_sqrt(p25 + p25 * (d__1 * d__1));
|
|
||||||
sin__ = cos__ * tan__;
|
sin__ = cos__ * tan__;
|
||||||
tau = sin__;
|
tau = sin__;
|
||||||
L30:
|
L30:
|
||||||
@ -93,10 +79,9 @@ L30:
|
|||||||
/* apply the transformation to s and extend the spike in w. */
|
/* apply the transformation to s and extend the spike in w. */
|
||||||
|
|
||||||
l = jj;
|
l = jj;
|
||||||
i__2 = m;
|
for (i = j; i <= m; ++i) {
|
||||||
for (i__ = j; i__ <= i__2; ++i__) {
|
temp = cos__ * s[l] - sin__ * w[i];
|
||||||
temp = cos__ * s[l] - sin__ * w[i__];
|
w[i] = sin__ * s[l] + cos__ * w[i];
|
||||||
w[i__] = sin__ * s[l] + cos__ * w[i__];
|
|
||||||
s[l] = temp;
|
s[l] = temp;
|
||||||
++l;
|
++l;
|
||||||
/* L40: */
|
/* L40: */
|
||||||
@ -109,9 +94,8 @@ L70:
|
|||||||
|
|
||||||
/* add the spike from the rank 1 update to w. */
|
/* add the spike from the rank 1 update to w. */
|
||||||
|
|
||||||
i__1 = m;
|
for (i = 1; i <= m; ++i) {
|
||||||
for (i__ = 1; i__ <= i__1; ++i__) {
|
w[i] += v[n] * u[i];
|
||||||
w[i__] += v[n] * u[i__];
|
|
||||||
/* L80: */
|
/* L80: */
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -121,8 +105,7 @@ L70:
|
|||||||
if (nm1 < 1) {
|
if (nm1 < 1) {
|
||||||
goto L140;
|
goto L140;
|
||||||
}
|
}
|
||||||
i__1 = nm1;
|
for (j = 1; j <= nm1; ++j) {
|
||||||
for (j = 1; j <= i__1; ++j) {
|
|
||||||
if (w[j] == 0.) {
|
if (w[j] == 0.) {
|
||||||
goto L120;
|
goto L120;
|
||||||
}
|
}
|
||||||
@ -130,13 +113,11 @@ L70:
|
|||||||
/* determine a givens rotation which eliminates the */
|
/* determine a givens rotation which eliminates the */
|
||||||
/* j-th element of the spike. */
|
/* j-th element of the spike. */
|
||||||
|
|
||||||
if ((d__1 = s[jj], ei_abs(d__1)) >= (d__2 = w[j], ei_abs(d__2))) {
|
if (ei_abs(s[jj]) >= ei_abs(w[j]))
|
||||||
goto L90;
|
goto L90;
|
||||||
}
|
|
||||||
cotan = s[jj] / w[j];
|
cotan = s[jj] / w[j];
|
||||||
/* Computing 2nd power */
|
/* Computing 2nd power */
|
||||||
d__1 = cotan;
|
sin__ = Scalar(.5) / ei_sqrt(Scalar(0.25) + Scalar(0.25) * ei_abs2(cotan));
|
||||||
sin__ = p5 / ei_sqrt(p25 + p25 * (d__1 * d__1));
|
|
||||||
cos__ = sin__ * cotan;
|
cos__ = sin__ * cotan;
|
||||||
tau = 1.;
|
tau = 1.;
|
||||||
if (ei_abs(cos__) * giant > 1.) {
|
if (ei_abs(cos__) * giant > 1.) {
|
||||||
@ -146,8 +127,7 @@ L70:
|
|||||||
L90:
|
L90:
|
||||||
tan__ = w[j] / s[jj];
|
tan__ = w[j] / s[jj];
|
||||||
/* Computing 2nd power */
|
/* Computing 2nd power */
|
||||||
d__1 = tan__;
|
cos__ = Scalar(.5) / ei_sqrt(Scalar(0.25) + Scalar(0.25) * ei_abs2(tan__));
|
||||||
cos__ = p5 / ei_sqrt(p25 + p25 * (d__1 * d__1));
|
|
||||||
sin__ = cos__ * tan__;
|
sin__ = cos__ * tan__;
|
||||||
tau = sin__;
|
tau = sin__;
|
||||||
L100:
|
L100:
|
||||||
@ -155,10 +135,9 @@ L100:
|
|||||||
/* apply the transformation to s and reduce the spike in w. */
|
/* apply the transformation to s and reduce the spike in w. */
|
||||||
|
|
||||||
l = jj;
|
l = jj;
|
||||||
i__2 = m;
|
for (i = j; i <= m; ++i) {
|
||||||
for (i__ = j; i__ <= i__2; ++i__) {
|
temp = cos__ * s[l] + sin__ * w[i];
|
||||||
temp = cos__ * s[l] + sin__ * w[i__];
|
w[i] = -sin__ * s[l] + cos__ * w[i];
|
||||||
w[i__] = -sin__ * s[l] + cos__ * w[i__];
|
|
||||||
s[l] = temp;
|
s[l] = temp;
|
||||||
++l;
|
++l;
|
||||||
/* L110: */
|
/* L110: */
|
||||||
@ -183,9 +162,8 @@ L140:
|
|||||||
/* move w back into the last column of the output s. */
|
/* move w back into the last column of the output s. */
|
||||||
|
|
||||||
l = jj;
|
l = jj;
|
||||||
i__1 = m;
|
for (i = n; i <= m; ++i) {
|
||||||
for (i__ = n; i__ <= i__1; ++i__) {
|
s[l] = w[i];
|
||||||
s[l] = w[i__];
|
|
||||||
++l;
|
++l;
|
||||||
/* L150: */
|
/* L150: */
|
||||||
}
|
}
|
||||||
|
@ -4,17 +4,11 @@ void ei_rwupdt(int n, Scalar *r__, int ldr,
|
|||||||
const Scalar *w, Scalar *b, Scalar *alpha, Scalar *cos__,
|
const Scalar *w, Scalar *b, Scalar *alpha, Scalar *cos__,
|
||||||
Scalar *sin__)
|
Scalar *sin__)
|
||||||
{
|
{
|
||||||
/* Initialized data */
|
|
||||||
|
|
||||||
#define p5 .5
|
|
||||||
#define p25 .25
|
|
||||||
|
|
||||||
/* System generated locals */
|
/* System generated locals */
|
||||||
int r_dim1, r_offset, i__1, i__2;
|
int r_dim1, r_offset;
|
||||||
Scalar d__1;
|
|
||||||
|
|
||||||
/* Local variables */
|
/* Local variables */
|
||||||
int i__, j, jm1;
|
int i, j, jm1;
|
||||||
Scalar tan__, temp, rowj, cotan;
|
Scalar tan__, temp, rowj, cotan;
|
||||||
|
|
||||||
/* Parameter adjustments */
|
/* Parameter adjustments */
|
||||||
@ -28,8 +22,7 @@ void ei_rwupdt(int n, Scalar *r__, int ldr,
|
|||||||
|
|
||||||
/* Function Body */
|
/* Function Body */
|
||||||
|
|
||||||
i__1 = n;
|
for (j = 1; j <= n; ++j) {
|
||||||
for (j = 1; j <= i__1; ++j) {
|
|
||||||
rowj = w[j];
|
rowj = w[j];
|
||||||
jm1 = j - 1;
|
jm1 = j - 1;
|
||||||
|
|
||||||
@ -39,11 +32,10 @@ void ei_rwupdt(int n, Scalar *r__, int ldr,
|
|||||||
if (jm1 < 1) {
|
if (jm1 < 1) {
|
||||||
goto L20;
|
goto L20;
|
||||||
}
|
}
|
||||||
i__2 = jm1;
|
for (i = 1; i <= jm1; ++i) {
|
||||||
for (i__ = 1; i__ <= i__2; ++i__) {
|
temp = cos__[i] * r__[i + j * r_dim1] + sin__[i] * rowj;
|
||||||
temp = cos__[i__] * r__[i__ + j * r_dim1] + sin__[i__] * rowj;
|
rowj = -sin__[i] * r__[i + j * r_dim1] + cos__[i] * rowj;
|
||||||
rowj = -sin__[i__] * r__[i__ + j * r_dim1] + cos__[i__] * rowj;
|
r__[i + j * r_dim1] = temp;
|
||||||
r__[i__ + j * r_dim1] = temp;
|
|
||||||
/* L10: */
|
/* L10: */
|
||||||
}
|
}
|
||||||
L20:
|
L20:
|
||||||
@ -55,20 +47,17 @@ L20:
|
|||||||
if (rowj == 0.) {
|
if (rowj == 0.) {
|
||||||
goto L50;
|
goto L50;
|
||||||
}
|
}
|
||||||
if ((d__1 = r__[j + j * r_dim1], ei_abs(d__1)) >= ei_abs(rowj)) {
|
if (ei_abs(r__[j + j * r_dim1]) >= ei_abs(rowj))
|
||||||
goto L30;
|
goto L30;
|
||||||
}
|
|
||||||
cotan = r__[j + j * r_dim1] / rowj;
|
cotan = r__[j + j * r_dim1] / rowj;
|
||||||
/* Computing 2nd power */
|
/* Computing 2nd power */
|
||||||
d__1 = cotan;
|
sin__[j] = Scalar(.5) / ei_sqrt(Scalar(0.25) + Scalar(0.25) * ei_abs2(cotan));
|
||||||
sin__[j] = p5 / ei_sqrt(p25 + p25 * (d__1 * d__1));
|
|
||||||
cos__[j] = sin__[j] * cotan;
|
cos__[j] = sin__[j] * cotan;
|
||||||
goto L40;
|
goto L40;
|
||||||
L30:
|
L30:
|
||||||
tan__ = rowj / r__[j + j * r_dim1];
|
tan__ = rowj / r__[j + j * r_dim1];
|
||||||
/* Computing 2nd power */
|
/* Computing 2nd power */
|
||||||
d__1 = tan__;
|
cos__[j] = Scalar(.5) / ei_sqrt(Scalar(0.25) + Scalar(0.25) * ei_abs2(tan__));
|
||||||
cos__[j] = p5 / ei_sqrt(p25 + p25 * (d__1 * d__1));
|
|
||||||
sin__[j] = cos__[j] * tan__;
|
sin__[j] = cos__[j] * tan__;
|
||||||
L40:
|
L40:
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user