RcdMathLib_doc
Open Source Library for Linear and Non-linear Algebra
vector.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2020 Zakaria Kasmi <zkasmi@inf.fu-berlin.de>
3  * 2020 Freie Universität Berlin
4  *
5  * This file is subject to the terms and conditions of the GNU Lesser General
6  * Public License v2.1. See the file LICENSE in the top level directory for more
7  * details.
8  */
9 
24 #ifndef VECTOR_H_
25 #define VECTOR_H_
26 
27 #include <inttypes.h>
28 #include <stdbool.h>
29 
31 //#define vector_t float
32 #ifndef vector_t
33 #define vector_t double
34 #endif
35 
43 void vector_clear(uint8_t size, vector_t arr[]);
44 
53 void vector_copy(uint8_t size, vector_t src_arr[], vector_t dest_arr[]);
54 
62 void vector_clear(uint8_t size, vector_t arr[]);
63 
73 vector_t vector_get_norm2(uint8_t length, vector_t arr[]);
74 
84 vector_t vector_get_square_norm2(uint8_t length, vector_t arr[]);
85 
95 vector_t vector_get_sum(uint8_t length, vector_t arr[]);
96 
106 vector_t vector_get_mean_value(uint8_t length, vector_t arr[]);
107 
118 void vector_sub(uint8_t size, vector_t a_vec[], vector_t b_vec[],
119  vector_t a_minus_b[]);
120 
131 void vector_add(uint8_t size, vector_t a_vec[size], vector_t b_vec[size],
132  vector_t a_plus_b_vec[size]);
144 void vector_mul(uint8_t size, vector_t a_vec[size], vector_t b_vec[size],
145  vector_t a_mul_b_vec[size]);
146 
157 void vector_square(uint8_t n, vector_t vec[n], vector_t square_vec[n]);
158 
169 void vector_in_place_scalar_mul(uint8_t size, vector_t a_vec[size],
170  vector_t scl);
171 
183 void vector_scalar_mul(uint8_t size, vector_t src_vec[size], vector_t scl,
184  vector_t dest_vec[]);
185 
196 void vector_scalar_div(uint8_t size, vector_t a_vec[size], vector_t scl);
197 
198 //Euclidean distance: d = sum((x-y).^2).^0.5
199 
210 vector_t vector_get_euclidean_distance(uint8_t length, vector_t vec1[],
211  vector_t vec2[]);
222 vector_t vector_get_scalar_product(uint8_t n, vector_t vec1[n],
223  vector_t vec2[n]);
224 
236 bool vector_is_equal(uint16_t length, vector_t vec_1[], vector_t vec_2[]);
237 
249 bool vector_uint32_is_equal(uint32_t length, uint32_t vec_1[], uint32_t vec_2[]);
250 
264 void vector_get_index_vector(uint8_t k, uint8_t n, vector_t unsorted_vector[n],
265  vector_t sorted_vector[n], uint8_t index_vector[n]);
266 
278 vector_t vector_get_max_and_index(uint8_t length, vector_t vec[],
279  uint8_t *index);
280 
292 vector_t vector_get_residual(uint8_t length, vector_t a_vec[], vector_t b_vec[]);
293 
303 void vector_get_elements(vector_t src_vec[], uint8_t k, uint8_t index_vec[],
304  vector_t dst_vec[]);
305 
313 void vector_print(uint32_t length, vector_t arr[]);
314 
322 void vector_print_u8_array(uint32_t length, uint8_t arr[]);
323 
337 void vector_flex_print(uint32_t length, vector_t arr[], uint8_t before_dot,
338  uint8_t after_dot);
339 
340 #endif /* VECTOR_H_ */
vector_scalar_div
void vector_scalar_div(uint8_t size, vector_t a_vec[size], vector_t scl)
Compute the division of a vector with a real number.
Definition: vector.c:151
vector_get_norm2
vector_t vector_get_norm2(uint8_t length, vector_t arr[])
Compute the 2-norm norm of a vector.
Definition: vector.c:42
vector_flex_print
void vector_flex_print(uint32_t length, vector_t arr[], uint8_t before_dot, uint8_t after_dot)
Display the values of the vector's elements.
Definition: vector.c:284
vector_get_residual
vector_t vector_get_residual(uint8_t length, vector_t a_vec[], vector_t b_vec[])
Compute the residual of two vectors.
Definition: vector.c:227
vector_get_euclidean_distance
vector_t vector_get_euclidean_distance(uint8_t length, vector_t vec1[], vector_t vec2[])
Compute the Euclidean distance between two vectors.
Definition: vector.c:163
vector_get_scalar_product
vector_t vector_get_scalar_product(uint8_t n, vector_t vec1[n], vector_t vec2[n])
Compute the dot product of two vectors.
Definition: vector.c:190
vector_square
void vector_square(uint8_t n, vector_t vec[n], vector_t square_vec[n])
Compute the square of a vector.
Definition: vector.c:124
vector_print
void vector_print(uint32_t length, vector_t arr[])
Display the values of the vector's elements.
Definition: vector.c:255
vector_get_square_norm2
vector_t vector_get_square_norm2(uint8_t length, vector_t arr[])
Compute the squared 2-norm norm of a vector .
Definition: vector.c:54
vector_print_u8_array
void vector_print_u8_array(uint32_t length, uint8_t arr[])
Display the values of the vector's elements of type uint8_t.
Definition: vector.c:269
vector_t
#define vector_t
Define the data type of the vector elements.
Definition: vector.h:33
vector_in_place_scalar_mul
void vector_in_place_scalar_mul(uint8_t size, vector_t a_vec[size], vector_t scl)
Compute the product of a vector with a real number.
Definition: vector.c:131
vector_get_index_vector
void vector_get_index_vector(uint8_t k, uint8_t n, vector_t unsorted_vector[n], vector_t sorted_vector[n], uint8_t index_vector[n])
Determine the index of the vector elements before sorting.
Definition: vector.c:214
vector_uint32_is_equal
bool vector_uint32_is_equal(uint32_t length, uint32_t vec_1[], uint32_t vec_2[])
Determine the equality of two vectors of type uint32_t.
Definition: vector.c:243
vector_get_elements
void vector_get_elements(vector_t src_vec[], uint8_t k, uint8_t index_vec[], vector_t dst_vec[])
Get the elements of the vector by an index vector.
Definition: vector.c:235
vector_clear
void vector_clear(uint8_t size, vector_t arr[])
Clear all the elements of the vector.
Definition: vector.c:32
vector_copy
void vector_copy(uint8_t size, vector_t src_arr[], vector_t dest_arr[])
Copy the elements of the source vector to the destination vector.
Definition: vector.c:37
vector_is_equal
bool vector_is_equal(uint16_t length, vector_t vec_1[], vector_t vec_2[])
Determine the equality of two vectors.
Definition: vector.c:202
vector_mul
void vector_mul(uint8_t size, vector_t a_vec[size], vector_t b_vec[size], vector_t a_mul_b_vec[size])
Compute the multiplication of two vectors.
Definition: vector.c:114
vector_add
void vector_add(uint8_t size, vector_t a_vec[size], vector_t b_vec[size], vector_t a_plus_b_vec[size])
Compute the addition of two vectors.
Definition: vector.c:104
vector_get_sum
vector_t vector_get_sum(uint8_t length, vector_t arr[])
Compute the sum of the elements of a vector.
Definition: vector.c:66
vector_get_mean_value
vector_t vector_get_mean_value(uint8_t length, vector_t arr[])
Compute the average or mean value of a vector.
Definition: vector.c:78
vector_scalar_mul
void vector_scalar_mul(uint8_t size, vector_t src_vec[size], vector_t scl, vector_t dest_vec[])
Compute the product of a vector with a real number.
Definition: vector.c:141
vector_sub
void vector_sub(uint8_t size, vector_t a_vec[], vector_t b_vec[], vector_t a_minus_b[])
Compute the subtraction of two vectors.
Definition: vector.c:94
vector_get_max_and_index
vector_t vector_get_max_and_index(uint8_t length, vector_t vec[], uint8_t *index)
Compute the maximal value and its index of a vector.
Definition: vector.c:175