1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
function [x] = daiyuan(A,b,x1,epsilon,maxiter)
% Méthode de Dai Yuan pour la résolution d'un problème linéaire Ax=B
% Entrée : A = la matrice donnée
% B = vecteur donné
% x1 = le point de départ
% epsilon = tolérance du test d'arret, valeur par défaut 1e-8
% maxiter = nombre maximum d'itérations, valeur par défaut 1000
% Sortie : x = solution
% Valeurs par défaut
if nargin < 4, epsilon = 1e-8; end
if nargin < 5, maxiter = 1000; end
A = input ('donner la matrice A =')
b = input ('donner le vecteur b =')
x1 = input ('donner le point du départ x1 =')
iter = 1; % Compteur des itérations
g = A*x1-b;
while iter <= maxiter
if norm(g) <= epsilon, break, end
if iter == 1
d = -g, a = norm(g)^2/dot(A*d,d), x_ = x1 + d*a,...
g_ = A*x_- b, p = norm(g_)^2/dot(g_-g,d), d_ = -g_+ d*p;
else a = norm(g)^2/dot(A*d,d), x_ = x + d*a,...
g_ = A*x_-b, p = norm(g_)^2/dot(d,g_-g), d_ = -g_+ d*p; end
x = x_;
g = g_;
d = d_;
iter = iter +1; end
if iter > maxiter, warning('nombre maximum d itération atteint'), end |
Partager