改进Powell法的Python实现
上一次介绍了Powell法的迭代步骤、对应例题的Python实现。本节介绍改进Powell法(修正的共轭方向法)。
1. 改进的Powell法
改进Powell法与Powell法最大的区别主要在于:
1.1 Powell法的计算流程
1.2 例题
1.2.1 Python实现:
import sympy as sp
import numpy as np
import matplotlib.pyplot as plt
from sympy import *
def Powell_modified(x_0,fun,x,f_np,n,epsilon1,epsilon2,S,x_point,k=0):
# 从初始点开始进行n次一维搜索
x_new = np.zeros((n,len(x_0)))
lambd = symbols('lambd')
delta_m = np.zeros(n)
x_initial = x_0.copy()
for i in range(n):
x_n = x_initial + lambd*S[i]
f_lambd = fun.subs({
x[j]:x_n[j] for j in range(len(x_n))})
lambd_value = solve(diff(f_lambd,lambd),lambd)
x_new[i] = x_initial + lambd_value[0]*S[i]
delta_m[i] = abs(f_np(*[x_initial[j] for j in range(len(x_initial))])-f_np(*[x_new[i][j] for j in range(len(x_new