Statistiques
| Révision :

root / www / HPL_dtrsm.html

Historique | Voir | Annoter | Télécharger (5,79 ko)

1 1 equemene
<HTML>
2 1 equemene
<HEAD>
3 1 equemene
<TITLE>HPL_dtrsm HPL 2.0 Library Functions September 10, 2008</TITLE>
4 1 equemene
</HEAD>
5 1 equemene
6 1 equemene
<BODY BGCOLOR="WHITE" TEXT = "#000000" LINK = "#0000ff" VLINK = "#000099"
7 1 equemene
      ALINK = "#ffff00">
8 1 equemene
9 1 equemene
<H1>Name</H1>
10 1 equemene
<B>HPL_dtrsm</B> B := A^{-1} * B  or  B := B * A^{-1}.
11 1 equemene
12 1 equemene
<H1>Synopsis</H1>
13 1 equemene
<CODE>#include "hpl.h"</CODE><BR><BR>
14 1 equemene
<CODE>void</CODE>
15 1 equemene
<CODE>HPL_dtrsm(</CODE>
16 1 equemene
<CODE>const enum HPL_ORDER</CODE>
17 1 equemene
<CODE>ORDER</CODE>,
18 1 equemene
<CODE>const enum HPL_SIDE</CODE>
19 1 equemene
<CODE>SIDE</CODE>,
20 1 equemene
<CODE>const enum HPL_UPLO</CODE>
21 1 equemene
<CODE>UPLO</CODE>,
22 1 equemene
<CODE>const enum HPL_TRANS</CODE>
23 1 equemene
<CODE>TRANS</CODE>,
24 1 equemene
<CODE>const enum HPL_DIAG</CODE>
25 1 equemene
<CODE>DIAG</CODE>,
26 1 equemene
<CODE>const int</CODE>
27 1 equemene
<CODE>M</CODE>,
28 1 equemene
<CODE>const int</CODE>
29 1 equemene
<CODE>N</CODE>,
30 1 equemene
<CODE>const double</CODE>
31 1 equemene
<CODE>ALPHA</CODE>,
32 1 equemene
<CODE>const double *</CODE>
33 1 equemene
<CODE>A</CODE>,
34 1 equemene
<CODE>const int</CODE>
35 1 equemene
<CODE>LDA</CODE>,
36 1 equemene
<CODE>double *</CODE>
37 1 equemene
<CODE>B</CODE>,
38 1 equemene
<CODE>const int</CODE>
39 1 equemene
<CODE>LDB</CODE>
40 1 equemene
<CODE>);</CODE>
41 1 equemene
42 1 equemene
<H1>Description</H1>
43 1 equemene
<B>HPL_dtrsm</B>
44 1 equemene
solves one of the matrix equations
45 1 equemene
46 1 equemene
   op( A ) * X = alpha * B,   or  X * op( A ) = alpha * B,
47 1 equemene
48 1 equemene
where alpha is a scalar, X and B are m by n matrices, A is a unit, or
49 1 equemene
non-unit, upper or lower triangular matrix and op(A) is one of
50 1 equemene
51 1 equemene
   op( A ) = A   or   op( A ) = A^T.
52 1 equemene
53 1 equemene
The matrix X is overwritten on B.
54 1 equemene
55 1 equemene
No test for  singularity  or  near-singularity  is included  in  this
56 1 equemene
routine. Such tests must be performed before calling this routine.
57 1 equemene
58 1 equemene
<H1>Arguments</H1>
59 1 equemene
<PRE>
60 1 equemene
ORDER   (local input)                 const enum HPL_ORDER
61 1 equemene
        On entry, ORDER  specifies the storage format of the operands
62 1 equemene
        as follows:
63 1 equemene
           ORDER = HplRowMajor,
64 1 equemene
           ORDER = HplColumnMajor.
65 1 equemene
</PRE>
66 1 equemene
<PRE>
67 1 equemene
SIDE    (local input)                 const enum HPL_SIDE
68 1 equemene
        On entry, SIDE  specifies  whether  op(A) appears on the left
69 1 equemene
        or right of X as follows:
70 1 equemene
           SIDE==HplLeft    op( A ) * X = alpha * B,
71 1 equemene
           SIDE==HplRight   X * op( A ) = alpha * B.
72 1 equemene
</PRE>
73 1 equemene
<PRE>
74 1 equemene
UPLO    (local input)                 const enum HPL_UPLO
75 1 equemene
        On  entry,   UPLO   specifies  whether  the  upper  or  lower
76 1 equemene
        triangular  part  of the array  A  is to be referenced.  When
77 1 equemene
        UPLO==HplUpper, only  the upper triangular part of A is to be
78 1 equemene
        referenced, otherwise only the lower triangular part of A is
79 1 equemene
        to be referenced.
80 1 equemene
</PRE>
81 1 equemene
<PRE>
82 1 equemene
TRANS   (local input)                 const enum HPL_TRANS
83 1 equemene
        On entry, TRANSA  specifies the form of  op(A)  to be used in
84 1 equemene
        the matrix-matrix operation follows:
85 1 equemene
           TRANSA==HplNoTrans    : op( A ) = A,
