1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
#ifndef VECTOR_H
#define VECTOR_H
#include <stddef.h>
#include "matrix.h"
#define vector_at(v, i) ((v)->xs[(i)])
#define vector_loop(v, i) matrix_loop((v)->mat, i)
#define vector_foreach(v, it) matrix_foreach((v)->mat, it)
#define vector_foreach_idx(v, it, i) matrix_foreach_idx((v)->mat, it, i, _)
#define VECTOR_DIM_MATCH(v1, v2) ((v1)->m == (v2)->m)
typedef struct {
double *xs;
size_t m;
Matrix *mat;
bool is_colvec;
} Vector;
Vector *vector_alloc(size_t m);
Vector *vector_alloc1(Matrix *mat);
void vector_free(Vector *v);
void vector_print(const Vector *v);
Vector *vector_from_str(char *str);
Vector *vector_from_arr(double arr[], size_t m);
Vector *vector_unit(size_t m, size_t i);
Vector *vector_const(size_t m, double x);
void vector_const1(Vector *v, double x);
Vector *vector_slice(const Vector *v, size_t i, size_t j);
Vector *vector_copy(const Vector *v);
void vector_copy1(Vector *u, const Vector *v);
Vector *vector_transpose(const Vector *v);
void vector_transpose1(Vector *v);
Vector *vector_add(const Vector *u, const Vector *v);
void vector_add1(Vector *u, const Vector *v);
Vector *vector_scale(const Vector *v, double x);
void vector_scale1(Vector *v, double x);
double vector_norm_p(const Vector *x, size_t p);
Vector *vector_sub(const Vector *u, const Vector *v);
void vector_sub1(Vector *u, const Vector *v);
Vector *vector_rand(size_t m, int bound_l, int bound_u);
void vector_rand1(Vector *v, int bound_l, int bound_u);
bool vector_eq(const Vector *u, const Vector *v, double tol);
double vector_norm_p(const Vector *v, size_t p);
double vector_norm_max(const Vector *v);
#endif
|