Comment utiliser Newton-Raphson la méthode dans matlab pour trouver une équation de la racine?
Je suis un nouvel utilisateur de MATLAB. Je veux trouver la valeur qui fait f(x) = 0
, à l'aide de Newton-Raphson la méthode. J'ai essayé d'écrire un code, mais il me semble que c'est difficile à mettre en œuvre de Newton-Raphson la méthode. C'est ce que j'ai à ce jour:
function x = newton(x0, tolerance)
tolerance = 1.e-10;
format short e;
Params = load('saved_data.mat');
theta = pi/2;
zeta = cos(theta);
I = eye(Params.n,Params.n);
Q = zeta*I-Params.p*Params.p';
% T is a matrix(5,5)
Mroot = Params.M.^(1/2); %optimization
T = Mroot*Q*Mroot;
% Find the eigenvalues
E = real(eig(T));
% Find the negative eigenvalues
% Find the smallest negative eigenvalue
gamma = min(E);
% Now solve for lambda
M_inv = inv(Params.M); %optimization
zm = Params.zm;
x = x0;
err = (x - xPrev)/x;
while abs(err) > tolerance
xPrev = x;
x = xPrev - f(xPrev)./dfdx(xPrev);
% stop criterion: (f(x) - 0) < tolerance
err = f(x);
end
% stop criterion: change of x < tolerance % err = x - xPrev;
end
La fonction ci-dessus est utilisé comme suit:
% Calculate the functions
Winv = inv(M_inv+x.*Q);
f = @(x)( zm'*M_inv*Winv*M_inv*zm);
dfdx = @(x)(-zm'*M_inv*Winv*Q*M_inv*zm);
x0 = (-1/gamma)/2;
xRoot = newton(x0,1e-10);
- Alors, qu'est-th question? Vous montrez simplement votre code...
- J'ai besoin de fixer le code pour le faire fonctionner.
- Ce genre de sortie en êtes-vous? Quelles sont vos fonctions qui semblent ne pas fonctionner avec
fzero()
? - Il donne l'erreur suivante :??? Erreur à l'aide de ==> static). les valeurs de la Fonction sur l'intervalle de points de terminaison doivent être finis et réel"".Je pense que c'est parce qu'il est complexe d'entrées dans l'équation.
- pouvez-vous nous montrer ce que
Params.n
,Params.p
,Params.M
etc sont? Ensuite, nous sommes plus susceptibles d'être en mesure pour vous aider à déboguer votre problème.
Vous devez vous connecter pour publier un commentaire.
La question n'est pas particulièrement clair. Cependant, avez-vous besoin pour mettre en œuvre la racine de trouver vous-même? Si non, alors tout simplement utiliser Matlab est construit en fonction
fzero
(non basé sur un Newton-Raphson).Si vous avez besoin de votre propre mise en œuvre de Newton-Raphson la méthode alors je vous suggérons d'utiliser l'une des réponses à Newton Raphsons méthode dans Matlab? votre point de départ.
Edit: La suite n'est pas de répondre à votre question, mais est simplement une remarque sur le style de codage.
Il est utile de diviser un programme en réutilisables morceaux. Dans ce cas, la racine de votre résultat doit être séparé de votre fonction de la construction. Je recommande la rédaction de votre Newton-Raphson la méthode dans un fichier séparé et d'appeler ce script dans lequel vous pouvez définir votre fonction et de sa dérivée. Votre source serait quelque chose comme:
Dans
newton.m
vous avez votre mise en œuvre de Newton-Raphson la méthode, qui prend comme arguments de la fonction poignées de vous définir (f
etdfdx
). À l'aide de votre code donné dans la question, ce serait ressembler àAvis que j'ai évité d'utiliser une boucle infinie.
end
à votrewhile
boucle?).