matlab使用粒子群算法解决信道估计问题时出错

对于y=H*x+n,在x,y已知、n为随机噪声的情况下,运用粒子群算法估计出H

w=0.9;r1=1.4;r2=1.4;     %设置粒子群参数

H=randn(100,100)+i*randn(100,100);  %生成信道矩阵
n=randn(100,1)+i*randn(100,1);    %生成噪声
x=zeros(100,1);  
for i=1:49
    x(2*i+1,1)=complex(i,-i);    %生成输入数据x
end
y=H*x+n;     %接收数据y
H_hat=randn(100,100,10)+i*randn(100,100,10);  %生成粒子的位置
H_pbest=zeros(100,100,10)+i*zeros(100,100,10);   %初始化个体最优值
H_gbest=zeros(100,100)+i*zeros(100,100);    %初始化全局最优值
V_hat=randn(100,100,10)+i*randn(100,100,10);  %生成例子速度
min=zeros(10);
for k=1:30    %迭代次数
    for i=1:10
    min1=1000;min(i)=1000;
        for j=1:10
        if(fun(y,H_hat(:,:,j),x,n)<min1) H_gbest=H_hat(:,:,j);min1=fun(y,H_hat(:,:,j),x,n);%找出gbest
        end
        end
    if(fun(y,H_hat(:,:,i),x,n)<min(i)) H_pbest(:,:,i)=H_hat(:,:,j);min(i)=fun(y,H_hat(:,:,i),x,n);%找出pbest
    end
    V_hat(:,:,i)=w*V_hat(:,:,i)+r1*randn()*(H_pbest(:,:,i)-H_hat(:,:,i))+r2*randn()*(H_gbest-H_hat(:,:,i));%更新速度
    H_hat(:,:,i)=H_hat(:,:,i)+V_hat(:,:,i);%更新位置
    end
end

H_HAT=zeros(100,100)+i*zeros(100,100);  %初始化最佳估计值
minvalue=1000;
for i=1:10
    if(fun(y,H_hat(:,:,i),x,n)<minvalue)H_HAT=H_hat(:,:,i);minvalue=fun(y,H_hat(:,:,i),x,x);
    end
end

function [out] = fun(y,h,x,n)
% 矩阵的2-范数,即目标函数
  out=norm(h*x+n-y);
end



得到的估计矩阵为全0矩阵,求问为何会出现这种错误结果