我对Matlab的经验不是很多。我只是需要它来解决一些冗长的非线性方程。我不想使用fzero
,而是想用Newton-Raphson来解决这个问题。
newton.m
文件包含以下代码。
function [ x, ex ] = newton( f, df, x0, tol, nmax )
if nargin == 3
tol = 1e-4;
nmax = 1e1;
elseif nargin == 4
nmax = 1e1;
elseif nargin ~= 5
error('newton: invalid input parameters');
end
x(1) = x0 - (f(x0)/df(x0));
ex(1) = abs(x(1)-x0);
k = 2;
while (ex(k-1) >= tol) && (k <= nmax)
x(k) = x(k-1) - (f(x(k-1))/df(x(k-1)));
ex(k) = abs(x(k)-x(k-1));
k = k+1;
end
end
在主文件中,我将此函数调用如下:
ext_H = newton( exp(x) + x^3, diff(exp(x) + x^3), 9, 0.5*10^-5, 10);
当我运行此功能时,它会给我以下错误。
Error using sym/subsref (line 9)
Error using maplemex
Error, (in MTM:-subsref) Array index out of range
Error in newton (line 37)
x(1) = x0 - (f(x0)/df(x0));
Error in main (line 104)
ext_H = newton( exp(x) + x^3, diff(exp(x) + x^3), 9, 0.5*10^-5, 10);
有人可以帮我解决这个问题吗?
答案 0 :(得分:0)
你可以使用Matlab的fsolve(http://uk.mathworks.com/help/optim/ug/fsolve.html)和几个选项
x0 = 9;
options = optimoptions('fsolve','Algorithm','levenberg-marquardt','TolFun',5*10^-6,'MaxIter',100);
x = fsolve(@(x)(exp(x) + x^3), x0,options);
或仅执行BD算法的fzero(http://uk.mathworks.com/help/optim/ug/fzero.html)
x = fzero(@(x)(exp(x) + x^3), x0);