matlab 求相关系数最大化的程序

来源:百度知道 编辑:UC知道 时间:2024/05/10 14:33:07
两个时间序列,也就是两个向量组,他们的相关系数是可以求得,现在有三个时间序列A、B、C,求A和aB+bC的相关系数最大,其中a+b=1,a>0,b>0
十分感谢你的回答,我运算了一下,发现不对,我这里
A=[3306 4318 4228 4846 6054 8084 8910 10247];
B=[2988 4303 4767 5161 6289 7274 9371 9892];
C=[3331 3991 4342 5886 5818 8414 8814 9564];
我这里已经求的A和B的相关系数为:0.9832,A和C的相关系数为0.9801
我是利用函数corrcoef(x,y)求的。
现在我的目的是为a、b,
使得A和aB+bC的相关系数最大,
其中约束条件为:a+b=1,a>0,b>0
麻烦你再看一下!谢谢!

在Matlab下输入:edit,然后将下面两行百分号之间的内容,复制进去,保存
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function y=zhidao_100(ab)
global A B C
a=ab(1);
b=ab(2);
aBbC=a*B+b*C;

tmp=corrcoef(A,aBbC);
y=-tmp(1,2); %求最大值,这里取负
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

在Matlab下输入:edit,然后将下面两行百分号之间的内容,复制进去,保存
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [y,yeq]=zhidao_100_cond(ab)
a=ab(1);
b=ab(2);
y=[-a;-b];
yeq=[a+b-1];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

返回Matlab输入:

global A B C
A=[3306 4318 4228 4846 6054 8084 8910 10247];
B=[2988 4303 4767 5161 6289 7274 9371 9892];
C=[3331 3991 4342 5886 5818 8414 8814 9564];
x0=[0.5;0.5]; xm=[0;0]; xM=[1;1]; Aneq=[]; Bneq=[]; Aeq=[]; Beq=[];
x=fmincon('zhidao_100',x0,Aneq,Bneq,Aeq,Beq,xm,xM, 'zhidao_100_cond')

结果:
x =
0.5338
0.4662