ztrmv.c

来自「InsightToolkit-1.4.0(有大量的优化算法程序)」· C语言 代码 · 共 391 行 · 第 1/2 页

C
391
字号
                            z__1.i = x[jx].r * a[i__1].i + x[jx].i * a[i__1].r;
                            x[jx].r = z__1.r, x[jx].i = z__1.i;
                        }
                    }
                    jx += *incx;
                }
            }
        } else {
            if (*incx == 1) {
                for (j = *n - 1; j >= 0; --j) {

                    if (x[j].r != 0. || x[j].i != 0.) {

                        temp.r = x[j].r, temp.i = x[j].i;
                        for (i = *n - 1; i > j; --i) {
                            i__1 = i + j * *lda;
                            x[i].r += temp.r * a[i__1].r - temp.i * a[i__1].i,
                            x[i].i += temp.r * a[i__1].i + temp.i * a[i__1].r;
                        }
                        if (nounit) {
                            i__1 = j + j * *lda;
                            z__1.r = x[j].r * a[i__1].r - x[j].i * a[i__1].i,
                            z__1.i = x[j].r * a[i__1].i + x[j].i * a[i__1].r;
                            x[j].r = z__1.r, x[j].i = z__1.i;
                        }
                    }
                }
            } else {
                kx += (*n - 1) * *incx;
                jx = kx;
                for (j = *n - 1; j >= 0; --j) {
                    if (x[jx].r != 0. || x[jx].i != 0.) {
                        temp.r = x[jx].r, temp.i = x[jx].i;
                        ix = kx;
                        for (i = *n - 1; i > j; --i) {
                            i__1 = i + j * *lda;
                            x[ix].r += temp.r * a[i__1].r - temp.i * a[i__1].i,
                            x[ix].i += temp.r * a[i__1].i + temp.i * a[i__1].r;
                            ix -= *incx;
                        }
                        if (nounit) {
                            i__1 = j + j * *lda;
                            x[jx].r = x[jx].r * a[i__1].r - x[jx].i * a[i__1].i,
                            x[jx].i = x[jx].r * a[i__1].i + x[jx].i * a[i__1].r;
                        }
                    }
                    jx -= *incx;
                }
            }
        }
    } else {

/*        Form  x := A'*x  or  x := conjg( A' )*x. */

        if (lsame_(uplo, "U")) {
            if (*incx == 1) {
                for (j = *n - 1; j >= 0; --j) {

                    temp.r = x[j].r, temp.i = x[j].i;
                    if (noconj) {
                        if (nounit) {
                            i__1 = j + j * *lda;
                            z__1.r = temp.r * a[i__1].r - temp.i * a[i__1].i,
                            z__1.i = temp.i * a[i__1].r + temp.r * a[i__1].i;
                            temp.r = z__1.r, temp.i = z__1.i;
                        }
                        for (i = j - 1; i >= 0; --i) {
                            i__1 = i + j * *lda;
                            temp.r += a[i__1].r * x[i].r - a[i__1].i * x[i].i,
                            temp.i += a[i__1].r * x[i].i + a[i__1].i * x[i].r;
                        }
                    } else {
                        if (nounit) {
                            i__1 = j + j * *lda;
                            z__1.r = temp.r * a[i__1].r + temp.i * a[i__1].i,
                            z__1.i = temp.i * a[i__1].r - temp.r * a[i__1].i;
                            temp.r = z__1.r, temp.i = z__1.i;
                        }
                        for (i = j - 1; i >= 0; --i) {
                            i__1 = i + j * *lda;
                            temp.r += a[i__1].r * x[i].r + a[i__1].i * x[i].i,
                            temp.i += a[i__1].r * x[i].i - a[i__1].i * x[i].r;
                        }
                    }

                    x[j].r = temp.r, x[j].i = temp.i;
                }
            } else {
                jx = kx + (*n - 1) * *incx;
                for (j = *n - 1; j >= 0; --j) {
                    temp.r = x[jx].r, temp.i = x[jx].i;
                    ix = jx;
                    if (noconj) {
                        if (nounit) {
                            i__1 = j + j * *lda;
                            z__1.r = temp.r * a[i__1].r - temp.i * a[i__1].i,
                            z__1.i = temp.i * a[i__1].r + temp.r * a[i__1].i;
                            temp.r = z__1.r, temp.i = z__1.i;
                        }
                        for (i = j - 1; i >= 0; --i) {
                            ix -= *incx;
                            i__1 = i + j * *lda;
                            temp.r += a[i__1].r * x[ix].r - a[i__1].i * x[ix].i,
                            temp.i += a[i__1].r * x[ix].i + a[i__1].i * x[ix].r;
                        }
                    } else {
                        if (nounit) {
                            i__1 = j + j * *lda;
                            z__1.r = temp.r * a[i__1].r + temp.i * a[i__1].i,
                            z__1.i = temp.i * a[i__1].r - temp.r * a[i__1].i;
                            temp.r = z__1.r, temp.i = z__1.i;
                        }
                        for (i = j - 1; i >= 0; --i) {
                            ix -= *incx;
                            i__1 = i + j * *lda;
                            temp.r += a[i__1].r * x[ix].r + a[i__1].i * x[ix].i,
                            temp.i += a[i__1].r * x[ix].i - a[i__1].i * x[ix].r;
                        }
                    }
                    x[jx].r = temp.r, x[jx].i = temp.i;
                    jx -= *incx;
                }
            }
        } else {
            if (*incx == 1) {
                for (j = 0; j < *n; ++j) {
                    temp.r = x[j].r, temp.i = x[j].i;
                    if (noconj) {
                        if (nounit) {
                            i__1 = j + j * *lda;
                            z__1.r = temp.r * a[i__1].r - temp.i * a[i__1].i,
                            z__1.i = temp.i * a[i__1].r + temp.r * a[i__1].i;
                            temp.r = z__1.r, temp.i = z__1.i;
                        }
                        for (i = j + 1; i < *n; ++i) {
                            i__1 = i + j * *lda;
                            temp.r += a[i__1].r * x[i].r - a[i__1].i * x[i].i,
                            temp.i += a[i__1].r * x[i].i + a[i__1].i * x[i].r;
                        }
                    } else {
                        if (nounit) {
                            i__1 = j + j * *lda;
                            z__1.r = temp.r * a[i__1].r + temp.i * a[i__1].i,
                            z__1.i = temp.i * a[i__1].r - temp.r * a[i__1].i;
                            temp.r = z__1.r, temp.i = z__1.i;
                        }
                        for (i = j + 1; i < *n; ++i) {
                            i__1 = i + j * *lda;
                            temp.r += a[i__1].r * x[i].r + a[i__1].i * x[i].i,
                            temp.i += a[i__1].r * x[i].i - a[i__1].i * x[i].r;
                        }
                    }

                    x[j].r = temp.r, x[j].i = temp.i;
                }
            } else {
                jx = kx;
                for (j = 0; j < *n; ++j) {
                    temp.r = x[jx].r, temp.i = x[jx].i;
                    ix = jx;
                    if (noconj) {
                        if (nounit) {
                            i__1 = j + j * *lda;
                            z__1.r = temp.r * a[i__1].r - temp.i * a[i__1].i,
                            z__1.i = temp.i * a[i__1].r + temp.r * a[i__1].i;
                            temp.r = z__1.r, temp.i = z__1.i;
                        }
                        for (i = j + 1; i < *n; ++i) {
                            ix += *incx;
                            i__1 = i + j * *lda;
                            temp.r += a[i__1].r * x[ix].r - a[i__1].i * x[ix].i,
                            temp.i += a[i__1].r * x[ix].i + a[i__1].i * x[ix].r;
                        }
                    } else {
                        if (nounit) {
                            i__1 = j + j * *lda;
                            z__1.r = temp.r * a[i__1].r + temp.i * a[i__1].i,
                            z__1.i = temp.i * a[i__1].r - temp.r * a[i__1].i;
                            temp.r = z__1.r, temp.i = z__1.i;
                        }
                        for (i = j + 1; i < *n; ++i) {
                            ix += *incx;
                            i__1 = i + j * *lda;
                            temp.r += a[i__1].r * x[ix].r + a[i__1].i * x[ix].i,
                            temp.i += a[i__1].r * x[ix].i - a[i__1].i * x[ix].r;
                        }
                    }
                    x[jx].r = temp.r, x[jx].i = temp.i;
                    jx += *incx;
                }
            }
        }
    }
} /* ztrmv_ */

⌨️ 快捷键说明

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