function P137_72 clear all close all clc xk=0.5; alphamax=2; [alpha, newxk, fk, newfk] = wolfe(xk, dk) function [alpha, newxk, fk, newfk] = Wolfe(xk, dk) alpha = Wolfe(@phi,@gphi,a0,b0,t,pho) rho = 0.1; sigma = 0.8; alpha = 1; a1=0; a2=alphamax; dk=60; phi1=feval(phi, xk); gphi1=feval(phi, xk)'*dk; function f=phi(t) f=-2*t^3+21*t^2-60*t+50; % ÌݶÈ/µ¼Êý function gf=gphi(t) gf=-6*t^2+42*t-60;
时间: 2024-01-07 20:05:04 浏览: 26
以下是转换后的Python代码:
```python
import numpy as np
def phi(t):
return -2*t**3 + 21*t**2 - 60*t + 50
def gphi(t):
return -6*t**2 + 42*t - 60
def Wolfe(xk, dk):
alpha = 1
rho = 0.1
sigma = 0.8
alphamax = 2
a1 = 0
a2 = alphamax
phi1 = phi(xk)
gphi1 = gphi(xk)*dk
while True:
phialpha = phi(xk + alpha*dk)
if phialpha > phi1 + rho*alpha*gphi1 or (phialpha >= phi(a1 + alpha*(a2-a1)) and a2-a1 >= 10**(-10)):
alpha = zoom(a1, alpha, a2, xk, dk)
break
gphialpha = gphi(xk + alpha*dk)*dk
if abs(gphialpha) <= -sigma*gphi1:
break
if gphialpha >= 0:
alpha = zoom(alpha, alpha/2, alpha, xk, dk)
break
a1 = alpha
a2 = min(alphamax, alpha*2)
alpha = 2*alpha
newxk = xk + alpha*dk
fk = phi1
newfk = phi(newxk)
return alpha, newxk, fk, newfk
def zoom(a_lo, a_hi, xk, dk):
rho = 0.1
sigma = 0.8
phi1 = phi(xk)
gphi1 = gphi(xk)*dk
while True:
alpha = (a_lo + a_hi)/2
phialpha = phi(xk + alpha*dk)
if phialpha > phi1 + rho*alpha*gphi1 or phialpha >= phi(xk + a_lo*dk):
a_hi = alpha
else:
gphialpha = gphi(xk + alpha*dk)*dk
if abs(gphialpha) <= -sigma*gphi1:
break
if gphialpha*(a_hi - a_lo) >= 0:
a_hi = a_lo
a_lo = alpha
return alpha
xk = 0.5
alphamax = 2
alpha, newxk, fk, newfk = Wolfe(xk, dk)
```