⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dopla.c

📁 提供矩阵类的函数库
💻 C
📖 第 1 页 / 共 2 页
字号:
   Computing MIN */
		i__3 = *kl + *ku, i__4 = *n - i__;
		i__1 = 0, i__2 = min(i__3,i__4);
		wu = (doublereal) max(i__1,i__2);
		mults += wl * (wu + 1.);
		adds += wl * wu;
/* L10: */
	    }

/*        xGBTRS:  N, NRHS, KL, KU  =>  M, N, KL, KU */

	} else if (lsamen_(&c__3, c3, "TRS")) {
/* Computing MAX   
   Computing MIN */
	    i__3 = *kl, i__4 = *m - 1;
	    i__1 = 0, i__2 = min(i__3,i__4);
	    wl = (doublereal) max(i__1,i__2);
/* Computing MAX   
   Computing MIN */
	    i__3 = *kl + *ku, i__4 = *m - 1;
	    i__1 = 0, i__2 = min(i__3,i__4);
	    wu = (doublereal) max(i__1,i__2);
	    mults = en * (em * (wl + 1. + wu) - (wl * (wl + 1.) + wu * (wu + 
		    1.)) * .5);
	    adds = en * (em * (wl + wu) - (wl * (wl + 1.) + wu * (wu + 1.)) * 
		    .5);

	}

