slarfb.c
来自「NIST Handwriting OCR Testbed」· C语言 代码 · 共 691 行 · 第 1/2 页
C
691 行
/* L90: */ } } else if (lsame_(side, "R")) {/* Form C * H or C * H' where C = ( C1 C2 ) W := C * V = (C1*V1 + C2*V2) (stored in WORK) W := C2 */ i__1 = *k; for (j = 1; j <= *k; ++j) { scopy_(m, &C(1,*n-*k+j), &c__1, &WORK(1,j), &c__1);/* L100: */ }/* W := W * V2 */ strmm_("Right", "Upper", "No transpose", "Unit", m, k, &c_b14, &V(*n-*k+1,1), ldv, &WORK(1,1), ldwork); if (*n > *k) {/* W := W + C1 * V1 */ i__1 = *n - *k; sgemm_("No transpose", "No transpose", m, k, &i__1, & c_b14, &C(1,1), ldc, &V(1,1), ldv, & c_b14, &WORK(1,1), ldwork); }/* W := W * T or W * T' */ strmm_("Right", "Lower", trans, "Non-unit", m, k, &c_b14, &T(1,1), ldt, &WORK(1,1), ldwork);/* C := C - W * V' */ if (*n > *k) {/* C1 := C1 - W * V1' */ i__1 = *n - *k; sgemm_("No transpose", "Transpose", m, &i__1, k, &c_b25, & WORK(1,1), ldwork, &V(1,1), ldv, & c_b14, &C(1,1), ldc); }/* W := W * V2' */ strmm_("Right", "Upper", "Transpose", "Unit", m, k, &c_b14, & V(*n-*k+1,1), ldv, &WORK(1,1), ldwork);/* C2 := C2 - W */ i__1 = *k; for (j = 1; j <= *k; ++j) { i__2 = *m; for (i = 1; i <= *m; ++i) { C(i,*n-*k+j) -= WORK(i,j);/* L110: */ }/* L120: */ } } } } else if (lsame_(storev, "R")) { if (lsame_(direct, "F")) {/* Let V = ( V1 V2 ) (V1: first K columns) where V1 is unit upper triangular. */ if (lsame_(side, "L")) {/* Form H * C or H' * C where C = ( C1 ) ( C2 ) W := C' * V' = (C1'*V1' + C2'*V2') (stored in WORK) W := C1' */ i__1 = *k; for (j = 1; j <= *k; ++j) { scopy_(n, &C(j,1), ldc, &WORK(1,j), & c__1);/* L130: */ }/* W := W * V1' */ strmm_("Right", "Upper", "Transpose", "Unit", n, k, &c_b14, & V(1,1), ldv, &WORK(1,1), ldwork); if (*m > *k) {/* W := W + C2'*V2' */ i__1 = *m - *k; sgemm_("Transpose", "Transpose", n, k, &i__1, &c_b14, &C(*k+1,1), ldc, &V(1,*k+1), ldv, &c_b14, &WORK(1,1), ldwork); }/* W := W * T' or W * T */ strmm_("Right", "Upper", transt, "Non-unit", n, k, &c_b14, &T(1,1), ldt, &WORK(1,1), ldwork);/* C := C - V' * W' */ if (*m > *k) {/* C2 := C2 - V2' * W' */ i__1 = *m - *k; sgemm_("Transpose", "Transpose", &i__1, n, k, &c_b25, &V(1,*k+1), ldv, &WORK(1,1), ldwork, &c_b14, &C(*k+1,1), ldc); }/* W := W * V1 */ strmm_("Right", "Upper", "No transpose", "Unit", n, k, &c_b14, &V(1,1), ldv, &WORK(1,1), ldwork);/* C1 := C1 - W' */ i__1 = *k; for (j = 1; j <= *k; ++j) { i__2 = *n; for (i = 1; i <= *n; ++i) { C(j,i) -= WORK(i,j);/* L140: */ }/* L150: */ } } else if (lsame_(side, "R")) {/* Form C * H or C * H' where C = ( C1 C2 ) W := C * V' = (C1*V1' + C2*V2') (stored in WORK) W := C1 */ i__1 = *k; for (j = 1; j <= *k; ++j) { scopy_(m, &C(1,j), &c__1, &WORK(1,j), &c__1);/* L160: */ }/* W := W * V1' */ strmm_("Right", "Upper", "Transpose", "Unit", m, k, &c_b14, & V(1,1), ldv, &WORK(1,1), ldwork); if (*n > *k) {/* W := W + C2 * V2' */ i__1 = *n - *k; sgemm_("No transpose", "Transpose", m, k, &i__1, &c_b14, & C(1,*k+1), ldc, &V(1,*k+1), ldv, &c_b14, &WORK(1,1), ldwork); }/* W := W * T or W * T' */ strmm_("Right", "Upper", trans, "Non-unit", m, k, &c_b14, &T(1,1), ldt, &WORK(1,1), ldwork);/* C := C - W * V */ if (*n > *k) {/* C2 := C2 - W * V2 */ i__1 = *n - *k; sgemm_("No transpose", "No transpose", m, &i__1, k, & c_b25, &WORK(1,1), ldwork, &V(1,*k+1), ldv, &c_b14, &C(1,*k+1), ldc); }/* W := W * V1 */ strmm_("Right", "Upper", "No transpose", "Unit", m, k, &c_b14, &V(1,1), ldv, &WORK(1,1), ldwork);/* C1 := C1 - W */ i__1 = *k; for (j = 1; j <= *k; ++j) { i__2 = *m; for (i = 1; i <= *m; ++i) { C(i,j) -= WORK(i,j);/* L170: */ }/* L180: */ } } } else {/* Let V = ( V1 V2 ) (V2: last K columns) where V2 is unit lower triangular. */ if (lsame_(side, "L")) {/* Form H * C or H' * C where C = ( C1 ) ( C2 ) W := C' * V' = (C1'*V1' + C2'*V2') (stored in WORK) W := C2' */ i__1 = *k; for (j = 1; j <= *k; ++j) { scopy_(n, &C(*m-*k+j,1), ldc, &WORK(1,j), &c__1);/* L190: */ }/* W := W * V2' */ strmm_("Right", "Lower", "Transpose", "Unit", n, k, &c_b14, & V(1,*m-*k+1), ldv, &WORK(1,1) , ldwork); if (*m > *k) {/* W := W + C1'*V1' */ i__1 = *m - *k; sgemm_("Transpose", "Transpose", n, k, &i__1, &c_b14, &C(1,1), ldc, &V(1,1), ldv, &c_b14, &WORK(1,1), ldwork); }/* W := W * T' or W * T */ strmm_("Right", "Lower", transt, "Non-unit", n, k, &c_b14, &T(1,1), ldt, &WORK(1,1), ldwork);/* C := C - V' * W' */ if (*m > *k) {/* C1 := C1 - V1' * W' */ i__1 = *m - *k; sgemm_("Transpose", "Transpose", &i__1, n, k, &c_b25, &V(1,1), ldv, &WORK(1,1), ldwork, & c_b14, &C(1,1), ldc); }/* W := W * V2 */ strmm_("Right", "Lower", "No transpose", "Unit", n, k, &c_b14, &V(1,*m-*k+1), ldv, &WORK(1,1), ldwork);/* C2 := C2 - W' */ i__1 = *k; for (j = 1; j <= *k; ++j) { i__2 = *n; for (i = 1; i <= *n; ++i) { C(*m-*k+j,i) -= WORK(i,j) ;/* L200: */ }/* L210: */ } } else if (lsame_(side, "R")) {/* Form C * H or C * H' where C = ( C1 C2 ) W := C * V' = (C1*V1' + C2*V2') (stored in WORK) W := C2 */ i__1 = *k; for (j = 1; j <= *k; ++j) { scopy_(m, &C(1,*n-*k+j), &c__1, &WORK(1,j), &c__1);/* L220: */ }/* W := W * V2' */ strmm_("Right", "Lower", "Transpose", "Unit", m, k, &c_b14, & V(1,*n-*k+1), ldv, &WORK(1,1) , ldwork); if (*n > *k) {/* W := W + C1 * V1' */ i__1 = *n - *k; sgemm_("No transpose", "Transpose", m, k, &i__1, &c_b14, & C(1,1), ldc, &V(1,1), ldv, &c_b14, & WORK(1,1), ldwork); }/* W := W * T or W * T' */ strmm_("Right", "Lower", trans, "Non-unit", m, k, &c_b14, &T(1,1), ldt, &WORK(1,1), ldwork);/* C := C - W * V */ if (*n > *k) {/* C1 := C1 - W * V1 */ i__1 = *n - *k; sgemm_("No transpose", "No transpose", m, &i__1, k, & c_b25, &WORK(1,1), ldwork, &V(1,1), ldv, &c_b14, &C(1,1), ldc); }/* W := W * V2 */ strmm_("Right", "Lower", "No transpose", "Unit", m, k, &c_b14, &V(1,*n-*k+1), ldv, &WORK(1,1), ldwork);/* C1 := C1 - W */ i__1 = *k; for (j = 1; j <= *k; ++j) { i__2 = *m; for (i = 1; i <= *m; ++i) { C(i,*n-*k+j) -= WORK(i,j);/* L230: */ }/* L240: */ } } } } return 0;/* End of SLARFB */} /* slarfb_ */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?