function Output=CopulaEvaluator(U,V,X,Y)
[N,M]=size(U);
%1.估计 copula 函数参数
Parameter_Gaussian=copulafit('gaussian',[U V]);
%%[Parameter_t,nuhat_t]=copulafit('t',[U V]);
Parameter_Clayton=copulafit('clayton',[U V]);
Parameter_Frank=copulafit('frank',[U V]);
Parameter_Gumbel=copulafit('gumbel',[U V]);
%2.计算 Spearman 相关系数
Spearman_Gaussian=copulastat('gaussian',Parameter_Gaussian(1,2),'type','Kendall');
%%Spearman_t=copulastat('t',Parameter_t(1,2),nuhat_t,'type','Kendall');
Spearman_Clayton=copulastat('clayton',Parameter_Clayton,'type','Kendall');
Spearman_Frank=copulastat('frank',Parameter_Frank,'type','Kendall');
Spearman_Gumbel=copulastat('gumbel',Parameter_Gumbel,'type','Kendall');
%3.计算 Kendall秩相关系数
Kendall_Gaussian=copulastat('gaussian',Parameter_Gaussian(1,2),'type','Kendall');
%%Kendall_t=copulastat('t',Parameter_t(1,2),nuhat_t,'type','Kendall');
Kendall_Clayton=copulastat('clayton',Parameter_Clayton,'type','Kendall');
Kendall_Frank=copulastat('frank',Parameter_Frank,'type','Kendall');
Kendall_Gumbel=copulastat('gumbel',Parameter_Gumbel,'type','Kendall');
%4.计算欧式距离
[fx,Xsort]=ecdf(X);
[fy,Ysort]=ecdf(Y);
U=spline(Xsort(2:end),fx(2:end),X);
V=spline(Ysort(2:end),fy(2:end),Y);
C=@(u,v)mean((U<=u).*(V<=v)); %定义经验 copula 函数
Copula_Empirical=zeros(size(U(:)));
for i=1:numel(U);
Copula_Empirical(i)=C(U(i),V(i));
end
Copula_Gaussian=copulacdf('gaussian',[U(:),V(:)],Parameter_Gaussian(1,2));
%%Copula_t=copulacdf('t',[U(:),V(:)],Parameter_t(1,2),nuhat_t);
Copula_Clayton=copulacdf('clayton',[U(:),V(:)],Parameter_Clayton);
Copula_Frank=copulacdf('frank',[U(:),V(:)],Parameter_Frank);
Copula_Gumbel=copulacdf('gumbel',[U(:),V(:)],Parameter_Gumbel);
Distance_Gaussian=(Copula_Empirical-Copula_Gaussian)'*(Copula_Empirical-Copula_Gaussian);
%%Distance_t=(Copula_Empirical-Copula_t)'*(Copula_Empirical-Copula_t);
Distance_Clayton=(Copula_Empirical-Copula_Clayton)'*(Copula_Empirical-Copula_Clayton);
Distance_Frank=(Copula_Empirical-Copula_Frank)'*(Copula_Empirical-Copula_Frank);
Distance_Gumbel=(Copula_Empirical-Copula_Gumbel)'*(Copula_Empirical-Copula_Gumbel);
Output=[Parameter_Gaussian(1,2),0,Kendall_Gaussian,Spearman_Gaussian,Distance_Gaussian;
Parameter_Clayton,0,Kendall_Clayton,Spearman_Clayton,Distance_Clayton;
Parameter_Frank,0,Kendall_Frank,Spearman_Frank,Distance_Frank;
Parameter_Gumbel,0,Kendall_Gumbel,Spearman_Gumbel,Distance_Gumbel;];
%%%%%%%%%%%%数据有问题??,t-copula无法使用 Parameter_t(1,2),nuhat_t,Kendall_t,Spearman_t,Distance_t;