#include #include #include typedef struct { int l; // length double * d; // data } vector; vector * new_vector(int length) { vector * v; v = calloc(1, sizeof(vector)); v->l = length; v->d = calloc (length, sizeof(double)); return v; } double scalar (vector * x, vector * y) { double s; int i; if (x->l != y->l) { fprintf(stderr, "error in scalar: vectors have different length.\n"); exit(1); } s = 0; for (i=0; i< x->l; i++) { s += x->d[i] * y->d[i]; } return s; } void scale (vector * x, double a) { int i; for (i=0; i< x->l; i++) { x->d[i] *= a; } } double norm(vector * x) { double norm; norm = sqrt(scalar(x,x)); return(norm); } double normalize(vector * x) { double n; n = norm(x); scale(x, 1./n); return(n); } // v = a*x+b*y void combine(vector * v, double a, vector *x, double b, vector * y) { int i; if (x->l != y->l || x->l != v->l) { fprintf(stderr, "error in combine: vectors have different length.\n"); exit(1); } for (i=0; i< v->l; i++) { v->d[i] = a * x->d[i] + b * y->d[i]; } } void gs(vector ** v, int m, double * norm) { double a; int i, j; for (i=0; id[j] = (int) (10*(2*drand48()-1)); printf("%lf ,", v[i]->d[j]); } printf("]\n"); } gs(v, m, norm); printf("vettori normalizzati:\n"); for (i=0; id[j]); } printf("]\n"); } }