Bonjour
Je commence à programmer sur MATLAB et j'arrive pas à comprendre l'origine de cette erreur. J'essaie de programmer la méthode de Newton Raphson pour résoudre un système d'équation assez compliqué. Mon programme est composé de trois scripts:
-newtonm: la methode de Newton Raohson
function [x,iter] = newtonm(x0,f,J)
N = 100; % define max. number of iterations
epsilon = 1e-10; % define tolerance
maxval = 10000.0; % define value for divergence
x0 = [1;1;1;1]; % load initial guess
xx=x0;
while (N>0)
JJ = feval(J,xx);
if abs(det(JJ))<epsilon
input('erreur');
abort;
end;
xn = xx - inv(JJ)*feval(f,xx);
if abs(feval(f,xn))<epsilon
x=xn;
iter = 100-N;
return;
end;
if abs(feval(f,xx))>maxval
iter = 100-N;
disp(['iterations = ',num2str(iter)]);
error('Solution diverges');
abort;
end;
N = N - 1;
xx = xn;
end;
error('No convergence after 100 iterations.');
abort;
% end function
-jacob4x4: Le jacobian de mon système
function [J] = jacob4x4(x)
J(1,1) = 1; J(1,2) = 0;
J(1,3) =(A*(X1+((1/6)*(X1^2)*(2*x(4)+2*x(3)))))/((1+(X1*(x(4)+x(3)))+(1/6)*(X1^2)*(x(4)+x(3))^2)^2);
J(1,4) =(A*(X1+((1/6)*(X1^2)*(2*x(4)+2*x(3)))))/((1+(X1*(x(4)+x(3)))+(1/6)*(X1^2)*(x(4)+x(3))^2)^2);
J(2,1) = 0; J(2,2) = 1;
J(2,3) = (B*(-X2+((1/6)*(X2^2)*(-2*x(4)+2*x(3)))))/((1+(X2*(x(4)-x(3)))+(1/6)*(X2^2)*(x(4)-x(3))^2)^2);
J(2,4) = (B*(X2+((1/6)*(X2^2)*(2*x(4)-2*x(3)))))/((1+(X2*(x(4)-x(3)))+(1/6)*(X2^2)*(x(4)-x(3))^2)^2);
J(3,1)=-(2*D2*D1*x(2))/((x(2)*D1+x(1)*D2)^2); J(3,2)=(2*D2*D1*x(1))/((x(2)*D1+x(1)*D2)^2); J(3,3)=1/x(4); J(3,4)=-x(3)/(x(4)^2);
J(4,1)=(2*D2*D1*x(2))/((x(2)*D1+x(1)*D2)^2); J(4,2)=-(2*D2*D1*x(1))/((x(2)*D1+x(1)*D2)^2); J(4,3)=-1/x(4); J(4,4)=x(3)/(x(4)^2);
%end function
-f4: Mon système
function [f] = f4(x)
f1 = x(1)-A*((1+(X1*(x(4)+x(3)))+(1/6)*(X1^2)*(x(4)+x(3))^2)^(-1));
f2 = x(2)-B*((1+(X2*(x(4)-x(3)))+(1/6)*(X2^2)*(x(4)-x(3))^2)^(-1));
f3 = 1+(x(3)/x(4))-2/(1+(x(2)*D1)/(x(1)*D2));
f4 = 1-(x(3)/x(4))-2/(1+(x(1)*D2)/(x(2)*D1));
f = [f1;f2;f3;f4];
% end function
Sachant que j'ai déjà déclaré les constantes nécessaires dans le fichier main de ma fonction.
La méthode est fonctionnelle pour un système simple d'ordre 2.
Merci d'avance :)

4 Kommentare

Walter Roberson
Walter Roberson am 18 Aug. 2015
C'est necessaire de ons rire votre functions
Nouhayla EL GHANI
Nouhayla EL GHANI am 18 Aug. 2015
Je viens de rajouter le code :)
Walter Roberson
Walter Roberson am 18 Aug. 2015
You have not shown your code or command to call newtonm
Nouhayla EL GHANI
Nouhayla EL GHANI am 19 Aug. 2015
Bearbeitet: Nouhayla EL GHANI am 19 Aug. 2015
It is in the main function, where I declared my parameters and constants.
And I call it using this syntax:
% Méthode de Newton-Raphson
x0= [1;1;1;1];
J0=jacob4x4(x0);
[x,iter]=newtonmm(x0,'f4','jacob4x4')

Melden Sie sich an, um zu kommentieren.

Gefragt:

am 18 Aug. 2015

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by