basic.c 1.2 KB

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