clear;
m = 32;
n = 128;
N0 =5;
X0 = rand(m,N0);
C0 = cov(transpose(X0));
[V0,D0] = eig(C0);
XX = rand(m,n);
for K = 1:n
X=XX(:,K);
lmda = 1/K;
alfa=V0*X;
C0=(1-lmda)*C0+lmda*X*transpose(X);
P=zeros(32);
for i=1:m
p = (alfa(i)^2-D0(i,i))/K;
P(i,i) =p;
end;
Q=zeros(32);
for i=1:m-1
for j=i+1:m
if j==i
Sij=0;
else
Sij = (alfa(i)*alfa(j))/(D0(j,j)-D0(i,i)+P(j,j)-P(i,i))*lmda;
end
Q(i,j)=Sij;
Q(j,i)=-Sij;
end
end
V0 = V0*(eye(32)+Q);
D0 = D0+P;
T1=zeros(m);
for i=1:m
V1=V0(:,i);
T1(i,i)=-norm(V1);
end
V0=V0*T1;
T2=zeros(m);
for i=1:m
V=V0(:,i);
T2(i,i)=norm(V)^2;
end
D0=D0*T2;
end
Matlab编辑程序里出来NaN,这是怎么回事?怎么修改?
答案:2 悬赏:60 手机版
解决时间 2021-01-04 00:22
- 提问者网友:记得曾经
- 2021-01-03 18:44
最佳答案
- 五星知识达人网友:北方的南先生
- 2021-01-03 19:00
很显然,你建立的接迭代格式不收敛,发散了。这要从你自己的算法上找原因,你可以找分母上的数,是否很接近于0,之类的。比如我在我的matlab平台下监控了Sij的分母上的数随着迭代次数的增加变化情况。迭代进行500多次后就已经出现了不合理的值,你可以试试下面的代码。
clear;
m = 32;
n = 128;
N0 =5;
X0 = rand(m,N0);
C0 = cov(transpose(X0));
[V0,D0] = eig(C0);
XX = rand(m,n);
ppp=zeros(1);
iii=1
for K = 1:n
X=XX(:,K);
lmda = 1/K;
alfa=V0*X;
C0=(1-lmda)*C0+lmda*X*transpose(X);
P=zeros(32);
for i=1:m
p = (alfa(i)^2-D0(i,i))/K;
P(i,i) =p;
end;
Q=zeros(32);
for i=1:m-1
for j=i+1:m
if j==i
Sij=0;
else
ppp(iii)=(D0(j,j)-D0(i,i)+P(j,j)-P(i,i));
iii=iii+1;
Sij = (alfa(i)*alfa(j))/(D0(j,j)-D0(i,i)+P(j,j)-P(i,i))*lmda;
end
Q(i,j)=Sij;
Q(j,i)=-Sij;
end
end
V0 = V0*(eye(32)+Q);
D0 = D0+P;
T1=zeros(m);
for i=1:m
V1=V0(:,i);
T1(i,i)=-norm(V1);
end
V0=V0*T1;
T2=zeros(m);
for i=1:m
V=V0(:,i);
T2(i,i)=norm(V)^2;
end
D0=D0*T2;
end
figure
plot(1:iii-1,ppp)
figure
plot(1:800,ppp(1:800))
clear;
m = 32;
n = 128;
N0 =5;
X0 = rand(m,N0);
C0 = cov(transpose(X0));
[V0,D0] = eig(C0);
XX = rand(m,n);
ppp=zeros(1);
iii=1
for K = 1:n
X=XX(:,K);
lmda = 1/K;
alfa=V0*X;
C0=(1-lmda)*C0+lmda*X*transpose(X);
P=zeros(32);
for i=1:m
p = (alfa(i)^2-D0(i,i))/K;
P(i,i) =p;
end;
Q=zeros(32);
for i=1:m-1
for j=i+1:m
if j==i
Sij=0;
else
ppp(iii)=(D0(j,j)-D0(i,i)+P(j,j)-P(i,i));
iii=iii+1;
Sij = (alfa(i)*alfa(j))/(D0(j,j)-D0(i,i)+P(j,j)-P(i,i))*lmda;
end
Q(i,j)=Sij;
Q(j,i)=-Sij;
end
end
V0 = V0*(eye(32)+Q);
D0 = D0+P;
T1=zeros(m);
for i=1:m
V1=V0(:,i);
T1(i,i)=-norm(V1);
end
V0=V0*T1;
T2=zeros(m);
for i=1:m
V=V0(:,i);
T2(i,i)=norm(V)^2;
end
D0=D0*T2;
end
figure
plot(1:iii-1,ppp)
figure
plot(1:800,ppp(1:800))
全部回答
- 1楼网友:神也偏爱
- 2021-01-03 20:27
你好! 数据发散了,结果太大不可表示 仅代表个人观点,不喜勿喷,谢谢。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯
正方形一边上任一点到这个正方形两条对角线的 |
阴历怎么看 ? |