输入超过6个值时程序无法正常工作

时间:2019-03-25 05:52:02

标签: matlab

我有2个向量,xyx是输入向量,而y是输出。只要x最多具有6个值,它就起作用。有了7,它就不再起作用。

我已经尝试使用7、8和更多的值来尝试它。它总是给出NaN的错误。与6完美搭配。

x = [1 2 3 4 5 6];
y = 3 + x.^2 + normrnd(0,0.4,size(x));
alp = 0.005;
eps = 1.e-5;
w = LinearFuncModified(x,y,alp,eps,2); 

function w=LinearFunc(x,y,alp,eps,upto)

%w = [15.8205 32.0654 24.6452];
w=zeros(1,upto+1);
[m,n] = size(x);
yh= zeros(1,n);
yh= w(1) + yh;
iter_yh=1;
while iter_yh<=upto
    yh = w(iter_yh+1)*(x.^iter_yh) + yh;
    iter_yh=iter_yh+1;
end
dj=zeros(1,upto+1);
Transx = x'    
iter = 1;
err=1;
loss =3;
while err > eps
    j(iter) = 0.5/n*sum((y-yh).^2);
    pred_err = yh - y;
    dj(1) = sum(pred_err)/n;
    iter_dj=1;
    while iter_dj<=upto
        dj(iter_dj+1)=(pred_err*(Transx.^iter_dj))/n;
        iter_dj=iter_dj+1;
    end
    err = norm(alp*dj);
    w = w-alp*dj;
    yh= zeros(1,n);   
    disp("w");
    disp(w);
    yh= w(1) + yh;
    iter_yh=1;
    while iter_yh<=upto
        yh = w(iter_yh+1)*(x.^iter_yh) + yh;
        iter_yh=iter_yh+1;
    end
    iter=iter+1;
end    
plot(x,y,'-rs')
hold on
plot(x,yh,'-o')
hold off
end

即使有N个输入,它也应给出正确的w值,但是却给出NaN。

有4个向量: x已输入,

y,给出输出,

yh试图产生尽可能接近的y,并且

w,其中包含“最多” +1个元素。

yh完全取决于wx,我将w设为零的向量。现在y是一个给定的公式,取决于x。因此,我需要使w尽可能地接近3 0 4(在这种情况下)并做到这一点,我在每次迭代中计算yhy之间的误差然后使用该错误更新我的w值,这将更新我的yh值,依此类推。关键是,如果它与6一起使用,为什么不与7或更多一起使用?

0 个答案:

没有答案