@@ -37,12 +37,12 @@ Performs the symmetric rank 2 operation `A = α*x*y^T + α*y*x^T + A`, where `α
37
37
``` javascript
38
38
var Float64Array = require ( ' @stdlib/array/float64' );
39
39
40
- var A = new Float64Array ( [ 1.0 , 2.0 , 3.0 , 0 .0 , 1.0 , 2.0 , 0 .0 , 0 .0 , 1.0 ] );
40
+ var A = new Float64Array ( [ 1.0 , 2.0 , 3.0 , 2 .0 , 1.0 , 2.0 , 3 .0 , 2 .0 , 1.0 ] );
41
41
var x = new Float64Array ( [ 1.0 , 2.0 , 3.0 ] );
42
42
var y = new Float64Array ( [ 1.0 , 2.0 , 3.0 ] );
43
43
44
44
dsyr2 ( ' row-major' , ' upper' , 3 , 1.0 , x, 1 , y, 1 , A , 3 );
45
- // A => <Float64Array>[ 3.0, 6.0, 9.0, 0 .0, 9.0, 14.0, 0 .0, 0 .0, 19.0 ]
45
+ // A => <Float64Array>[ 3.0, 6.0, 9.0, 2 .0, 9.0, 14.0, 3 .0, 2 .0, 19.0 ]
46
46
```
47
47
48
48
The function has the following parameters:
@@ -52,9 +52,9 @@ The function has the following parameters:
52
52
- ** N** : number of elements along each dimension of ` A ` .
53
53
- ** α** : scalar constant.
54
54
- ** x** : first input [ ` Float64Array ` ] [ mdn-float64array ] .
55
- - ** sx** : index increment for ` x ` .
55
+ - ** sx** : stride length for ` x ` .
56
56
- ** y** : second input [ ` Float64Array ` ] [ mdn-float64array ] .
57
- - ** sy** : index increment for ` y ` .
57
+ - ** sy** : stride length for ` y ` .
58
58
- ** A** : input matrix stored in linear memory as a [ ` Float64Array ` ] [ mdn-float64array ] .
59
59
- ** lda** : stride of the first dimension of ` A ` (a.k.a., leading dimension of the matrix ` A ` ).
60
60
@@ -63,12 +63,12 @@ The stride parameters determine how elements in the input arrays are accessed at
63
63
``` javascript
64
64
var Float64Array = require ( ' @stdlib/array/float64' );
65
65
66
- var A = new Float64Array ( [ 1.0 , 2.0 , 3.0 , 0 .0 , 1.0 , 2.0 , 0 .0 , 0 .0 , 1.0 ] );
66
+ var A = new Float64Array ( [ 1.0 , 2.0 , 3.0 , 2 .0 , 1.0 , 2.0 , 3 .0 , 2 .0 , 1.0 ] );
67
67
var x = new Float64Array ( [ 1.0 , 2.0 , 3.0 , 4.0 , 5.0 ] );
68
68
var y = new Float64Array ( [ 1.0 , 2.0 , 3.0 ] );
69
69
70
70
dsyr2 ( ' row-major' , ' upper' , 3 , 1.0 , x, 2 , y, 1 , A , 3 );
71
- // A => <Float64Array>[ 3.0, 7.0, 11.0, 0 .0, 13.0, 21.0, 0 .0, 0 .0, 31.0 ]
71
+ // A => <Float64Array>[ 3.0, 7.0, 11.0, 2 .0, 13.0, 21.0, 3 .0, 2 .0, 31.0 ]
72
72
```
73
73
74
74
Note that indexing is relative to the first index. To introduce an offset, use [ ` typed array ` ] [ mdn-typed-array ] views.
@@ -81,14 +81,14 @@ var Float64Array = require( '@stdlib/array/float64' );
81
81
// Initial arrays...
82
82
var x0 = new Float64Array ( [ 0.0 , 1.0 , 1.0 , 1.0 ] );
83
83
var y0 = new Float64Array ( [ 0.0 , 1.0 , 2.0 , 3.0 ] );
84
- var A = new Float64Array ( [ 1.0 , 2.0 , 3.0 , 0 .0 , 1.0 , 2.0 , 0 .0 , 0 .0 , 1.0 ] );
84
+ var A = new Float64Array ( [ 1.0 , 2.0 , 3.0 , 2 .0 , 1.0 , 2.0 , 3 .0 , 2 .0 , 1.0 ] );
85
85
86
86
// Create offset views...
87
87
var x1 = new Float64Array ( x0 .buffer , x0 .BYTES_PER_ELEMENT * 1 ); // start at 2nd element
88
88
var y1 = new Float64Array ( y0 .buffer , y0 .BYTES_PER_ELEMENT * 1 ); // start at 2nd element
89
89
90
90
dsyr2 ( ' row-major' , ' upper' , 3 , 1.0 , x1, 1 , y1, 1 , A , 3 );
91
- // A => <Float64Array>[ 3.0, 5.0, 7.0, 0 .0, 5.0, 7.0, 0 .0, 0 .0, 7.0 ]
91
+ // A => <Float64Array>[ 3.0, 5.0, 7.0, 2 .0, 5.0, 7.0, 3 .0, 2 .0, 7.0 ]
92
92
```
93
93
94
94
#### dsyr2.ndarray( uplo, N, α, x, sx, ox, y, sy, oy, A, sa1, sa2, oa )
@@ -98,12 +98,12 @@ Performs the symmetric rank 2 operation `A = α*x*y^T + α*y*x^T + A`, using alt
98
98
``` javascript
99
99
var Float64Array = require ( ' @stdlib/array/float64' );
100
100
101
- var A = new Float64Array ( [ 1.0 , 2.0 , 3.0 , 0 .0 , 1.0 , 2.0 , 0 .0 , 0 .0 , 1.0 ] );
101
+ var A = new Float64Array ( [ 1.0 , 2.0 , 3.0 , 2 .0 , 1.0 , 2.0 , 3 .0 , 2 .0 , 1.0 ] );
102
102
var x = new Float64Array ( [ 1.0 , 2.0 , 3.0 ] );
103
103
var y = new Float64Array ( [ 1.0 , 2.0 , 3.0 ] );
104
104
105
105
dsyr2 .ndarray ( ' upper' , 3 , 1.0 , x, 1 , 0 , y, 1 , 0 , A , 3 , 1 , 0 );
106
- // A => <Float64Array>[ 3.0, 6.0, 9.0, 0 .0, 9.0, 14.0, 0 .0, 0 .0, 19.0 ]
106
+ // A => <Float64Array>[ 3.0, 6.0, 9.0, 2 .0, 9.0, 14.0, 3 .0, 2 .0, 19.0 ]
107
107
```
108
108
109
109
The function has the following additional parameters:
@@ -119,12 +119,12 @@ While [`typed array`][mdn-typed-array] views mandate a view offset based on the
119
119
``` javascript
120
120
var Float64Array = require ( ' @stdlib/array/float64' );
121
121
122
- var A = new Float64Array ( [ 1.0 , 2.0 , 3.0 , 0 .0 , 1.0 , 2.0 , 0 .0 , 0 .0 , 1.0 ] );
122
+ var A = new Float64Array ( [ 1.0 , 2.0 , 3.0 , 2 .0 , 1.0 , 2.0 , 3 .0 , 2 .0 , 1.0 ] );
123
123
var x = new Float64Array ( [ 1.0 , 2.0 , 3.0 , 4.0 , 5.0 ] );
124
124
var y = new Float64Array ( [ 1.0 , 2.0 , 3.0 ] );
125
125
126
126
dsyr2 .ndarray ( ' upper' , 3 , 1.0 , x, - 2 , 4 , y, 1 , 0 , A , 3 , 1 , 0 );
127
- // A => <Float64Array>[ 11.0, 15.0, 19.0, 0 .0, 13.0, 13.0, 0 .0, 0 .0, 7.0 ]
127
+ // A => <Float64Array>[ 11.0, 15.0, 19.0, 2 .0, 13.0, 13.0, 3 .0, 2 .0, 7.0 ]
128
128
```
129
129
130
130
</section >
@@ -158,12 +158,19 @@ var opts = {
158
158
159
159
var N = 3 ;
160
160
161
- var A = ones ( N * N , opts .dtype );
161
+ // Create N-by-N symmetric matrices:
162
+ var A1 = ones ( N * N , opts .dtype );
163
+ var A2 = ones ( N * N , opts .dtype );
164
+
165
+ // Create random vectors:
162
166
var x = discreteUniform ( N , - 10.0 , 10.0 , opts );
163
167
var y = discreteUniform ( N , - 10.0 , 10.0 , opts );
164
168
165
- dsyr2 ( ' row-major' , ' upper' , 3 , 1.0 , x, 1 , y, 1 , A , 3 );
166
- console .log ( A );
169
+ dsyr2 ( ' row-major' , ' upper' , 3 , 1.0 , x, 1 , y, 1 , A1 , 3 );
170
+ console .log ( A1 );
171
+
172
+ dsyr2 .ndarray ( ' upper' , 3 , 1.0 , x, 1 , 0 , y, 1 , 0 , A2 , 3 , 1 , 0 );
173
+ console .log ( A2 );
167
174
```
168
175
169
176
</section >
@@ -193,21 +200,74 @@ console.log( A );
193
200
### Usage
194
201
195
202
``` c
196
- TODO
203
+ #include " stdlib/blas/base/dsyr2.h"
204
+ ```
205
+
206
+ #### c_dsyr2( order, uplo, N, alpha, \* X, sx, \* Y, sy, \* A, LDA )
207
+
208
+ Performs the symmetric rank 2 operation ` A = α*x*y^T + α*y*x^T + A ` where ` α ` is a scalar, ` x ` and ` y ` are ` N ` element vectors, and ` A ` is an ` N ` by ` N ` symmetric matrix.
209
+
210
+ ``` c
211
+ #include " stdlib/blas/base/shared.h"
212
+
213
+ double A[] = { 1.0, 2.0, 3.0, 2.0, 1.0, 2.0, 3.0, 2.0, 1.0 };
214
+ const double x[ ] = { 1.0, 2.0, 3.0 };
215
+ const double y[ ] = { 1.0, 2.0, 3.0 };
216
+
217
+ c_dsyr2 ( CblasColMajor, CblasUpper, 3, 1.0, x, 1, y, 1, A, 3 );
197
218
```
198
219
199
- #### TODO
220
+ The function accepts the following arguments:
200
221
201
- TODO.
222
+ - **order**: `[in] CBLAS_LAYOUT` storage layout.
223
+ - **uplo**: `[in] CBLAS_UPLO` specifies whether the upper or lower triangular part of the symmetric matrix `A` should be referenced.
224
+ - **N**: `[in] CBLAS_INT` number of elements along each dimension of `A`.
225
+ - **alpha**: `[in] double` scalar constant.
226
+ - **X**: `[in] double*` first input array.
227
+ - **strideX**: `[in] CBLAS_INT` stride length for `X`.
228
+ - **Y**: `[in] double*` second input array.
229
+ - **strideY**: `[in] CBLAS_INT` stride length for `Y`.
230
+ - **A**: `[inout] double*` input matrix.
231
+ - **LDA**: `[in] CBLAS_INT` stride of the first dimension of `A` (a.k.a., leading dimension of the matrix `A`).
202
232
203
233
```c
204
- TODO
234
+ void c_dsyr2( const CBLAS_LAYOUT order, const CBLAS_UPLO uplo, const CBLAS_INT N, const double alpha, const double *X, const CBLAS_INT strideX, const double *Y, const CBLAS_INT strideY, double *A, const CBLAS_INT LDA )
235
+ ```
236
+
237
+ <!-- lint disable maximum-heading-length -->
238
+
239
+ #### c_dsyr2_ndarray( uplo, N, alpha, \* X, sx, ox, \* Y, sy, oy, \* A, sa1, sa2, oa )
240
+
241
+ Performs the symmetric rank 2 operation ` A = α*x*y^T + α*y*x^T + A ` , using alternative indexing semantics and where ` α ` is a scalar, ` x ` and ` y ` are ` N ` element vectors, and ` A ` is an ` N ` by ` N ` symmetric matrix.
242
+
243
+ ``` c
244
+ #include " stdlib/blas/base/shared.h"
245
+
246
+ double A[] = { 1.0, 2.0, 3.0, 2.0, 1.0, 2.0, 3.0, 2.0, 1.0 };
247
+ const double x[ ] = { 1.0, 2.0, 3.0 };
248
+ const double y[ ] = { 1.0, 2.0, 3.0 };
249
+
250
+ c_dsyr2_ndarray ( CblasUpper, 3, 1.0, x, 1, 0, y, 1, 0, A, 3, 1, 0 );
205
251
```
206
252
207
- TODO
253
+ The function accepts the following arguments:
254
+
255
+ - **uplo**: `[in] CBLAS_UPLO` specifies whether the upper or lower triangular part of the symmetric matrix `A` should be referenced.
256
+ - **N**: `[in] CBLAS_INT` number of elements along each dimension of `A`.
257
+ - **alpha**: `[in] double` scalar constant.
258
+ - **X**: `[in] double*` first input array.
259
+ - **sx**: `[in] CBLAS_INT` stride length for `X`.
260
+ - **ox**: `[in] CBLAS_INT` starting index for `X`.
261
+ - **Y**: `[in] double` second input array.
262
+ - **sy**: `[in] CBLAS_INT` stride length for `Y`.
263
+ - **oy**: `[in] CBLAS_INT` starting index for `Y`.
264
+ - **A**: `[inout] double*` input matrix.
265
+ - **sa1**: `[in] CBLAS_INT` stride of the first dimension of `A`.
266
+ - **sa2**: `[in] CBLAS_INT` stride of the second dimension of `A`.
267
+ - **oa**: `[in] CBLAS_INT` starting index for `A`.
208
268
209
269
```c
210
- TODO
270
+ void c_dsyr2_ndarray( const CBLAS_UPLO uplo, const CBLAS_INT N, const double alpha, const double *X, const CBLAS_INT strideX, const CBLAS_INT offsetX, const double *Y, CBLAS_INT strideY, const CBLAS_INT offsetY, double *A, const CBLAS_INT strideA1, const CBLAS_INT strideA2, const CBLAS_INT offsetA )
211
271
```
212
272
213
273
</section >
@@ -229,7 +289,47 @@ TODO
229
289
### Examples
230
290
231
291
``` c
232
- TODO
292
+ #include " stdlib/blas/base/dsyr2.h"
293
+ #include " stdlib/blas/base/shared.h"
294
+ #include < stdio.h>
295
+
296
+ int main ( void ) {
297
+ // Define 3x3 symmetric matrices stored in row-major layout:
298
+ double A1[ 3* 3 ] = {
299
+ 1.0, 2.0, 3.0,
300
+ 2.0, 1.0, 2.0,
301
+ 3.0, 2.0, 1.0
302
+ };
303
+
304
+ double A2[ 3*3 ] = {
305
+ 1.0, 2.0, 3.0,
306
+ 2.0, 1.0, 2.0,
307
+ 3.0, 2.0, 1.0
308
+ };
309
+
310
+ // Define `x` and `y` vectors:
311
+ const double x[ 3 ] = { 1.0, 2.0, 3.0 };
312
+ const double y[ 3 ] = { 1.0, 2.0, 3.0 };
313
+
314
+ // Specify the number of elements along each dimension of `A1` and `A2`:
315
+ const int N = 3;
316
+
317
+ // Perform the symmetric rank 2 operation `A = α*x*y^T + α*y*x^T + A`:
318
+ c_dsyr2( CblasColMajor, CblasUpper, N, 1.0, x, 1, y, 1, A1, N );
319
+
320
+ // Print the result:
321
+ for ( int i = 0; i < N*N; i++ ) {
322
+ printf( "A1[ %i ] = %lf\n", i, A1[ i ] );
323
+ }
324
+
325
+ // Perform the symmetric rank 2 operation `A = α*x*y^T + α*y*x^T + A` using alternative indexing semantics:
326
+ c_dsyr2_ndarray( CblasUpper, N, 1.0, x, 1, 0, y, 1, 0, A2, N, 1, 0 );
327
+
328
+ // Print the result:
329
+ for ( int i = 0; i < N*N; i++ ) {
330
+ printf( "A2[ %i ] = %lf\n", i, A2[ i ] );
331
+ }
332
+ }
233
333
```
234
334
235
335
</section>
0 commit comments