basic.c 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #include <math.h>
  2. #include <grass/arraystats.h>
  3. /*provides basic univar stats */
  4. void AS_basic_stats(double *data, int count, struct GASTATS *stats)
  5. {
  6. int i = 1;
  7. double sum = 0, sumsq = 0, sumabs = 0;
  8. double dev = 0, dev2 = 0;
  9. stats->count = count;
  10. stats->min = data[0];
  11. stats->max = data[count - 1];
  12. for (i = 0; i < count; i++) {
  13. sum += data[i];
  14. sumabs += fabs(data[i]);
  15. sumsq += data[i] * data[i];
  16. }
  17. stats->sum = sum;
  18. stats->sumabs = sumabs;
  19. stats->sumsq = sumsq;
  20. stats->mean = stats->sum / stats->count;
  21. stats->meanabs = stats->sumabs / stats->count;
  22. for (i = 0; i < count; i++) {
  23. dev2 = dev2 + (data[i] - stats->mean) * (data[i] - stats->mean);
  24. dev = dev + (data[i] - stats->mean);
  25. }
  26. stats->var = (dev2 - (dev * dev / stats->count)) / stats->count;
  27. stats->stdev = sqrt(stats->var);
  28. return;
  29. }
  30. void AS_eqdrt(double vectx[], double vecty[], int i1, int i2, double *vabc)
  31. {
  32. double bn = 0, bd = 0, x1 = 0, y1 = 0;
  33. vabc[0] = 0;
  34. vabc[1] = 0;
  35. vabc[2] = 0;
  36. if (i1 == 0) {
  37. x1 = 0;
  38. y1 = 0;
  39. }
  40. else {
  41. x1 = vectx[i1];
  42. y1 = vecty[i1];
  43. }
  44. bn = y1 - vecty[i2];
  45. bd = x1 - vectx[i2];
  46. if (bd != 0) {
  47. vabc[1] = bn / bd;
  48. vabc[0] = y1 - vabc[1] * x1;
  49. return;
  50. }
  51. if (bn != 0)
  52. vabc[2] = x1;
  53. else
  54. G_debug(3, "Points are equal\n");
  55. return;
  56. }