@@ -37,11 +37,11 @@ Performs the symmetric rank 1 operation `A = α*x*x^T + A` where `α` is a scala
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
43
43
dsyr ( ' row-major' , ' upper' , 3 , 1.0 , x, 1 , A , 3 );
44
- // A => <Float64Array>[ 2.0, 4.0, 6.0, 0 .0, 5.0, 8.0, 0 .0, 0 .0, 10.0 ]
44
+ // A => <Float64Array>[ 2.0, 4.0, 6.0, 2 .0, 5.0, 8.0, 3 .0, 2 .0, 10.0 ]
45
45
```
46
46
47
47
The function has the following parameters:
@@ -51,20 +51,20 @@ The function has the following parameters:
51
51
- ** N** : number of elements along each dimension of ` A ` .
52
52
- ** α** : scalar constant.
53
53
- ** x** : input [ ` Float64Array ` ] [ mdn-float64array ] .
54
- - ** sx** : index increment for ` x ` .
54
+ - ** sx** : stride length for ` x ` .
55
55
- ** A** : input matrix stored in linear memory as a [ ` Float64Array ` ] [ mdn-float64array ] .
56
56
- ** lda** : stride of the first dimension of ` A ` (a.k.a., leading dimension of the matrix ` A ` ).
57
57
58
- The stride parameters determine how elements in the input arrays are accessed at runtime. For example, to iterate over every other element of ` x ` in reverse order,
58
+ The stride parameters determine how elements in the input arrays are accessed at runtime. For example, to iterate over the elements of ` x ` in reverse order,
59
59
60
60
``` javascript
61
61
var Float64Array = require ( ' @stdlib/array/float64' );
62
62
63
- var A = new Float64Array ( [ 1.0 , 2.0 , 3.0 , 0 .0 , 1.0 , 2.0 , 0 .0 , 0 .0 , 1.0 ] );
64
- var x = new Float64Array ( [ 1 .0 , 2.0 , 3.0 , 4.0 , 5 .0 ] );
63
+ var A = new Float64Array ( [ 1.0 , 2.0 , 3.0 , 2 .0 , 1.0 , 2.0 , 3 .0 , 2 .0 , 1.0 ] );
64
+ var x = new Float64Array ( [ 3 .0 , 2.0 , 1 .0 ] );
65
65
66
- dsyr ( ' row-major' , ' upper' , 3 , 1.0 , x, - 2 , A , 3 );
67
- // A => <Float64Array>[ 26 .0, 17 .0, 8 .0, 0 .0, 10 .0, 5 .0, 0 .0, 0 .0, 2 .0 ]
66
+ dsyr ( ' row-major' , ' upper' , 3 , 1.0 , x, - 1 , A , 3 );
67
+ // A => <Float64Array>[ 2 .0, 4 .0, 6 .0, 2 .0, 5 .0, 8 .0, 3 .0, 2 .0, 10 .0 ]
68
68
```
69
69
70
70
Note that indexing is relative to the first index. To introduce an offset, use [ ` typed array ` ] [ mdn-typed-array ] views.
@@ -75,14 +75,14 @@ Note that indexing is relative to the first index. To introduce an offset, use [
75
75
var Float64Array = require ( ' @stdlib/array/float64' );
76
76
77
77
// Initial arrays...
78
- var x0 = new Float64Array ( [ 1 .0 , 1 .0 , 1 .0 , 1.0 ] );
79
- var A = new Float64Array ( [ 1.0 , 2.0 , 3.0 , 0 .0 , 1.0 , 2.0 , 0 .0 , 0 .0 , 1.0 ] );
78
+ var x0 = new Float64Array ( [ 0 .0 , 3 .0 , 2 .0 , 1.0 ] );
79
+ var A = new Float64Array ( [ 1.0 , 2.0 , 3.0 , 2 .0 , 1.0 , 2.0 , 3 .0 , 2 .0 , 1.0 ] );
80
80
81
81
// Create offset views...
82
82
var x1 = new Float64Array ( x0 .buffer , x0 .BYTES_PER_ELEMENT * 1 ); // start at 2nd element
83
83
84
84
dsyr ( ' row-major' , ' upper' , 3 , 1.0 , x1, - 1 , A , 3 );
85
- // A => <Float64Array>[ 2.0, 3 .0, 4 .0, 0 .0, 2 .0, 3 .0, 0 .0, 0 .0, 2 .0 ]
85
+ // A => <Float64Array>[ 2.0, 4 .0, 6 .0, 2 .0, 5 .0, 8 .0, 3 .0, 2 .0, 10 .0 ]
86
86
```
87
87
88
88
#### dsyr.ndarray( uplo, N, α, x, sx, ox, A, sa1, sa2, oa )
@@ -92,11 +92,11 @@ Performs the symmetric rank 1 operation `A = α*x*x^T + A`, using alternative in
92
92
``` javascript
93
93
var Float64Array = require ( ' @stdlib/array/float64' );
94
94
95
- var A = new Float64Array ( [ 1.0 , 2.0 , 3.0 , 0 .0 , 1.0 , 2.0 , 0 .0 , 0 .0 , 1.0 ] );
95
+ var A = new Float64Array ( [ 1.0 , 2.0 , 3.0 , 2 .0 , 1.0 , 2.0 , 3 .0 , 2 .0 , 1.0 ] );
96
96
var x = new Float64Array ( [ 1.0 , 2.0 , 3.0 ] );
97
97
98
98
dsyr .ndarray ( ' upper' , 3 , 1.0 , x, 1 , 0 , A , 3 , 1 , 0 );
99
- // A => <Float64Array>[ 2.0, 4.0, 6.0, 0 .0, 5.0, 8.0, 0 .0, 0 .0, 10.0 ]
99
+ // A => <Float64Array>[ 2.0, 4.0, 6.0, 2 .0, 5.0, 8.0, 3 .0, 2 .0, 10.0 ]
100
100
```
101
101
102
102
The function has the following additional parameters:
@@ -111,11 +111,11 @@ While [`typed array`][mdn-typed-array] views mandate a view offset based on the
111
111
``` javascript
112
112
var Float64Array = require ( ' @stdlib/array/float64' );
113
113
114
- var A = new Float64Array ( [ 1.0 , 2.0 , 3.0 , 0 .0 , 1.0 , 2.0 , 0 .0 , 0 .0 , 1.0 ] );
114
+ var A = new Float64Array ( [ 1.0 , 2.0 , 3.0 , 2 .0 , 1.0 , 2.0 , 3 .0 , 2 .0 , 1.0 ] );
115
115
var x = new Float64Array ( [ 1.0 , 2.0 , 3.0 , 4.0 , 5.0 ] );
116
116
117
117
dsyr .ndarray ( ' upper' , 3 , 1.0 , x, - 2 , 4 , A , 3 , 1 , 0 );
118
- // A => <Float64Array>[ 26.0, 17.0, 8.0, 0 .0, 10.0, 5.0, 0 .0, 0 .0, 2.0 ]
118
+ // A => <Float64Array>[ 26.0, 17.0, 8.0, 2 .0, 10.0, 5.0, 3 .0, 2 .0, 2.0 ]
119
119
```
120
120
121
121
</section >
@@ -149,11 +149,18 @@ var opts = {
149
149
150
150
var N = 3 ;
151
151
152
- var A = ones ( N * N , opts .dtype );
152
+ // Create N-by-N symmetric matrices:
153
+ var A1 = ones ( N * N , opts .dtype );
154
+ var A2 = ones ( N * N , opts .dtype );
155
+
156
+ // Create a random vector:
153
157
var x = discreteUniform ( N , - 10.0 , 10.0 , opts );
154
158
155
- dsyr ( ' row-major' , ' upper' , 3 , 1.0 , x, 1 , A , 3 );
156
- console .log ( A );
159
+ dsyr ( ' row-major' , ' upper' , 3 , 1.0 , x, 1 , A1 , 3 );
160
+ console .log ( A1 );
161
+
162
+ dsyr .ndarray ( ' upper' , 3 , 1.0 , x, 1 , 0 , A2 , 3 , 1 , 0 );
163
+ console .log ( A2 );
157
164
```
158
165
159
166
</section >
@@ -183,21 +190,65 @@ console.log( A );
183
190
### Usage
184
191
185
192
``` c
186
- TODO
193
+ # include " stdlib/blas/base/dsyr.h "
187
194
```
188
195
189
- #### TODO
196
+ #### c_dsyr( layout, uplo, N, alpha, \* X, sx, \* A, LDA )
190
197
191
- TODO .
198
+ Performs the symmetric rank 1 operation ` A = α*x*x^T + A ` where ` α ` is a scalar, ` x ` is an ` N ` element vector, and ` A ` is an ` N ` by ` N ` symmetric matrix .
192
199
193
200
``` c
194
- TODO
201
+ #include " stdlib/blas/base/shared.h"
202
+
203
+ double A[] = { 1.0, 2.0, 3.0, 2.0, 1.0, 2.0, 3.0, 2.0, 1.0 };
204
+ const double x[ ] = { 1.0, 2.0, 3.0 };
205
+
206
+ c_dsyr ( CblasColMajor, CblasUpper, 3, 1.0, x, 1, A, 3 );
195
207
```
196
208
197
- TODO
209
+ The function accepts the following arguments:
210
+
211
+ - **layout**: `[in] CBLAS_LAYOUT` storage layout.
212
+ - **uplo**: `[in] CBLAS_UPLO` specifies whether the upper or lower triangular part of the symmetric matrix `A` should be referenced.
213
+ - **N**: `[in] CBLAS_INT` number of elements along each dimension of `A`.
214
+ - **alpha**: `[in] double` scalar constant.
215
+ - **X**: `[in] double*` input array.
216
+ - **sx**: `[in] CBLAS_INT` stride length for `X`.
217
+ - **A**: `[inout] double*` input matrix.
218
+ - **LDA**: `[in] CBLAS_INT` stride of the first dimension of `A` (a.k.a., leading dimension of the matrix `A`).
219
+
220
+ ```c
221
+ void c_dsyr( const CBLAS_LAYOUT layout, const CBLAS_UPLO uplo, const CBLAS_INT N, const double alpha, const double *X, const CBLAS_INT strideX, double *A, const CBLAS_INT LDA )
222
+ ```
223
+
224
+ #### c_dsyr_ndarray( uplo, N, alpha, \* X, sx, ox, \* A, sa1, sa2, oa )
225
+
226
+ Performs the symmetric rank 1 operation ` A = α*x*x^T + A ` , using alternative indexing semantics and where ` α ` is a scalar, ` x ` is an ` N ` element vector, and ` A ` is an ` N ` by ` N ` symmetric matrix.
227
+
228
+ ``` c
229
+ #include " stdlib/blas/base/shared.h"
230
+
231
+ double A[] = { 1.0, 2.0, 3.0, 2.0, 1.0, 2.0, 3.0, 2.0, 1.0 };
232
+ const double x[ ] = { 1.0, 2.0, 3.0 };
233
+
234
+ c_dsyr_ndarray ( CblasUpper, 3, 1.0, x, 1, 0, A, 3, 1, 0 );
235
+ ```
236
+
237
+ The function accepts the following arguments:
238
+
239
+ - **uplo**: `[in] CBLAS_UPLO` specifies whether the upper or lower triangular part of the symmetric matrix `A` should be referenced.
240
+ - **N**: `[in] CBLAS_INT` number of elements along each dimension of `A`.
241
+ - **alpha**: `[in] double` scalar constant.
242
+ - **X**: `[in] double*` input array.
243
+ - **sx**: `[in] CBLAS_INT` stride length for `X`.
244
+ - **ox**: `[in] CBLAS_INT` starting index for `X`.
245
+ - **A**: `[inout] double*` input matrix.
246
+ - **sa1**: `[in] CBLAS_INT` stride of the first dimension of `A`.
247
+ - **sa2**: `[in] CBLAS_INT` stride of the second dimension of `A`.
248
+ - **oa**: `[in] CBLAS_INT` starting index for `A`.
198
249
199
250
```c
200
- TODO
251
+ void c_dsyr_ndarray( const CBLAS_UPLO uplo, const CBLAS_INT N, const double alpha, const double *X, const CBLAS_INT strideX, const CBLAS_INT offsetX, double *A, const CBLAS_INT strideA1, const CBLAS_INT strideA2, const CBLAS_INT offsetA )
201
252
```
202
253
203
254
</section >
@@ -219,7 +270,46 @@ TODO
219
270
### Examples
220
271
221
272
``` c
222
- TODO
273
+ #include " stdlib/blas/base/dsyr.h"
274
+ #include " stdlib/blas/base/shared.h"
275
+ #include < stdio.h>
276
+
277
+ int main ( void ) {
278
+ // Define 3x3 symmetric matrices stored in row-major layout:
279
+ double A1[ 3* 3 ] = {
280
+ 1.0, 2.0, 3.0,
281
+ 2.0, 1.0, 2.0,
282
+ 3.0, 2.0, 1.0
283
+ };
284
+
285
+ double A2[ 3*3 ] = {
286
+ 1.0, 2.0, 3.0,
287
+ 2.0, 1.0, 2.0,
288
+ 3.0, 2.0, 1.0
289
+ };
290
+
291
+ // Define a vector:
292
+ const double x[ 3 ] = { 1.0, 2.0, 3.0 };
293
+
294
+ // Specify the number of elements along each dimension of `A1` and `A2`:
295
+ const int N = 3;
296
+
297
+ // Perform the symmetric rank 1 operation `A = α*x*x^T + A`:
298
+ c_dsyr( CblasColMajor, CblasUpper, N, 1.0, x, 1, A1, N );
299
+
300
+ // Print the result:
301
+ for ( int i = 0; i < N*N; i++ ) {
302
+ printf( "A1[ %i ] = %f\n", i, A1[ i ] );
303
+ }
304
+
305
+ // Perform the symmetric rank 1 operation `A = α*x*x^T + A` using alternative indexing semantics:
306
+ c_dsyr_ndarray( CblasUpper, N, 1.0, x, 1, 0, A2, N, 1, 0 );
307
+
308
+ // Print the result:
309
+ for ( int i = 0; i < N*N; i++ ) {
310
+ printf( "A2[ %i ] = %f\n", i, A[ i ] );
311
+ }
312
+ }
223
313
```
224
314
225
315
</section>
0 commit comments