matlab 反步法,基于Matlab-Cod的Python反步法编程

我试图用我在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}$

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值