Commit 0b5e1e25 authored by Thibault Chassat's avatar Thibault Chassat
Browse files

Mettre à jour ellipse.sce, problème_de_regression_non_lineaire_levengerg.sce,...

Mettre à jour ellipse.sce, problème_de_regression_non_lineaire_levengerg.sce, problème_de_regression_non_lineaire_logtrick.sce, problème_de_regression_non_lineaire_lsqsolve.sce, regression_pour_differents_degre_de_polynome.sce, residu_ensembles_apprentissage_validation_fonction_degré_polynome.sce, rosenbrock_ Levenberg-Marquardt.sce, rosenbock_isovaleurs.sce files
parent 1f04f0d1
// approximation d'une ellipse
// l'éxecution de ce programme nécessite la présence de 'data2.sod' dans le répertoire
load data2.sod
clf
plot(x,y,'o')
isoview
A = [2*x.*y y.^2 -2*x -2*y ones(x)]
p=A\(-x.^2)
alpha = p(1)
bet = p(2)
M = [1 alpha; alpha bet];
c = M\p(3:4)
gam = sqrt(c'*M*c-p(5))
[P,D] = spec(M);
t = linspace(0,2*%pi,1000)
X=gam*P*[cos(t)/sqrt(D(1,1)); sin(t)/sqrt(D(2,2))]
plot(c(1)+X(1,:),c(2)+X(2,:),"r","thickness",3)
//problème de régression non linéaire - méthode de levenberg-Marquardt
// l'execution de ce fichier nécessite la présente de 'dataGaussian.sod' dans le répertoire
clf
function r=resid(x)
a = x(1);
mu = x(2)
sigma = x(3)
r = a*exp(-(t-mu).^2/sigma^2) - y;
end
load dataGaussian.sod
plot(t,y,"o")
x= [1;1;1]
I= eye(3,3)
lambda=1
for k = 1:100
r = resid(x)
J = complexStepJac(resid,x)
h = [J;sqrt(lambda)*I]\[r;0;0;0]
x = x-h
if norm(h) <1e-6
break
end
end
a = x(1);
mu = x(2)
sigma = x(3)
plot(u,a*exp(-(u-mu).^2/sigma^2),'r',"thickness",3)
// Problème de régression non linéaire - méthode du log-trick
// l'execution de ce fichier nécessite la présente de 'dataGaussian.sod' dans le répertoire
clf
load dataGaussian.sod
plot(t,y,"o")
A = [ones(t), 2*t, -t.^2]
x = A\log(y)
sigma = 1/sqrt(x(3))
mu = x(2)/x(3)
a = exp(x(1)+mu^2/sigma^2)
u = linspace(mu-3*sigma, mu+3*sigma,1000)
plot(u,a*exp(-(u-mu).^2/sigma^2),'r')
//problème de régression non linéaire - utilisation de la fonction lsqrsolve
// l'execution de ce fichier nécessite la présente de 'dataGaussian.sod' dans le répertoire
clf
load dataGaussian.sod
plot(t,y,"o")
function r=resid(x,n)
a = x(1);
mu = x(2)
sigma = x(3)
r = a*exp(-(t-mu).^2/sigma^2) - y;
end
x0 = [1;1;1]
x = lsqrsolve(x0, resid, length(y))
a = x(1);
mu = x(2)
sigma = x(3)
plot(u,a*exp(-(u-mu).^2/sigma^2),'r',"thickness",3)
// Regression de différents degrés
// l'execution de ce programme nécéssite la présence du fichier data1.sod dans le repertoire de travail
// il suffit de modifier p pour faire verier le degré du polyôme
load data1.sod
n=length(y);
S = zeros(9,1);
p=3
A=zeros(n,p+1);
for k=[0:p]
A(:,k+1) = t.^k;
end
theta = A\y;
subplot(3,3,3)
plot(t,y,'o',t,A*theta,"r","thickness",2)
title("p=3")
// Résidu des ensembles d'apprentissage et de validation en fonctiondu degré du polynôme
// l'exectution de ce programme nécessite "data1.sod" dans le repertoire
load data1.sod
clf
plot(t,y,'o')
n=length(y);
T=25:n-25;
V=setdiff(1:n,T)
ST=zeros(9,1);
SV=zeros(9,1);
for p=0:8
A=zeros(n,p+1);
for k=0:p
A(:,k+1)=t.^k
end
theta=A(T,:)\y(T)
ST(p+1)=norm(A(T,:)*theta-y(T))^2
SV(p+1)=norm(A(V,:)*theta-y(V))^2
end
clf
plot(0:8,ST,'-o',0:8,SV,'-o')
gca().log_flags='nl'
legend('Apprentissage', 'Validation')
title('Résidu d apprentissage et de validation en fonction du degré du polynôme, en échelle semi logarithmique')
xlabel('degré du polynôme')
ylabel('résidu en échelle logarithmique')
//rosenbock - iso valeurs
t = linspace(0,2*%pi,1000)
clf
isoview
gca().data_bounds=[-1 2 -1 2]
gca().auto_scale="off"
for alpha = 1:10:301
x1 = 1-sqrt(alpha)*cos(t)
x2=sqrt(alpha)/10*sin(t)+x1.^2;
plot(x1,x2)
end
plot(1,1,'xr')
// Fonction rosenbock - Méthode de Lebe,berg-Marquardt
function r = resid(x)
r=[1-x(1);10*(x(2)-x(1)^2)]
end
function J=jac(x)
J = [-1, 0
-20*x(1), 10]
end
t = linspace(0,2*%pi,1000)
clf
isoview
gca().data_bounds=[-1 2 -1 2]
gca().auto_scale="off"
for alpha = 1:10:301
x1 = 1-sqrt(alpha)*cos(t)
x2=sqrt(alpha)/10*sin(t)+x1.^2;
plot(x1,x2)
end
plot(1,1,'xr')
x=[-.5;1.5]
I= eye(2,2)
//lambda=10
for k = 1:100
r = resid(x)
J = jac(x)
lambda = norm(r)
h = [J;sqrt(lambda)*I]\[r;0;0]
plot([x(1) x(1)-h(1)], [x(2) x(2)-h(2)],'-or')
x = x-h
if norm(h) <1e-6
break
end
end
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment