?? sopla.c
字號:
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 + -