![]() |
if语句的代码与求出结果不符合,请问该如何解决和修改?
if语句的代码与求出结果不符合,请问该如何解决和修改?
x_farm有4个因子(列);4个对象(行),我想对x_farm进行因子剔除,通过计算相关系数和方差,要求两者(i,j)相关系数大于0.9,若i 的方差大于j 的方差,就剔除j 因子。我的代码如下 clear x_farm=[167.6200 100.4584 100.1472 160.3753;171.3246 93.5399 97.7215 148.9536;159.2697 88.2294 92.2526 142.8844;177.3102 102.1516 102.4093 163.5383] cov=var(x_farm) %计算方差 C=corrcoef(x_farm)%计算相关系数 for i=1:length(x_farm) for j=i:length(x_farm) if C(j,i)>=0.9 && cov(i)>cov(j) x_farm(:,j)=[] else x_farm(:,j)=x_farm(:,j) end end end 结果如下: x_farm = 167.6200 100.4584 100.1472 160.3753 171.3246 93.5399 97.7215 148.9536 159.2697 88.2294 92.2526 142.8844 177.3102 102.1516 102.4093 163.5383 cov = 56.9966 41.3726 19.0307 93.5436 C = 1.0000 0.7887 0.9010 0.7617 0.7887 1.0000 0.9740 0.9961 0.9010 0.9740 1.0000 0.9565 0.7617 0.9961 0.9565 1.0000 x_farm = 167.6200 100.4584 100.1472 160.3753 171.3246 93.5399 97.7215 148.9536 159.2697 88.2294 92.2526 142.8844 177.3102 102.1516 102.4093 163.5383 x_farm = 167.6200 100.4584 100.1472 160.3753 171.3246 93.5399 97.7215 148.9536 159.2697 88.2294 92.2526 142.8844 177.3102 102.1516 102.4093 163.5383 x_farm = 167.6200 100.4584 160.3753 171.3246 93.5399 148.9536 159.2697 88.2294 142.8844 177.3102 102.1516 163.5383 ??? Attempted to access x_farm(:,4); index out of bounds because size(x_farm)=[4,3]. Error in ==> test at 10 x_farm(:,j)=x_farm(:,j) |
回复: if语句的代码与求出结果不符合,请问该如何解决和修改?
length(x_farm)返回的事x_farm的行数,行数列数是不同的,所以会越界!
|
回复: if语句的代码与求出结果不符合,请问该如何解决和修改?
不好意思,我新手啊,上午说错了!for循环的过程中不会去计算边界,即for j=i:length(x_farm)只在竟如for循环是计算一次,是以循环体的执行次数为原矩阵的列数-i,从而会导致出界。
只需要在if语句前加一个if语句: if jj>columns break; end |
回复: if语句的代码与求出结果不符合,请问该如何解决和修改?
那该如何改呢?能具体说说吗
|
所有时间均为北京时间。现在的时间是 07:24。 |
Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.