TheBoussinesqModel  3.2.1
 All Data Structures Files Functions Variables Typedefs Macros Pages
statistics.c
Go to the documentation of this file.
1 #include "turtle.h"
2 #include "t_statistics.h"
3 #define MAXCOUNTER 3
4 
5 /*----------------------------------------------------------------------------------*/
6 float longvector_n_moment(LONGVECTOR *v, float mean,float NN, long novalue)
7 {
8  unsigned i,n=0;
9  float moment=0;
10 
11 
12 if(v==NULL || v->co==NULL ){
13  t_error("this vector was never allocated");
14 } else if(v->nh <1 || v->isdynamic !=1) {
15  t_error("this vector was not properly allocated");
16 }
17 
18 
19 if(NN==1){
20 
21  for(i=1;i<v->nh;i++){
22 
23  if(v->co[i]!=novalue){
24  moment+=v->co[i];
25  n++;
26  }
27 
28  }
29 moment/=n;
30 
31 }else if(NN==2) {
32 
33  for(i=1;i<v->nh;i++){
34 
35  if(v->co[i]!=novalue){
36  moment+=(v->co[i])*(v->co[i]);
37  n++;
38  }
39 
40  }
41 
42 moment=(moment/n-mean*mean);
43 
44 }else {
45  for(i=1;i<v->nh;i++){
46 
47  if(v->co[i]!=novalue){
48  moment+=pow((v->co[i]-mean),NN);
49  n++;
50  }
51 
52  }
53 
54 moment/=n;
55 
56 }
57  return moment;
58 }
59 
60 /*----------------------------------------------------------------------------------*/
61 float floatvector_n_moment(FLOATVECTOR *v, float mean,float NN, float novalue)
62 {
63  unsigned i,n=0;
64  float moment=0;
65 
66 
67 if(v==NULL || v->co==NULL ){
68  t_error("this vector was never allocated");
69 } else if(v->nh <1 || v->isdynamic !=1) {
70  t_error("this vector was not properly allocated");
71 }
72 
73 
74 if(NN==1){
75 
76  for(i=1;i<v->nh;i++){
77 
78  if(v->co[i]!=novalue){
79  moment+=v->co[i];
80  n++;
81  }
82 
83  }
84 moment/=n;
85 
86 }else if(NN==2) {
87 
88  for(i=1;i<v->nh;i++){
89 
90  if(v->co[i]!=novalue){
91  moment+=(v->co[i])*(v->co[i]);
92  n++;
93  }
94 
95  }
96 
97 moment=(moment/n-mean*mean);
98 
99 }else {
100  for(i=1;i<v->nh;i++){
101 
102  if(v->co[i]!=novalue){
103  moment+=pow((v->co[i]-mean),NN);
104  n++;
105  }
106 
107  }
108 
109 moment/=n;
110 
111 }
112  return moment;
113 }
114 
115 
116 /*----------------------------------------------------------------------------------*/
117 double doublevector_n_moment(DOUBLEVECTOR *v, float mean,float NN, double novalue)
118 {
119  unsigned i,n=0;
120  double moment=0;
121 
122 
123 if(v==NULL || v->co==NULL ){
124  t_error("this vector was never allocated");
125 } else if(v->nh <1 || v->isdynamic !=1) {
126  t_error("this vector was not properly allocated");
127 }
128 
129 
130 if(NN==1){
131 
132  for(i=1;i<v->nh;i++){
133 
134  if(v->co[i]!=novalue){
135  moment+=v->co[i];
136  n++;
137  }
138 
139  }
140 moment/=n;
141 
142 }else if(NN==2) {
143 
144  for(i=1;i<v->nh;i++){
145 
146  if(v->co[i]!=novalue){
147  moment+=(v->co[i])*(v->co[i]);
148  n++;
149  }
150 
151  }
152 
153 moment=(moment/n-mean*mean);
154 
155 }else {
156  for(i=1;i<v->nh;i++){
157 
158  if(v->co[i]!=novalue){
159  moment+=pow((v->co[i]-mean),NN);
160  n++;
161  }
162 
163  }
164 
165 moment/=n;
166 
167 }
168  return moment;
169 }
170 
171 /*----------------------------------------------------------------------------------*/
172 
173 /*... Double precision variables' vector n-moment estimation */
174 float floatmatrix_n_moment(FLOATMATRIX *m, float mean,float NN, float novalue)
175 {
176  long i,j;
177  float moment=0, n;
178 
179 
180 if(m==NULL || m->co==NULL ){
181  t_error("this matrix was never allocated");
182 } else if(m->nrh <1 || m->nch <1 || m->isdynamic !=1) {
183  t_error("this matrix was not properly allocated");
184 }
185 
186 n=0;
187 
188 if(NN==1){
189  for(i=1;i<m->nrh;i++){
190  for(j=1;j<m->nch;j++){
191 
192  if(m->co[i][j]!=novalue){
193  moment+=m->co[i][j];
194  n++;
195  }
196 
197  }
198  }
199 
200 moment/=n;
201 
202 }else if(NN==2) {
203 
204  for(i=1;i<m->nrh;i++){
205  for(j=1;j<m->nch;j++){
206 
207  if(m->co[i][j]!=novalue) {
208  moment+=(m->co[i][j])*(m->co[i][j]);
209  n++;
210  }
211 
212  }
213  }
214 
215 moment=(moment/n-mean*mean);
216 
217 }else {
218  for(i=1;i<m->nrh;i++){
219  for(j=1;j<m->nch;j++){
220 
221  if(m->co[i][j]!=novalue){
222  moment+=pow((m->co[i][j]-mean),NN);
223  n++;
224  }
225  }
226  }
227 
228 moment/=n;
229 
230 }
231  return moment;
232 }
233 
234 /*----------------------------------------------------------------------------------*/
235 
236 double doublematrix_n_moment(DOUBLEMATRIX *m, double mean,double NN, double novalue)
237 {
238  long i,j;
239  double moment=0, n;
240 
241 
242 if(m==NULL || m->co==NULL ){
243  t_error("this matrix was never allocated");
244 } else if(m->nrh <1 || m->nch <1 || m->isdynamic !=1) {
245  t_error("this matrix was not properly allocated");
246 }
247 
248 n=0;
249 
250 if(NN==1){
251 
252  for(i=1;i<m->nrh;i++){
253  for(j=1;j<m->nch;j++){
254 
255  if(m->co[i][j]!=novalue){
256  moment+=m->co[i][j];
257  n++;
258  }
259  }
260  }
261 moment/=n;
262 
263 }else if(NN==2) {
264 
265  for(i=1;i<m->nrh;i++){
266  for(j=1;j<m->nch;j++){
267 
268  if(m->co[i][j]!=novalue){
269  moment+=(m->co[i][j])*(m->co[i][j]);
270  n++;
271  }
272  }
273  }
274 
275 moment=(moment/n-mean*mean);
276 
277 }else {
278  for(i=1;i<m->nrh;i++){
279  for(j=1;j<m->nch;j++){
280 
281  if(m->co[i][j]!=novalue){
282  moment+=pow((m->co[i][j]-mean),NN);
283  n++;
284  }
285  }
286  }
287 
288 moment/=n;
289 
290 }
291  return moment;
292 }
293 
294 
295 
296 /*----------------------------------------------------------------------------------*/
297 
298 float longmatrix_n_moment(LONGMATRIX *m, double mean,double NN, long novalue)
299 {
300  long i,j,n=0;
301  float moment=0;
302 
303 
304 if(m==NULL || m->co==NULL ){
305  t_error("this matrix was never allocated");
306 } else if(m->nrh <1 || m->nch <1 || m->isdynamic !=1) {
307  t_error("this matrix was not properly allocated");
308 }
309 
310 
311 if(NN==1){
312 
313  for(i=1;i<m->nrh;i++){
314  for(j=1;j<m->nch;j++){
315 
316  if(m->co[i][j]!=novalue){
317  moment+=m->co[i][j];
318  n++;
319  }
320  }
321  }
322 moment/=n;
323 
324 }else if(NN==2) {
325 
326  for(i=1;i<m->nrh;i++){
327  for(j=1;j<m->nch;j++){
328 
329  if(m->co[i][j]!=novalue){
330  moment+=(m->co[i][j])*(m->co[i][j]);
331  n++;
332  }
333  }
334  }
335 
336 moment=(moment/n-mean*mean);
337 
338 }else {
339  for(i=1;i<m->nrh;i++){
340  for(j=1;j<m->nch;j++){
341 
342  if(m->co[i][j]!=novalue){
343  moment+=pow((m->co[i][j]-mean),NN);
344  n++;
345  }
346  }
347  }
348 
349 moment/=n;
350 
351 }
352  return moment;
353 }
354 
355 /*----------------------------------------------------------------------------------*/
356 
357 float floatmatrix_restricted_n_moment(FLOATMATRIX *m,FLOATMATRIX *s, float mean,float NN, float novalue,float novalue2)
358 {
359  long i,j;
360  float moment=0, n;
361 
362 
363 if(m==NULL || m->co==NULL || s==NULL || s->co==NULL){
364  t_error("these matrices was never allocated");
365 } else if(m->nrh <1 || m->nch <1 || m->isdynamic !=1 || s->nrh <1 || s->nch <1 || s->isdynamic !=1) {
366  t_error("thess matrices was not properly allocated");
367 
368 }else if(m->nrh !=s->nrh || m->nch!=s->nch){
369  t_error("the matrixes do not have the same dimensions");
370 }
371 
372 n=0;
373 
374 if(NN==1){
375  for(i=1;i<m->nrh;i++){
376  for(j=1;j<m->nch;j++){
377 
378  if(m->co[i][j]!=novalue && s->co[i][j]!=novalue2){
379  moment+=m->co[i][j];
380  n++;
381  }
382 
383  }
384  }
385 
386 moment/=n;
387 
388 }else if(NN==2) {
389 
390  for(i=1;i<m->nrh;i++){
391  for(j=1;j<m->nch;j++){
392 
393  if(m->co[i][j]!=novalue && s->co[i][j]!=novalue2) {
394  moment+=(m->co[i][j])*(m->co[i][j]);
395  n++;
396  }
397 
398  }
399  }
400 
401 moment=(moment/n-mean*mean);
402 
403 }else {
404  for(i=1;i<m->nrh;i++){
405  for(j=1;j<m->nch;j++){
406 
407  if(m->co[i][j]!=novalue && s->co[i][j]!=novalue2){
408  moment+=pow((m->co[i][j]-mean),NN);
409  n++;
410  }
411  }
412  }
413 
414 moment/=n;
415 
416 }
417  return moment;
418 }
419 
420 /*----------------------------------------------------------------------------------*/
421 float longvector_correlation(LONGVECTOR *v,LONGVECTOR *u,float m1,float m2,long r,long novalue)
422 {
423  long i,n=0;
424  //float mn=0;
425  long correlation=0;
426 
427 
428 if(v==NULL || v->co==NULL || u==NULL || u->co==NULL ){
429  t_error("this vector was never allocated");
430 } else if(v->nh <1 || v->isdynamic !=1 || u->nh <1 || u->isdynamic !=1) {
431  t_error("this vector was not properly allocated");
432 }
433 
434 
435 
436 
437  for(i=1;i<v->nh-r;i++){
438 
439  if(v->co[i]!=novalue && u->co[i]!=novalue){
440  correlation+=v->co[i]*u->co[i+r];
441  n++;
442  }
443  }
444 
445 
446 
447 
448 return correlation/n -m1*m2;
449 
450 
451 
452 }
453 
454 
455 /*----------------------------------------------------------------------------------*/
456 float floatvector_correlation(FLOATVECTOR *v,FLOATVECTOR *u,float m1,float m2,long r,float novalue)
457 {
458  long i,n=0;
459  float correlation=0;
460 
461 
462 if(v==NULL || v->co==NULL || u==NULL || u->co==NULL ){
463  t_error("this vector was never allocated");
464 } else if(v->nh <1 || v->isdynamic !=1 || u->nh <1 || u->isdynamic !=1) {
465  t_error("this vector was not properly allocated");
466 }
467 
468 
469 
470 
471  for(i=1;i<v->nh-r;i++){
472 
473  if(v->co[i]!=novalue && u->co[i]!=novalue){
474  correlation+=v->co[i]*u->co[i+r];
475  n++;
476  }
477  }
478 
479 
480 
481 
482 return correlation/n -m1*m2;
483 
484 
485 
486 }
487 
488 
489 /*----------------------------------------------------------------------------------*/
490 double doublevector_correlation(DOUBLEVECTOR *v,DOUBLEVECTOR *u,double m1,double m2,long r,double novalue)
491 {
492  long i,n=0;
493  //float mn=0;
494  float correlation=0;
495 
496 
497 if(v==NULL || v->co==NULL || u==NULL || u->co==NULL ){
498  t_error("this vector was never allocated");
499 } else if(v->nh <1 || v->isdynamic !=1 || u->nh <1 || u->isdynamic !=1) {
500  t_error("this vector was not properly allocated");
501 }
502 
503 
504 
505 
506  for(i=1;i<v->nh-r;i++){
507 
508  if(v->co[i]!=novalue && v->co[i]!=novalue){
509  correlation+=v->co[i]*u->co[i+r];
510  n++;
511  }
512  }
513 
514 
515 
516 
517 return correlation/n -m1*m2;
518 
519 
520 
521 }
522 
523 
524 /*----------------------------------------------------------------------------------*/
525 
526 double double_n_moment(double *m, long nh,double mean,double NN, double novalue)
527 {
528  long i;
529  double moment=0, n;
530 
531 
532 if(m==NULL ){
533  t_error("this matrix was never allocated");
534 } else if(nh <1) {
535  t_error("this matrix was not properly allocated");
536 }
537 
538 n=0;
539 
540 if(NN==1){
541 
542  for(i=1;i<=nh;i++){
543 
544  if(m[i]!=novalue){
545  moment+=m[i];
546  n++;
547  /*printf("(%f,%f,%f)",m[i],moment,n);
548  scanf("%hd/n",&ch);*/
549  }
550 
551  }
552 
553 if(n >=1 ){
554  moment/=n;
555  /* printf("%f %f",moment,n);
556  scanf("%hd/n",&ch);*/
557 }else{
558  printf("\nWarning::No valid data were processed\n");
559  printf("\nWarning::setting moment value to zero\n");
560  moment=0;
561 }
562 
563 }else if(NN==2) {
564  for(i=1;i<=nh;i++){
565  if(m[i]!=novalue){
566  moment+=(m[i])*(m[i]);
567  n++;
568  /*printf("(%f,%f,%f)",m[i],moment,n);
569  scanf("%hd/n",&ch);*/
570  }
571 
572  }
573 if(n >=1 ){
574  moment=(moment/n-mean*mean);
575  /*printf("%f %f %f",moment,n,mean);
576  scanf("%hd/n",&ch);*/
577 }else{
578  printf("\nWarning::No valid data were processed\n");
579  printf("\nWarning::setting moment value to zero\n");
580  moment=0;
581 }
582 
583 
584 }else {
585  for(i=1;i<=nh;i++){
586  if(m[i]!=novalue){
587  moment+=pow((m[i]-mean),NN);
588  n++;
589  /*printf("%f %f %f %f %f",m[i],moment,n,mean,NN);
590  scanf("%hd/n",&ch);*/
591  }
592 
593  }
594 if(n >=1 ){
595  moment/=n;
596  /*printf("%f %f %f",moment,n);
597  scanf("%hd/n",&ch);*/
598 
599 }else{
600  printf("\nWarning::No valid data were processed\n");
601  printf("\nWarning::setting moment value to zero\n");
602  moment=0;
603 }
604 
605 }
606 
607 /* printf("%f\n",moment); */
608 return moment;
609 }
610 
611