Copula理论及MATLAB应用实例Word格式文档下载.docx
《Copula理论及MATLAB应用实例Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Copula理论及MATLAB应用实例Word格式文档下载.docx(28页珍藏版)》请在冰豆网上搜索。
end),fx(2:
end),X);
V1=spline(Ysort(2:
end),fy(2:
end),Y);
%提取fx和fy的第2个至最后一个元素,即排序后样本点处的经验分布函数值
fx=fx(2:
end);
fy=fy(2:
%通过排序和反排序恢复原始样本点处的经验分布函数值U1和V1
[Xsort,id]=sort(X);
[idsort,id]=sort(id);
U1=fx(id);
[Ysort,id]=sort(Y);
V1=fy(id);
%*******************************核分布估计**********************************
%调用ksdensity函数分别计算原始样本X和Y处的核分布估计值
U2=ksdensity(X,X,'
function'
'
cdf'
**********************
V2=ksdensity(Y,Y,'
绘制经验分布函数图和核分布估计图**********************
%为了作图的需要,对X进行排序
%新建一个图形窗口plot(Xsort,U1(id),'
c'
LineWidth'
%绘制沪市日收益率的经验分布函数图
holdonplot(Xsort,U2(id),'
k-.'
2);
%绘制沪市日收益率的核分布估计图
legend('
经验分布函数’,核分布估计'
Location'
NorthWest'
%加标注框xlabel('
沪市日收益率'
%为X轴加标签ylabel('
F(x)'
%为了作图的需要,对Y进行排序figure;
%新建一个图形窗口
plot(Ysort,V1(id),'
%绘制深市日收益率的经验分布函数图holdon
plot(Ysort,V2(id),'
%绘制深市日收益率的核分布估计图legend('
%加标注框
深市日收益率'
U=ksdensity(X,X,'
V=ksdensity(Y,Y,'
%绘制边缘分布的二元频数直方图,
hist3([U(:
)V(:
)],[30,30])
U(沪市)'
%为X轴加标签ylabel('
V(深市)'
%为Y轴加标签zlabel('
频数'
%为z轴加标签
h=get(gca,'
Children'
%获取频数直方图的句柄值
cuv=get(h,'
ZData'
%获取频数直方图的Z轴坐标set(h,'
cuv*30*30/length(X));
%对频数直方图的Z轴坐标作变换xlabel('
zlabel('
c(u,v)'
%为z轴加标签
%***********************
求Copula中参数的估计值******************************
%调用copulafit函数估计二元正态Copula中的线性相关参数
rho_norm=copulafit('
Gaussian'
[U(:
),V(:
)])
%调用copulafit函数估计二元t-Copula中的线性相关参数和自由度
[rho_t,nuhat,nuci]=copulafit('
t'
%********************
绘制Copula的密度函数和分布函数图************************
[Udata,Vdata]=meshgrid(linspace(0,1,31));
%为绘图需要,产生新的网格数据
%调用copulapdf函数计算网格点上的二元正态Copula密度函数值Cpdf_norm=copulapdf('
[Udata(:
),Vdata(:
)],rho_norm);
%调用copulacdf函数计算网格点上的二元正态Copula分布函数值
Ccdf_norm=copulacdf('
%调用copulapdf函数计算网格点上的二元t-Copula密度函数值Cpdf_t=copulapdf('
)],rho_t,nuhat);
%调用copulacdf函数计算网格点上的二元t-Copula分布函数值
Ccdf_t=copulacdf('
%绘制二元正态Copula的密度函数和分布函数图figure;
%新建图形窗口
surf(Udata,Vdata,reshape(Cpdf_norm,size(Udata)));
%绘制二元正态Copula密度函数图xlabel('
U'
V'
%为z轴加标签figure;
surf(Udata,Vdata,reshape(Ccdf_norm,size(Udata)));
%绘制二元正态Copula分布函数图xlabel('
C(u,v)'
%绘制二元t-Copula的密度函数和分布函数图figure;
surf(Udata,Vdata,reshape(Cpdf_t,size(Udata)));
%绘制二元t-Copula密度函数图xlabel('
surf(Udata,Vdata,reshape(Ccdf_t,size(Udata)));
%绘制二元t-Copula分布函数图xlabel('
%**************求Kendall秩相关系数和Spearman秩相关系数***********************%调用copulastat函数求二元正态Copula对应的Kendall秩相关系数Kendall_norm=copulastat('
rho_norm)
%调用copulastat函数求二元正态Copula对应的Spearman秩相关系数Spearman_norm=copulastat('
rho_norm,'
type'
Spearman'
)
%调用copulastat函数求二元t-Copula对应的Kendall秩相关系数
Kendall_t=copulastat('
rho_t)
%调用copulastat函数求二元t-Copula对应的Spearman秩相关系数
%直接根据沪、深两市日收益率的原始观测数据,调用corr函数求Kendall秩相关系数Kendall=corr([X,Y],'
Kendall'
%直接根据沪、深两市日收益率的原始观测数据,调用corr函数求Spearman秩相关系数Spearman=corr([X,Y],'
%******************************模型评价*************************************
U=spline(Xsort(2:
V=spline(Ysort(2:
%定义经验Copula函数C(u,v)C=@(u,v)mean((U<
=u).*(V<
=v));
%为作图的需要,产生新的网格数据
%通过循环计算经验Copula函数在新产生的网格点处的函数值
fori=1:
numel(Udata)
CopulaEmpirical(i)=C(Udata(i),Vdata(i));
end
%绘制经验Copula分布函数图像surf(Udata,Vdata,reshape(CopulaEmpirical,size(Udata)))xlabel('
EmpiricalCopulaC(u,v)'
%通过循环计算经验Copula函数在原始样本点处的函数值
CUV=zeros(size(U(:
)));
numel(U)
CUV(i)=C(U(i),V(i));
%计算线性相关参数为0.9264的二元正态Copula函数在原始样本点处的函数值rho_norm=0.9264;
Cgau=copulacdf('
%计算线性相关参数为0.9325,自由度为4的二元t-Copula函数在原始样本点处的函数值rho_t=0.9325;
k=4.0089;
Ct=copulacdf('
)],rho_t,k);
%计算平方欧氏距离dgau2=(CUV-Cgau)'
*(CUV-Cgau)dt2=(CUV-Ct)'
*(CUV-Ct)
灰色预测[GM(1,1)]MATLAB程序
%本程序主要用来计算根据灰色理论建立的模型的预测值
%应用的数学模型是GM(1,1)。
%原始数据的处理方法是一次累加法。
[48.757.17
y=input('
请输入数据'
%输入数据请用如例所示形式:
68.7692.15]
n=length(y);
yy=ones(n,1);
yy
(1)=y
(1);
fori=2:
nyy(i)=yy(i-1)+y(i);
B=ones(n-1,2);
(n-1)
B(i,1)=-(yy(i)+yy(i+1))/2;
B(i,2)=1;
BT=B'
;
forj=1:
n-1
YN(j)=y(j+1);
YN=YN'
A=inv(BT*B)*BT*YN;
a=A
(1);
u=A
(2);
t=u/a;
t_test=input('
请输入需要预测个数:
'
i=1:
t_test+n;
yys(i+1)=(y
(1)-t).*exp(-a.*i)+t;
yys
(1)=y
(1);
forj=n+t_test:
-1:
2
ys(j)=yys(j)-yys(j-1);
endx=1:
n;
xs=2:
n+t_test;
yn=ys(2:
n+t_test);
plot(x,y,'
W'
xs,yn,'
*-b'
det=0;
n
det=det+abs(yn(i)-y(i));
det=det/(n-1);
disp(['
百分绝对误差为:
num2str(det),'
%'
]);
预测值为:
num2str(ys(n+1:
n+t_test))]);
Matlab二维绘图
2010-06-0820:
41
本节介绍MATLAB的两种基本绘图功能:
二维平面图形和三维立体图形
5.1二维平面图形
5.1.1基本图形函数
plot是绘制二维图形的最基本函数,它是针对向量或矩阵的列来绘制曲线的。
也
就是
说,使用plot函数之前,必须首先定义好曲线上每一点的X及y坐标,常用格
式为:
(1)plot(x)当X为一向量时,以X元素的值为纵坐标,X的序号为横坐标值绘制
曲线。
当X为一实矩阵时,则以其序号为横坐标,按列绘制每列元素值相对于其序号的曲
线,当X为mixn矩阵时,就由n条曲线。
(2)plot(x,y)以X元素为横坐标值,y元素为纵坐标值绘制曲线。
(3)plot(x,y1,x,y2,•以公共的X元素为横坐标值,以y1,y2,…元素为纵坐标值绘制多条曲线。
例5.1.1画出一条正弦曲线和一条余弦曲线
>
x=0:
pi/10:
2*pi;
y1=sin(x);
y2=cos(x);
plot(x,y1,x,y2)
图5.1.1函数plot绘制的正弦曲线在绘制曲线图形时,常常采用多种颜色或线型来区分不同的数据组,MATLAB软件专
门提供了这方面的参数选项(见表5.1.1),我们只要在每个坐标后加上相关字符串,就可
实现它们的功能。
表5.1.1绘图参数表色彩字符颜色线型字符线型格式标记符号数据点形式标记符号数据点形式
y黄-实线.点<
小于号m紫:
点线o圆s正方形c青-.点划线x叉号d菱形r红--虚线+加号h六角星g绿*星号p五角星b蓝v向下三角形w白A向上三角形k黑>
大于号例如,在上例中输入
plot(x,y1,'
r+-'
x,y2,'
k*:
'
则得图5.1.2
图5.1.2使用不同标记的plot函数绘制的正弦曲线
5.1.2图形修饰
MATLAB软件为用户提供了一些特殊的图形函数,用于修饰已经绘制好的图形。
表5.1.2图形修饰函数表
函数含义
gridon(/off)给当前图形标记添加(取消)网络
xlable(‘string'
标记横坐标
ylabel(‘string'
标记纵坐标
title(‘string'
给图形添加标题
text(x,y,'
string在图形的任意位置增加说明性文本信息
gtext(‘string'
利用鼠标添加说明性文本信息
axis([xminxmaxyminymax])设置坐标轴的最小最大值
例5.1.2给例5.1.1的图形中加入网络和标记。
(见图5.1.3和5.1.4)
gridon
xlabel('
independentvariableX'
ylabel('
DependentVariableY1&
Y2'
title('
SineandCosineCurve'
text(1.5,0.3,'
cos(x)'
gtext('
sin(x)'
axis([02*pi-0.90.9])
图5.1.3使用了图形修饰的plot函数绘制的正弦曲线
5.1.3图形的比较显示
在一般默认的情况下,MATLAB每次使用plot函数进行图形绘制,将重新产生一个图
形窗口。
但有时希望后续的图形能够和前面所绘制的图形进行比较。
一般来说有
两种方法:
一是采用holdon(/off)命令,将新产生的图形曲线叠加到已有的图形上;
二是采用subplot(m,n,k)函数,将图形窗口分隔成nmx个子图,并选择第k个子图作为当前图形
,然后在同一个视图窗口中画出多个小图形。
例5.1.3在同一窗口中绘制线段
y1=sin(x);
y3=x;
y4=log(x);
holdon
plot(x,y3)
plot(x,y4)
holdoff
例5.1.4在多个窗口中绘制图形。
(见图5.1.6)
y3=exp(x);
subplot(2,2,1);
plot(x,y1);
subplot(2,2,2);
plot(x,y2);
subplot(2,2,3);
plot(x,y3);
subplot(2,2,4);
plot(x,y4);
[说明]
(1)子窗口的序号按行由上往下,按列从左向右编号。
(2)如果不用指令clf清除,以后图形将被绘制在子图形窗口中
图5.1.6图形的比较显示(图形窗口分割方法)
5.2三维立体图形
5.2.1三维曲线图
与二维图形相对应,MATLAB提供了plot3函数,可以在三维空间中绘制三维曲线,
它的格式类似于plot,不过多了z方向的数据。
plot3的调用格式为:
plot3(x1,y1,z1,x2,y2,z2,..J
其中x1,y1,z1,x2,y2,z2,等分别为维数相同的向量,分别存储着曲线的三个坐标值,该
函数的使用方式和plot类似,也可以采用多种的颜色或线型(见表5.1.1)来区分不同的数据
组,只需在每组变量后面加上相关字符串即可实现该功能。
例5.2.1绘制方程x=ty=sin(t)
z=cos(t)
在t=[0,2*pi]上的空间万程。
(见图521)>
clf
plot3(y1,y2,x,'
m:
p'
DependentVariableY1'
)>
DependentVariableY2'
zlabel('
IndependentVariableX'
图5.2.1函数plot绘制的三维曲线图
5.2.2三维曲面图
如果要画一个三维的曲面,可以使用mesh(X,Y,Z)或surf(X,Y,Z)函数来实现。
mesh函数为数据点绘制网格线,图形中的每一个已知点和其附近的点用直线连
接。
surf
函数和mesh的用法类似,但它可以画出着色表面图,图形中的每一个已知点与其相邻点以
平面连接。
为方便测试立体绘图,MATLAB提供了一个pea