/*     --------------------------------------   
       PO:  POsitive definite matrices   
       PP:  Positive definite Packed matrices   
       -------------------------------------- */

    } else if (lsamen_(&c__2, c2, "PO") || lsamen_(&
	    c__2, c2, "PP")) {

/*        xPOTRF:  N  =>  M */

	if (lsamen_(&c__3, c3, "TRF")) {
	    mults = em * (em * (em * .16666666666666666 + .5) + 
		    .33333333333333331);
	    adds = em * .16666666666666666 * (em * em - 1.);

/*        xPOTRS:  N, NRHS  =>  M, N */

	} else if (lsamen_(&c__3, c3, "TRS")) {
	    mults = en * (em * (em + 1.));
	    adds = en * (em * (em - 1.));

/*        xPOTRI:  N  =>  M */

	} else if (lsamen_(&c__3, c3, "TRI")) {
	    mults = em * (em * (em * .33333333333333331 + 1.) + 
		    .66666666666666663);
	    adds = em * (em * (em * .33333333333333331 - .5) + 
		    .16666666666666666);

	}

/*     ------------------------------------   
       PB:  Positive definite Band matrices   
       ------------------------------------ */

    } else if (lsamen_(&c__2, c2, "PB")) {

/*        xPBTRF:  N, K  =>  M, KL */

	if (lsamen_(&c__3, c3, "TRF")) {
	    mults = ek * (ek * (ek * -.33333333333333331 - 1.) - 
		    .66666666666666663) + em * (ek * (ek * .5 + 1.5) + 1.);
	    adds = ek * (ek * (ek * -.33333333333333331 - .5) - 
		    .16666666666666666) + em * (ek / 2. * (ek + 1.));

/*        xPBTRS:  N, NRHS, K  =>  M, N, KL */

	} else if (lsamen_(&c__3, c3, "TRS")) {
	    mults = en * ((em * 2 - ek) * (ek + 1.));
	    adds = en * (ek * (em * 2 - (ek + 1.)));

	}

/*     ----------------------------------   
       PT:  Positive definite Tridiagonal   
       ---------------------------------- */

    } else if (lsamen_(&c__2, c2, "PT")) {

/*        xPTTRF:  N  =>  M */

	if (lsamen_(&c__3, c3, "TRF")) {
	    mults = (em - 1) * 2;
	    adds = em - 1;

/*        xPTTRS:  N, NRHS  =>  M, N */

	} else if (lsamen_(&c__3, c3, "TRS")) {
	    mults = en * (em * 3 - 2);
	    adds = en * ((em - 1) * 2);

/*        xPTSV:  N, NRHS  =>  M, N */

	} else if (lsamen_(&c__3, c3, "SV ")) {
	    mults = (em - 1) * 2 + en * (em * 3 - 2);
	    adds = em - 1 + en * ((em - 1) * 2);
	}

/*     --------------------------------------------------------   
       SY:  SYmmetric indefinite matrices   
       SP:  Symmetric indefinite Packed matrices   
       HE:  HErmitian indefinite matrices (complex only)   
       HP:  Hermitian indefinite Packed matrices (complex only)   
       -------------------------------------------------------- */

    } else if (lsamen_(&c__2, c2, "SY") || lsamen_(&
	    c__2, c2, "SP") || lsamen_(&c__3, subnam, 
	    "CHE") || lsamen_(&c__3, subnam, "ZHE") || lsamen_(&c__3, subnam, "CHP") || lsamen_(&c__3, subnam, "ZHP")) 
	    {

/*        xSYTRF:  N  =>  M */

	if (lsamen_(&c__3, c3, "TRF")) {
	    mults = em * (em * (em * .16666666666666666 + .5) + 
		    3.3333333333333335);
	    adds = em / 6. * (em * em - 1.);

/*        xSYTRS:  N, NRHS  =>  M, N */

	} else if (lsamen_(&c__3, c3, "TRS")) {
	    mults = en * em * em;
	    adds = en * (em * (em - 1.));

/*        xSYTRI:  N  =>  M */

	} else if (lsamen_(&c__3, c3, "TRI")) {
	    mults = em * (em * em * .33333333333333331 + .66666666666666663);
	    adds = em * (em * em * .33333333333333331 - .33333333333333331);

/*        xSYTRD, xSYTD2:  N  =>  M */

	} else if (lsamen_(&c__3, c3, "TRD") || lsamen_(
		&c__3, c3, "TD2")) {
	    if (*m == 1) {
		mults = 0.;
		adds = 0.;
	    } else {
		mults = em * (em * (em * .66666666666666663 + 2.5) - 
			.16666666666666666) - 15.;
		adds = em * (em * (em * .66666666666666663 + 1.) - 
			2.6666666666666665) - 4.;
	    }
	}

/*     -------------------   
       Triangular matrices   
       ------------------- */

    } else if (lsamen_(&c__2, c2, "TR") || lsamen_(&
	    c__2, c2, "TP")) {

/*        xTRTRS:  N, NRHS  =>  M, N */

	if (lsamen_(&c__3, c3, "TRS")) {
	    mults = en * em * (em + 1.) / 2.;
	    adds = en * em * (em - 1.) / 2.;

/*        xTRTRI:  N  =>  M */

	} else if (lsamen_(&c__3, c3, "TRI")) {
	    mults = em * (em * (em * .16666666666666666 + .5) + 
		    .33333333333333331);
	    adds = em * (em * (em * .16666666666666666 - .5) + 
		    .33333333333333331);

	}

    } else if (lsamen_(&c__2, c2, "TB")) {

/*        xTBTRS:  N, NRHS, K  =>  M, N, KL */

	if (lsamen_(&c__3, c3, "TRS")) {
	    mults = en * (em * (em + 1.) / 2. - (em - ek - 1.) * (em - ek) / 
		    2.);
	    adds = en * (em * (em - 1.) / 2. - (em - ek - 1.) * (em - ek) / 
		    2.);
	}

/*     --------------------   
       Trapezoidal matrices   
       -------------------- */

    } else if (lsamen_(&c__2, c2, "TZ")) {

/*        xTZRQF:  M, N => M, N */

	if (lsamen_(&c__3, c3, "RQF")) {
	    emn = (doublereal) min(*m,*n);
	    mults = em * 3 * (en - em + 1) + (en * 2 - em * 2 + 3) * (em * em 
		    - emn * (emn + 1) / 2);
	    adds = (en - em + 1) * (em + em * 2 * em - emn * (emn + 1));
	}

/*     -------------------   
       Orthogonal matrices   
       ------------------- */

    } else if (sord && lsamen_(&c__2, c2, "OR") || corz 
	    && lsamen_(&c__2, c2, "UN")) {

/*        -MQR, -MLQ, -MQL, or -MRQ:  M, N, K, SIDE  =>  M, N, KL, KU   
             where KU<= 0 indicates SIDE = 'L'   
             and   KU> 0  indicates SIDE = 'R' */

	if (lsamen_(&c__3, c3, "MQR") || lsamen_(&c__3, 
		c3, "MLQ") || lsamen_(&c__3, c3, "MQL") || lsamen_(&c__3, c3, "MRQ")) {
	    if (*ku <= 0) {
		mults = ek * en * (em * 2. + 2. - ek);
		adds = ek * en * (em * 2. + 1. - ek);
	    } else {
		mults = ek * (em * (en * 2. - ek) + (em + en + (1. - ek) / 2.)
			);
		adds = ek * em * (en * 2. + 1. - ek);
	    }

/*        -GQR or -GQL:  M, N, K  =>  M, N, KL */

	} else if (lsamen_(&c__3, c3, "GQR") || lsamen_(
		&c__3, c3, "GQL")) {
	    mults = ek * (en * 2. - ek - 1.6666666666666667 + (em * 2. * en + 
		    ek * (ek * .66666666666666663 - em - en)));
	    adds = ek * (en - em + .33333333333333331 + (em * 2. * en + ek * (
		    ek * .66666666666666663 - em - en)));

/*        -GLQ or -GRQ:  M, N, K  =>  M, N, KL */

	} else if (lsamen_(&c__3, c3, "GLQ") || lsamen_(
		&c__3, c3, "GRQ")) {
	    mults = ek * (em + en - ek - .66666666666666663 + (em * 2. * en + 
		    ek * (ek * .66666666666666663 - em - en)));
	    adds = ek * (em - en + .33333333333333331 + (em * 2. * en + ek * (
		    ek * .66666666666666663 - em - en)));

	}

    }

    ret_val = mulfac * mults + addfac * adds;

    return ret_val;

/*     End of DOPLA */

} /* dopla_ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -