bonjours aujourd'hui lors d'une application j ai du faire une fonction qui calcul le coefficient de correlation d'un nuage de point ma procédure me semble plus que correct seulement lorsque je veux ecrire le vecteur contenant le rang de correlation les valeurs sont toutes les meme voici le code j espère que vous pourriez m aider a eclaircir cette idée. je vous met le code en entier pour ne pas que vous soyer perdu.
merci d avance

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
 
#include <stdio.h>
#include <math.h>
 
main()
{
    int i=1,j=0,nbpoint=0,calcul;
    float x[51]={0.},y[51]={0.},xbar=0.,ybar=0.,r=0.,a=0.,b=0.,bprim=0.,aprim=0.,etypex=0.,etypey=0.,
          rangx[51]={0.},rangy[51]={0.},rp = 0.,sommedicar=0.;
    void coefficient(float *,float *,float *,float *,float *,float *,float *,int,float *,float *,float *,float *);
    void rprim(float *,float *,float *,float *,float *,float *,int);
 
    FILE *fdat,*fres;
 
    fdat=fopen("correl2.dat","r");
    fres=fopen("claub040.res","w");
 
    fscanf(fdat,"%1d%2d",&calcul,&nbpoint);
 
    while(calcul !=0 && nbpoint > 0)
    {
        fprintf(fres,"Nuage de point %d\n",i);
        fprintf(fres,"-----------------\n");
        for(j=1;j<=nbpoint;j++)
        {
            fscanf(fdat,"%f%f",&x[j],&y[j]);
        }
        if(calcul != 2)
        {
            fprintf(fres,"\nvecteur x:\n");
            for(j=1;j<=nbpoint;j++)
            {
                fprintf(fres,"%5.2f  ",x[j]);
                if(j%10==0)
                {
                    fprintf(fres,"\n");
                }
            }
            fprintf(fres,"\nvecteur y:\n");
            for(j=1;j<=nbpoint;j++)
            {
                fprintf(fres,"%5.2f  ",y[j]);
                if(j%10==0)
                {
                    fprintf(fres,"\n");
                }
            }
            fprintf(fres,"\n");
            coefficient(&r,x,y,&xbar,&ybar,&etypex,&etypey,nbpoint,&a,&aprim,&b,&bprim);
            fprintf(fres,"xbar =%5.2f\n",xbar);
            fprintf(fres,"ybar =%5.2f\n",ybar);
            fprintf(fres,"ecart-type de x :%7.5f\n",etypex);
            fprintf(fres,"ecart-type de y :%7.5f\n",etypey);
            fprintf(fres,"coefficient r =%8.6f\n",r);
            fprintf(fres,"a =%8.5f\n",a);
            fprintf(fres,"aprim =%8.5f\n",aprim);
            fprintf(fres,"b =%8.5f\n",b);
            fprintf(fres,"bprim =%8.5f\n",bprim);
            fprintf(fres,"Dy(x) = %8.5f x + %8.5f\n",a,b);
            fprintf(fres,"Dx(y) = %8.5f x + %8.5f\n\n",aprim,bprim);
        }
        if(calcul !=1)
        {
            rprim(x,y,rangx,rangy,&sommedicar,&rp,nbpoint);
            fprintf(fres,"rang de x :\n");
            for(j=1;j<=nbpoint;j++)
            {
                fprintf(fres,"%5.2f",rangx[i]);
                if(j%10 == 0)
                {
                    fprintf(fres,"\n");
                }
            }
            fprintf(fres,"\nrang de y:\n");
            for(j=1;j<=nbpoint;j++)
            {
                fprintf(fres,"%5.2f",rangy[i]);
                if(j%10==0)
                {
                    fprintf(fres,"\n");
                }
            }
        }
        i++;
        fscanf(fdat,"%d%2d",&calcul,&nbpoint);
    }
 
}
void coefficient(float *r,float x[],float y[],float *xbar,float *ybar,float *etypex,float *etypey,int nbpoint,float *a,float *aprim,float *b,float *bprim)
{
    int i=0;
    float sommexy=0.;
    float moyenne(int,float *,float *);
    *xbar = moyenne(nbpoint,x,etypex);
    *ybar = moyenne(nbpoint,y,etypey);
    for(i=1;i<=nbpoint;i++)
    {
        sommexy += x[i]*y[i];
    }
    *r = (sommexy - ((nbpoint*1.)*(*xbar)*(*ybar)))/((nbpoint*1.)*(*etypex)*(*etypey));
    *a = (*r)*( (*etypey)/(*etypex));
    *aprim = (*r) * ((*etypex)/(*etypey));
    *b = (*xbar) - (*a) * (*ybar);
    *bprim = (*xbar) - (*aprim) * (*ybar);
}
float moyenne(int nbpoint,float x[],float *etype)
{
    int i=0;
    float moy =0.,xcar =0.,var =0.;
    for(i=1;i<=nbpoint;i++)
    {
        moy += x[i];
    }
    moy /= nbpoint;
    for(i=1;i<=nbpoint;i++)
    {
        xcar += pow(x[i],2);
    }
    var = (xcar/(nbpoint*1.)) - pow(moy,2);
    *etype = sqrt(var);
    return moy;
}
void rprim(float x[],float y[],float rangx[],float rangy[],float *sommedicar,float *rprim,int nbpoint)
{
    int i=0;
    float inter =0.;
    void calculrang(float *,float *,int);
    calculrang(x,rangx,nbpoint);
    calculrang(y,rangy,nbpoint);
 
    for(i=1;i<=nbpoint;i++)
    {
        inter = x[i]-y[i];
        *sommedicar += pow(inter,2);
    }
    *rprim = 1 - ((6*(*sommedicar))/(nbpoint * (pow(nbpoint,2) -1)));
}
void calculrang(float x[],float rang[],int nbpoint)
{
    int i=0,j=0;
    for(i=1;i<=nbpoint;i++)
    {
        rang[i]=1;
    }
    for(i=1;i<=nbpoint;i++)
    {
        for(j=1;j<=nbpoint;j++)
        {
            if(x[i]>x[j])
            {
                rang[i]=rang[i]+1;
            }
            if(x[i]==x[j])
            {
                rang[i]=rang[i]+0.5;
            }
        }
        rang[i] -= 0.5;
    }
}