《量化投资:以MATLAB为工具》

MATLAB技术论坛

 找回密码
 注册账号
查看: 857|回复: 1
收起左侧

[源码] 运行出错求指导

[复制链接]
发表于 2016-3-15 15:20:18 | 显示全部楼层 |阅读模式
%cwstd.m,用总和标准化法标准化矩阵
function std=cwstd(vector)
cwsum=sum(vector,1);%对列求和
[a,b]=size(vector);%矩阵大小,a为行数,b为列数
for i=1:a
    for j=1:b
        std(i,j)=vector(i,j)/cwsum(j);
    end
end
%cwfac.m
function result=cwfac(vector);
fprintf('相关系数矩阵:\n')
std=CORRCOEF(vector)%计算相关系数矩阵
fprintf('特征向量(vec)及特征值(val):\n')
[vec,val]=eig(std)%求特征值(val)及特征向量(vec)
newval=diag(val)
[y,i]=sort(newval)%对特征根进行排序,y为排序结果,i为索引
fprintf('特征根排序:\n')
for z=1:length(y)
    newy(z)=y(length(y)+1-z);
end
fprintf('%g\n',newy)
rate=y/sum(y);
fprintf('\n贡献率:\n')
newrate=newy/sum(newy)
sumrate=0;
newi=[];
for k=length(y):-1:1
    sumrate=sumrate+rate(k);
    newi(length(y)+1-k)=i(k);
if sumrate>0.85 break;
end
end%记下累积贡献率大85%的特征值的序号放入newi中
fprintf('主成分数:%g\n\n',length(newi));
fprintf('主成分载荷:\n')
for p=1:length(newi)
    for q=1:length(y)
        result(q,p)=sqrt(newval(newi(p)))*vec(q,newi(p));
    end
end%计算载荷
disp(result)
%cwscore.m,计算得分
function score=cwscore(vector1,vector2);
sco=vector1*vector2;
csum=sum(sco,2);
[newcsum,i]=sort(-1*csum);
[newi,j]=sort(i);
fprintf('计算得分:\n')
score=[sco,csum,j]
%得分矩阵:sco为各主成分得分;csum为综合得分;j为排序结果
%cwprint.m
function print=cwprint(filename,a,b);
%filename为文本文件文件名,a为矩阵行数(样本数),b为矩阵列数(变量指标数)
fid=fopen(filename,'r')
vector=fscanf(fid,'%g',[a b]);
fprintf('标准化结果如下:\n')
v1=cwstd(vector)
result=cwfac(v1);
cwscore(v1,result);

运行结果
>> cwprint('data.txt',35,10)

fid =

     3

标准化结果如下:
??? Output argument "std" (and maybe others) not assigned during call to "F:\Program Files\MATLAB71\work\cwstd.m (cwstd)".

Error in ==> cwstd at 3
cwsum=sum(vector,1);%对列求和

Error in ==> cwprint at 7
v1=cwstd(vector)


 楼主| 发表于 2016-3-15 15:21:24 | 显示全部楼层
主成分分析运行出错,求指导,谢谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|网站地图|MATLAB技术论坛|Simulink仿真论坛 ( 蜀ICP备19014457号-2 

GMT+8, 2022-8-9 15:31 , Processed in 0.051593 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表