【发布时间】:2011-12-03 19:49:23
【问题描述】:
我是 MATLAB 的新用户。我想使用 Newton-Raphson 方法找到生成 f(x) = 0 的值。我曾尝试编写代码,但似乎很难实现 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);
【问题讨论】:
-
那么,问题是什么?您只需显示您的代码...
-
我需要修复代码以使其正常工作。
-
你得到什么样的输出?您的哪些功能似乎不适用于
fzero()? -
它给出了以下错误:???错误使用 ==> fzero 区间端点处的函数值必须是有限且实数的“”。我认为这是因为等式中有复杂的条目。
-
@user1079331 你能告诉我们
Params.n、Params.p、Params.M等是什么吗?那么我们更有可能帮助您调试您的问题。