저는 MATLAB을 처음 사용하는 사람입니다. Newton-Raphson 방법을 사용하여 f(x) = 0
이되는 값을 찾고 싶습니다. 코드를 작성하려고했지만 Newton-Raphson 메서드를 구현하기가 어렵습니다. 이것은 내가 지금까지 무엇을 가지고 :Newton-Raphson 방법을 사용하여 방정식 루트를 찾는 방법은 무엇입니까?
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
위의 기능과 같이 사용됩니다
% 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);
그럼, 무엇이 문제입니까? 당신은 단지 코드를 보여줍니다 ... – Oli
나는 그것이 작동하도록 코드를 고쳐야합니다. – user1079331
어떤 종류의 출력을 얻고 있습니까? 'fzero()'와 함께 작동하지 않는 것처럼 보이는 함수는 무엇입니까? – jblock