86 1 equemene
           TRANSA==HplTrans      : op( A ) = A^T,
87 1 equemene
           TRANSA==HplConjTrans  : op( A ) = A^T.
88 1 equemene
</PRE>
89 1 equemene
<PRE>
90 1 equemene
DIAG    (local input)                 const enum HPL_DIAG
91 1 equemene
        On entry,  DIAG  specifies  whether  A  is unit triangular or
92 1 equemene
        not. When DIAG==HplUnit,  A is assumed to be unit triangular,
93 1 equemene
        and otherwise, A is not assumed to be unit triangular.
94 1 equemene
</PRE>
95 1 equemene
<PRE>
96 1 equemene
M       (local input)                 const int
97 1 equemene
        On entry,  M  specifies  the number of rows of the  matrix B.
98 1 equemene
        M must be at least zero.
99 1 equemene
</PRE>
100 1 equemene
<PRE>
101 1 equemene
N       (local input)                 const int
102 1 equemene
        On entry, N  specifies the number of columns of the matrix B.
103 1 equemene
        N must be at least zero.
104 1 equemene
</PRE>
105 1 equemene
<PRE>
106 1 equemene
ALPHA   (local input)                 const double
107 1 equemene
        On entry, ALPHA specifies the scalar alpha.   When  ALPHA  is
108 1 equemene
        supplied  as  zero then the elements of the matrix B need not
109 1 equemene
        be set on input.
110 1 equemene
</PRE>
111 1 equemene
<PRE>
112 1 equemene
A       (local input)                 const double *
113 1 equemene
        On entry,  A  points  to an array of size equal to or greater
114 1 equemene
        than LDA * k,  where  k is m  when  SIDE==HplLeft  and  is  n
115 1 equemene
        otherwise.  Before  entry  with  UPLO==HplUpper,  the leading
116 1 equemene
        k by k upper triangular  part of the array A must contain the
117 1 equemene
        upper triangular  matrix and the  strictly  lower  triangular
118 1 equemene
        part of A is not referenced.  When  UPLO==HplLower on  entry,
119 1 equemene
        the  leading k by k lower triangular part of the array A must
120 1 equemene
        contain the lower triangular matrix  and  the  strictly upper
121 1 equemene
        triangular part of A is not referenced.
122 1 equemene
123 1 equemene
        Note that  when  DIAG==HplUnit,  the  diagonal elements of  A
124 1 equemene
        not referenced  either,  but are assumed to be unity.
125 1 equemene
</PRE>
126 1 equemene
<PRE>
127 1 equemene
LDA     (local input)                 const int
128 1 equemene
        On entry,  LDA  specifies  the  leading  dimension  of  A  as
129 1 equemene
        declared  in  the  calling  (sub) program.  LDA  must  be  at
130 1 equemene
        least MAX(1,m) when SIDE==HplLeft, and MAX(1,n) otherwise.
131 1 equemene
</PRE>
132 1 equemene
<PRE>
133 1 equemene
B       (local input/output)          double *
134 1 equemene
        On entry,  B  points  to an array of size equal to or greater
135 1 equemene
        than LDB * n.  Before entry, the leading  m by n  part of the
136 1 equemene
        array B must contain the matrix  B, except when beta is zero,
137 1 equemene
        in which case B need not be set on entry.  On exit, the array
138 1 equemene
        B is overwritten by the m by n solution matrix.
139 1 equemene
</PRE>
140 1 equemene
<PRE>
141 1 equemene
LDB     (local input)                 const int
142 1 equemene
        On entry,  LDB  specifies  the  leading  dimension  of  B  as
143 1 equemene
        declared  in  the  calling  (sub) program.  LDB  must  be  at
144 1 equemene
        least MAX(1,m).
145 1 equemene
</PRE>
146 1 equemene
147 1 equemene
<H1>Example</H1>
148 1 equemene
<CODE>#include "hpl.h"</CODE><BR><BR>
149 1 equemene
<PRE>
150 1 equemene
int main(int argc, char *argv[])
151 1 equemene
{
152 1 equemene
   double a[2*2], b[2*2];
153 1 equemene
   a[0] = 4.0; a[1] = 1.0; a[2] = 2.0; a[3] = 5.0;
154 1 equemene
   b[0] = 2.0; b[1] = 1.0; b[2] = 1.0; b[3] = 2.0;
155 1 equemene
   HPL_dtrsm( HplColumnMajor, HplLeft, HplUpper,
156 1 equemene
              HplNoTrans, HplNonUnit, 2, 2, 2.0,
157 1 equemene
              a, 2, b, 2 );
158 1 equemene
   printf("  [%f,%f]\n", b[0], b[2]);
159 1 equemene
   printf("b=[%f,%f]\n", b[1], b[3]);
160 1 equemene
   exit(0); return(0);
161 1 equemene
}
162 1 equemene
</PRE>
163 1 equemene
164 1 equemene
<H1>See Also</H1>
165 1 equemene
<A HREF="HPL_dgemm.html">HPL_dgemm</A>.
166 1 equemene
167 1 equemene
</BODY>
168 1 equemene
</HTML>