📄 dopla.c
字号:
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 + -