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 + -
显示快捷键?