Программа не работает, когда я даю более 6 значений в качестве ввода - PullRequest
1 голос
/ 25 марта 2019

У меня есть 2 вектора, x и y.x является входным вектором, а 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 полностью зависит от w и x, я сделал w вектором нулей.теперь у заданная формула зависит от х.поэтому мне нужно, чтобы w было как можно ближе к 3 0 4 (в данном случае), насколько это возможно, и для этого я вычисляю ошибку между yh и y на каждой итерации и использую эту ошибку I 'm обновляет мои w значения, которые обновят мои yh значения и так далее.Дело в том, что если он работает с 6, то почему он не работает с 7 или более?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...