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

📄 sopla.c

📁 著名的LAPACK矩阵计算软件包, 是比较新的版本, 一般用到矩阵分解的朋友也许会用到
💻 C
📖 第 1 页 / 共 2 页
字号:
		wl = (real) max(i__1,i__2);
/* Computing MAX   
   Computing MIN */
		i__3 = *kl + *ku, i__4 = *n - i__;
		i__1 = 0, i__2 = min(i__3,i__4);
		wu = (real) max(i__1,i__2);
		mults += wl * (wu + 1.f);
		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 = (real) 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 = (real) max(i__1,i__2);
	    mults = en * (em * (wl + 1.f + wu) - (wl * (wl + 1.f) + wu * (wu 
		    + 1.f)) * .5f);
	    adds = en * (em * (wl + wu) - (wl * (wl + 1.f) + wu * (wu + 1.f)) 
		    * .5f);

	}

/*     --------------------------------------   
       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 * .16666666666666666f + .5f) + 
		    .33333333333333331f);
	    adds = em * .16666666666666666f * (em * em - 1.f);

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

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

/*        xPOTRI:  N  =>  M */

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

	}

/*     ------------------------------------   
       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 * -.33333333333333331f - 1.f) - 
		    .66666666666666663f) + em * (ek * (ek * .5f + 1.5f) + 1.f)
		    ;
	    adds = ek * (ek * (ek * -.33333333333333331f - .5f) - 
		    .16666666666666666f) + em * (ek / 2.f * (ek + 1.f));

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

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

	}

/*     ----------------------------------   
       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 * .16666666666666666f + .5f) + 
		    3.3333333333333335f);
	    adds = em / 6.f * (em * em - 1.f);

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

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

/*        xSYTRI:  N  =>  M */

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

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

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

/*     -------------------   
       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.f) / 2.f;
	    adds = en * em * (em - 1.f) / 2.f;

/*        xTRTRI:  N  =>  M */

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

	}

    } 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.f) / 2.f - (em - ek - 1.f) * (em - ek) 
		    / 2.f);
	    adds = en * (em * (em - 1.f) / 2.f - (em - ek - 1.f) * (em - ek) /
		     2.f);
	}

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

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

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

	if (lsamen_(&c__3, c3, "RQF")) {
	    emn = (real) 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.f + 2.f - ek);
		adds = ek * en * (em * 2.f + 1.f - ek);
	    } else {
		mults = ek * (em * (en * 2.f - ek) + (em + en + (1.f - ek) / 
			2.f));
		adds = ek * em * (en * 2.f + 1.f - 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.f - ek - 1.6666666666666667f + (em * 2.f * 
		    en + ek * (ek * .66666666666666663f - em - en)));
	    adds = ek * (en - em + .33333333333333331f + (em * 2.f * en + ek *
		     (ek * .66666666666666663f - 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 - .66666666666666663f + (em * 2.f * en 
		    + ek * (ek * .66666666666666663f - em - en)));
	    adds = ek * (em - en + .33333333333333331f + (em * 2.f * en + ek *
		     (ek * .66666666666666663f - em - en)));

	}

    }

    ret_val = mulfac * mults + addfac * adds;

    return ret_val;

/*     End of SOPLA */

} /* sopla_ */

⌨️ 快捷键说明

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