我试图用我在Matlab中编写的后退式代码来编写Newton的方法,但是在Python语法方面遇到了一些问题。Matlab大约需要5次迭代,但是我的Python代码循环到最大迭代次数1000次,并且由于后退机制不起作用(尝试计算一个负日志),所以出现了域错误。我已经有一段时间没有使用Python了,所以我很可能混淆了某种语法。在
以下是正确工作的Matlab代码:x = 10; %defines x
f = @(x) log(x); %defines objective function
df = @(x) 1/x; %defines first derivative
tol = .00001; %defines our tolerance level
maxit = 1000; %defines maximum iteration steps
maxsteps = 200; %defines maximum backsteps
for i=1:maxit %starts loop
fval = f(x); %value of function at f(x)
fjac = df(x); %value of jacobian at f(x)
fnorm = norm(fval); %calculates norm value at fval
if fnorm
x
d = -(fjac\fval); %forms second part of iteration rule
d
fnormold = inf; %sets arbitrary fnormold
for backstep=1:maxsteps
fvalnew = f(x+d); %calculates f(x+d)
fnormnew = norm(fvalnew); %calculates norm of fvalnew
if fnormnew
if fnormold
fnormold = fnormnew; %updates fnormold
d=d/2;
end
x=x+d;
end
disp(x)
下面是Python代码:
^{pr2}$