summaryrefslogtreecommitdiff
path: root/src/vector.c
diff options
context:
space:
mode:
authorElizabeth Hunt <elizabeth.hunt@simponic.xyz>2023-10-11 15:56:20 -0600
committerElizabeth Hunt <elizabeth.hunt@simponic.xyz>2023-10-11 15:56:20 -0600
commit78bd8c4a95049fcd738156a6244635c822044915 (patch)
tree0516edf836c330d9a73fc5891baa1aebdcb52967 /src/vector.c
parentfaaef032d866f956665653e58086af9872c3c093 (diff)
downloadcmath-78bd8c4a95049fcd738156a6244635c822044915.tar.gz
cmath-78bd8c4a95049fcd738156a6244635c822044915.zip
lu factorization
Diffstat (limited to 'src/vector.c')
-rw-r--r--src/vector.c23
1 files changed, 21 insertions, 2 deletions
diff --git a/src/vector.c b/src/vector.c
index 61692e1..e6e2544 100644
--- a/src/vector.c
+++ b/src/vector.c
@@ -41,12 +41,19 @@ double sum_v(Array_double *v) {
return sum;
}
+Array_double *scale_v(Array_double *v, double m) {
+ Array_double *copy = copy_vector(v);
+ for (size_t i = 0; i < v->size; i++)
+ copy->data[i] *= m;
+ return copy;
+}
+
Array_double *add_v(Array_double *v1, Array_double *v2) {
assert(v1->size == v2->size);
- Array_double *sum = InitArrayWithSize(double, v1->size, 0);
+ Array_double *sum = copy_vector(v1);
for (size_t i = 0; i < v1->size; i++)
- sum->data[i] = v1->data[i] + v2->data[i];
+ sum->data[i] += v2->data[i];
return sum;
}
@@ -80,6 +87,18 @@ double linf_distance(Array_double *v1, Array_double *v2) {
return dist;
}
+Array_double *copy_vector(Array_double *v) {
+ Array_double *copy = InitArrayWithSize(double, v->size, 0.0);
+ for (size_t i = 0; i < copy->size; ++i)
+ copy->data[i] = v->data[i];
+ return copy;
+}
+
+void free_vector(Array_double *v) {
+ free(v->data);
+ free(v);
+}
+
void format_vector_into(Array_double *v, char *s) {
sprintf(s, "");
if (v->size == 0)