-1
私はRstudioでこの関数をコンパイルするとき、私はこのエラーを取得:関数を定義した後でさえ、Cでの関数の暗黙の宣言は?
Implicit declaration of function 'Hfunc' is invalid in C99.
私は、この関数のプロトタイプを選択する方法がわかりません。私は次のコード全体で使用Free
機能のために同じ
for(int i=0;i<*n;i++)
{
if(u[i]<UMIN) u[i]=UMIN;
else if(u[i]>UMAX) u[i]=UMAX;
if(v[i]<UMIN) v[i]=UMIN;
else if(v[i]>UMAX) v[i]=UMAX;
}
それを使用
#define UMAX 1-1e-10
:
また、私はそれらの1は既にこのように定義されている他の機能と同じエラーが出ますvoid Hfunc(int* family, int* n, double* u, double* v, double* theta, double* nu, double* out)
{
int j;
double *h;
h = Calloc(*n,double);
double x;
for(j=0;j<*n;j++)
{
if((v[j]==0) | (u[j]==0))
h[j] = 0;
else if (v[j]==1)
h[j] = u[j];
else
{
if(*family==0) //independent
{
h[j] = u[j];
}
else if(*family==1) //gaussian
{
x = (qnorm(u[j],0.0,1.0,1,0) - *theta*qnorm(v[j],0.0,1.0,1,0))/sqrt(1.0-pow(*theta,2.0));
if (isfinite(x))
h[j] = pnorm(x,0.0,1.0,1,0);
else if ((qnorm(u[j],0.0,1.0,1,0) - *theta*qnorm(v[j],0.0,1.0,1,0)) < 0)
h[j] = 0;
else
h[j] = 1;
}
else if(*family==2) //student
{
double t1, t2, mu, sigma2;
t1 = qt(u[j],*nu,1,0); t2 = qt(v[j],*nu,1,0); mu = *theta*t2; sigma2 = ((*nu+t2*t2)*(1.0-*theta*(*theta)))/(*nu+1.0);
h[j] = pt((t1-mu)/sqrt(sigma2),*nu+1.0,1,0);
}
else if(*family==3) //clayton
{
if(*theta == 0) h[j] = u[j] ;
if(*theta < XEPS) h[j] = u[j] ;
else
{
x = pow(u[j],-*theta)+pow(v[j],-*theta)-1.0 ;
h[j] = pow(v[j],-*theta-1.0)*pow(x,-1.0-1.0/(*theta));
if(*theta < 0)
{
if(x < 0) h[j] = 0;
}
}
}
else if(*family==4) //gumbel
{
if(*theta == 1) h[j] = u[j] ;
else
{
h[j] = -(exp(-pow(pow(-log(v[j]),*theta)+pow(-log(u[j]),*theta),1.0/(*theta)))*pow(pow(-log(v[j]),*theta)+pow(-log(u[j]),*theta),1.0/(*theta)-1.0)*pow(-log(v[j]),*theta))/(v[j]*log(v[j]));
}
}
else if(*family==5) //frank
{
if(*theta==0) h[j]=u[j];
else
{
h[j] = -(exp(*theta)*(exp(*theta*u[j])-1.0))/(exp(*theta*v[j]+*theta*u[j])-exp(*theta*v[j]+*theta)-exp(*theta*u[j]+*theta)+exp(*theta));
}
}
else if(*family==6) //joe
{
if(*theta==1) h[j]=u[j];
else
{
h[j] = pow(pow(1.0-u[j],*theta) + pow(1.0-v[j],*theta) - pow(1.0-u[j],*theta)*pow(1.0-v[j],*theta),1.0/(*theta)-1) * pow(1.0-v[j],*theta-1.0)*(1-pow(1-u[j],*theta));
}
}
else if(*family==7) //BB1
{
double* param;
param = Calloc(2,double);
param[0]=*theta;
param[1]=*nu;
int T=1;
if(*nu==1)
{
if(*theta==0) h[j]=u[j];
else h[j]=pow(pow(u[j],-*theta)+pow(v[j],-*theta)-1,-1/(*theta)-1)*pow(v[j],-*theta-1);
}
else if(*theta==0)
{
h[j]=-(exp(-pow(pow(-log(v[j]),*nu)+pow(-log(u[j]),*nu),1.0/(*nu)))*pow(pow(-log(v[j]),*nu)+pow(-log(u[j]),*nu),1.0/(*nu)-1.0)*pow(-log(v[j]),*nu))/(v[j]*log(v[j]));
}
else
{
pcondbb1(&v[j],&u[j],&T,param,&h[j]);
}
Free(param);
}
else if(*family==8) //BB6
{
double* param;
param = Calloc(2,double);
param[0]=*theta;
param[1]=*nu;
int T=1;
if(*theta==1)
{
if(*nu==1) h[j]=u[j];
else h[j]=-(exp(-pow(pow(-log(v[j]),*nu)+pow(-log(u[j]),*nu),1.0/(*nu)))*pow(pow(-log(v[j]),*nu)+pow(-log(u[j]),*nu),1.0/(*nu)-1.0)*pow(-log(v[j]),*nu))/(v[j]*log(v[j]));
}
else if(*nu==1)
{
h[j]=pow(pow(1.0-u[j],*theta) + pow(1.0-v[j],*theta) - pow(1.0-u[j],*theta)*pow(1.0-v[j],*theta),1.0/(*theta)-1) * pow(1.0-v[j],*theta-1.0)*(1-pow(1-u[j],*theta));
}
else
{
pcondbb6(&v[j],&u[j],&T,param,&h[j]);
}
Free(param);
}
else if(*family==9) //BB7
{
double* param;
param = Calloc(2,double);
param[0]=*theta;
param[1]=*nu;
int T=1;
if(*theta==1)
{
if(*nu==0) h[j]=u[j];
else h[j]=pow(pow(u[j],-*nu)+pow(v[j],-*nu)-1,-1/(*nu)-1)*pow(v[j],-*nu-1);
}
else if(*nu==0)
{
h[j] = pow(pow(1.0-u[j],*theta) + pow(1.0-v[j],*theta) - pow(1.0-u[j],*theta)*pow(1.0-v[j],*theta),1.0/(*theta)-1) * pow(1.0-v[j],*theta-1.0)*(1-pow(1-u[j],*theta));
}
else
{
pcondbb7(&v[j],&u[j],&T,param,&h[j]);
}
Free(param);
}
else if(*family==10) //BB8
{
double* param;
param = Calloc(2,double);
param[0]=*theta;
param[1]=*nu;
int T=1;
if(*nu==0)
{
h[j]=u[j];
}
else if(*nu==1)
{
if(*theta==1) h[j]=u[j];
else h[j]=pow(pow(1.0-u[j],*theta) + pow(1.0-v[j],*theta) - pow(1.0-u[j],*theta)*pow(1.0-v[j],*theta),1.0/(*theta)-1) * pow(1.0-v[j],*theta-1.0)*(1-pow(1-u[j],*theta));
}
else
{
pcondbb8(&v[j],&u[j],&T,param,&h[j]);
}
Free(param);
}
else if(*family==13) //rotated clayton (180?)
{
if(*theta == 0) h[j] = u[j] ;
if(*theta < XEPS) h[j] = u[j] ;
else
{
u[j]=1-u[j];
v[j]=1-v[j];
x = pow(u[j],-*theta)+pow(v[j],-*theta)-1.0 ;
h[j] = pow(v[j],-*theta-1.0)*pow(x,-1.0-1.0/(*theta)); // pow(v[j],-*theta-1.0)*pow(pow(u[j],-*theta)+pow(v[j],-*theta)-1.0,-1.0-1.0/(*theta));
h[j]= 1-h[j];
u[j]=1-u[j];
v[j]=1-v[j];
}
}
else if(*family==14) //rotated gumbel (180?)
{
v[j]= 1-v[j];
u[j]= 1-u[j];
h[j]= -(exp(-pow(pow(-log(v[j]),*theta)+pow(-log(u[j]),*theta),1.0/(*theta)))*pow(pow(-log(v[j]),*theta)+pow(-log(u[j]),*theta),1.0/(*theta)-1.0)*pow(-log(v[j]),*theta))/(v[j]* log(v[j]));
h[j]= 1-h[j];
u[j]=1-u[j];
v[j]=1-v[j];
}
else if(*family==16)
{
v[j]= 1-v[j];
u[j]= 1-u[j];
h[j] = pow(pow(1.0-u[j],*theta) + pow(1.0-v[j],*theta) - pow(1.0-u[j],*theta)*pow(1.0-v[j],*theta),1.0/(*theta)-1) * pow(1.0-v[j],*theta-1.0)*(1-pow(1-u[j],*theta));
h[j]= 1-h[j];
u[j]=1-u[j];
v[j]=1-v[j];
}
else if(*family==17) //rotated BB1
{
double* param;
param = Calloc(2,double);
param[0]=*theta;
param[1]=*nu;
int T=1;
if(*nu==1)
{
if(*theta==0) h[j]=u[j];
else
{
h[j]=pow(pow(1-u[j],-*theta)+pow(1-v[j],-*theta)-1,-1/(*theta)-1)*pow(1-v[j],-*theta-1);
h[j]= 1-h[j];
}
}
else if(*theta==0)
{
h[j]=-(exp(-pow(pow(-log(1-v[j]),*nu)+pow(-log(1-u[j]),*nu),1.0/(*nu)))*pow(pow(-log(1-v[j]),*nu)+pow(-log(1-u[j]),*nu),1.0/(*nu)-1.0)*pow(-log(1-v[j]),*nu))/((1-v[j])*log(1-v[j]));
h[j]= 1-h[j];
}
else
{
v[j]= 1-v[j];
u[j]= 1-u[j];
pcondbb1(&v[j],&u[j],&T,param,&h[j]);
u[j]=1-u[j];
v[j]=1-v[j];
h[j]= 1-h[j];
}
Free(param);
}
else if(*family==18) //rotated BB6
{
double* param;
param = Calloc(2,double);
param[0]=*theta;
param[1]=*nu;
int T=1;
if(*theta==1)
{
if(*nu==1) h[j]=u[j];
else
{
h[j]=-(exp(-pow(pow(-log(1-v[j]),*nu)+pow(-log(1-u[j]),*nu),1.0/(*nu)))*pow(pow(-log(1-v[j]),*nu)+pow(-log(1-u[j]),*nu),1.0/(*nu)-1.0)*pow(-log(1-v[j]),*nu))/((1-v[j])*log(1-v[j]));
h[j]= 1-h[j];
}
}
else if(*nu==1)
{
h[j]=pow(pow(u[j],*theta) + pow(v[j],*theta) - pow(u[j],*theta)*pow(v[j],*theta),1.0/(*theta)-1) * pow(v[j],*theta-1.0)*(1-pow(u[j],*theta));
h[j]= 1-h[j];
}
else
{
v[j]= 1-v[j];
u[j]= 1-u[j];
pcondbb6(&v[j],&u[j],&T,param,&h[j]);
u[j]=1-u[j];
v[j]=1-v[j];
h[j]= 1-h[j];
}
Free(param);
}
else if(*family==19) //rotated BB7
{
double* param;
param = Calloc(2,double);
param[0]=*theta;
param[1]=*nu;
int T=1;
if(*theta==1)
{
if(*nu==0) h[j]=u[j];
else{
h[j]=pow(pow(1-u[j],-*nu)+pow(1-v[j],-*nu)-1,-1/(*nu)-1)*pow(1-v[j],-*nu-1);
h[j]= 1-h[j];
}
}
else if(*nu==0)
{
h[j] = pow(pow(u[j],*theta) + pow(v[j],*theta) - pow(u[j],*theta)*pow(v[j],*theta),1.0/(*theta)-1) * pow(v[j],*theta-1.0)*(1-pow(u[j],*theta));
h[j]= 1-h[j];
}
else
{
v[j]= 1-v[j];
u[j]= 1-u[j];
pcondbb7(&v[j],&u[j],&T,param,&h[j]);
u[j]=1-u[j];
v[j]=1-v[j];
h[j]= 1-h[j];
}
Free(param);
}
else if(*family==20) //rotated BB8
{
double* param;
param = Calloc(2,double);
param[0]=*theta;
param[1]=*nu;
int T=1;
if(*nu==0)
{
h[j]=u[j];
}
else if(*nu==1)
{
if(*theta==1) h[j]=u[j];
else{
h[j]=pow(pow(u[j],*theta) + pow(v[j],*theta) - pow(u[j],*theta)*pow(v[j],*theta),1.0/(*theta)-1) * pow(v[j],*theta-1.0)*(1-pow(u[j],*theta));
h[j]= 1-h[j];
}
}
else
{
v[j]= 1-v[j];
u[j]= 1-u[j];
pcondbb8(&v[j],&u[j],&T,param,&h[j]);
u[j]=1-u[j];
v[j]=1-v[j];
h[j]= 1-h[j];
}
Free(param);
}
else if(*family==41)
{
double t1,t2,t3;
t1=qgamma(1.0-u[j],*theta,1,1,0);
t2=qgamma(1.0-v[j],*theta,1,1,0);
t3=pow(pow(t1,*theta)+pow(t2,*theta),(1.0/(*theta)));
h[j]=exp(-t3+t1);
}
}
out[j] = MAX(MIN(h[j],UMAX),UMIN);
}
Free(h);
}
助けてください。
これはCかC++ですか? – yizzlez
Cの質問があるときにC++タグを使用しないでください。彼らは異なる言語です。 – NathanOliver
異なるエラーが混在しています。 *フル*ビルドログを編集せずにインクルードしてください。単にコードとしてフォーマットしてください。次に、私たちに見せることができる[最小、**完全**、および検証可能な例](http://stackoverflow.com/help/mcve)を作成してみてください。 –