У меня есть 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 или более?