Bonsoir tout le monde ,
j'ai un vecteur x(t) =(1,y(t-1),....,y(t-p)),
je l'ai déjà ecrire sous matlab mais tout le temps il m'afiche tout le temps 1 (la premier ligne)
j'ai déjà calculé le vecteur y
-----
17/06/2019, 21h44
#2
Paraboloide_Hyperbolique
Date d'inscription
juin 2012
Localisation
Liège
Messages
2 686
Re : Matlab
Bonsoir,
Quelles sont les valeurs des variables t et p ?
17/06/2019, 21h52
#3
inviteb4e154aa
Date d'inscription
janvier 1970
Messages
18
Re : Matlab
p=5 et t=1:n ou n c'est la taille de y n=50
(les valeur sont aléatoire on peut les changer )
18/06/2019, 16h49
#4
invite6c250b59
Date d'inscription
janvier 1970
Messages
6 101
Re : Matlab
Ce serait mieux en programmation, avec ton programme complet en utilisant les balises code.
Aujourd'hui
A voir en vidéo sur Futura
18/06/2019, 20h00
#5
Paraboloide_Hyperbolique
Date d'inscription
juin 2012
Localisation
Liège
Messages
2 686
Re : Matlab
Envoyé par Rafaf
p=5 et t=1:n ou n c'est la taille de y n=50
(les valeur sont aléatoire on peut les changer )
Ok. Vous êtes certains que t doive être un vecteur ? (En matlab c'est en général inhabituel pour un indice mais c'est permis).
Quoiqu'il en soit, t-1 donne le vecteur d'indices [0, 1, ..., n-1]. En écrivant y(t-1) vous demandez les valeurs de y d'indices 0, 1, ..., n-1. Or, en Matlab, le premier indice d'un vecteur/matrice/tenseur commence à 1.
function[tita,sigma]=Est2(y,r,d,p)
n=length(y);%n=size(y,1);
R=zeros(n,1);
t0= max(max(p),d)+1;
x=zeros(n,n);
tita=zeros(max(p)+1,2);
if (y(t0-d)>r(1)) && (y(t0-d)<=r(2))
test =1;
else
test=0;
end
%**********************************************************************
if test==0
for t=t0:n
if y(t-d)<=r(1)
R(t)=1;
elseif y(t-d)>r(2)
R(t)=0;
else
R(t)=R(t-1);
end
for j=1:2
for i=1:p(j)
if i==1
x1(i)=1;
x2(i)=1;
else x1(i)=R(t)*(y(t-(p(1)+1-i)));
x2(i)=(1-R(t))*( y(t-(p(2)+1-i)));
end
end
end
z=[x1 x2];
z=x(t,:);
end
X=x(t0:end,:);
Y=y(t0:end);
tita=(inv(X'*X))*(X'*Y);
else
R1=zeros(n,1);
R2=zeros(n,1);
for t=t0:n
if t==t0
R1(t)=1;
else
if y(t-d)<=r(1)
R1(t)=1;
elseif y(t-d)>r(2)
R1(t)=0;
else
R1(t)=R1(t-1);
end
end
for j=1:2
for i=1:p(j)
if i==1
x1(i)=1;
x2(i)=1;
else x1(i)=R(t)*(y(t-(p(1)+1-i)));
x2(i)=(1-R(t))*( y(t-(p(2)+1-i)));
end
end
end
X1=x(t0:end,:);
Y=y(t0:end);
tita1=(inv(X1'*X1))*(X1'*Y);
for t=t0:n
if t==t0
R2(t)=0;
else
if y(t-d)<=r(1)
R2(t)=1;
elseif y(t-d)>r(2)
R2(t)=0;
else
R2(t)=R2(t-1);
end
end
x1=R2(t)*[1 y(t-1:t-p(1))];
x2=(1-R2(t))*[1 y(t-1:t-p(2))];
x(t,:)=[x1 x2];
end
X2=x(t0:end,:);
tita2=(inv(X2'*X2))*(X2'*Y);
Erreur1=(Y-(X1*tita1))'*(Y-(X1*tita1));
Erreur2=(Y-(X2*tita2))'*(Y-(X2*tita2));
if Erreur1<Erreur2
tita=tita1;
R=R1;
X=X1;
else
tita=tita2;
R=R2;
X=X2;
end
end
epsilon1=((R(t0:end).*Y)-(X*tita));
sigma(1)=(1/sum(R))*(epsilon1'*epsilon1);
epsilon2=((ones(n-t0+1,1)-R(t0:end)).*Y)-(X*tita);
sigma(2)=(1/((n-t0+1)-sum(R)))*(epsilon2'*epsilon2);
A=zeros(max(p),2);
A(1:p(1)+1,1)=tita(1:p(1)+1);
A(1:p(2)+1,2)=tita(p(1)+2:end);
tita=A;
end
18/06/2019, 22h15
#8
invite6c250b59
Date d'inscription
janvier 1970
Messages
6 101
Re : Matlab
Je ne vois pas la ligne indiquée fautive au post #1? Si elle a disparu, quel est maintenant la ligne fautive? STP mettre un whos pour voir les dimensions des variables au moment du bug, et indiquer le message d'erreur s'il y en a. (s'il n'y en a pas, STP indiquer quand même les dimensions des variables au début et au final)