python - 为什么我的代码永远运行,我已经很久没有运行代码了。然而,没有输出。我走了很长的路吗?下面的所有1个代码
问题描述
从 sympy 导入 sympy 导入符号、cos、函数、pi、diff
""" 柯西求函数最小值的方法 """
x = symbols('x')
y = symbols('y')
f = Function('f')
""" 函数和初始点 """
f = x*x + 2*y*y - 0.3*cos(3*pi*x) - 0.4*cos(4*pi*y) + 0.7
p = [0.1,0.1]
def fib(n) : """ 斐波那契数列 """
a = 0
b = 1
if n <= 1 :
return n
else:
for i in range(1, n):
c = a + b
a = b
b = c
return b
def grad(X) : """ 函数的梯度 """
x0 = X[0]
y0 = X[1]
s1 = - ((f.diff(x)).subs([(x,x0),(y,y0)]))
s2 = - ((f.diff(y)).subs([(x,x0),(y,y0)]))
return s1.evalf(), s2.evalf()
S = 毕业(p)
def lam_star(func,X) : """ 计算最优 lambda"""
x0 = X[0]
y0 = X[1]
dl = 0.01
l = 0
z = f.subs([(x,x0 + l*S[0]),(y,y0 + l*S[1])])
minima = 0
while minima == 0 :
l = l + dl
znew = f.subs([(x,x0 + l*S[0]),(y,y0 + l*S[1])])
if znew > f.subs([(x,x0 + (l-dl)*S[0]),(y,y0 + (l-dl)*S[1])]) :
minima = 1
else : minima = 0
else : z = znew
n = 25
fn = fib(n)
a = l - 2*dl
b = l
l0 = b - a
fa = f.subs([(x,x0 + a*S[0]),(y,y0 + a*S[1])])
fb = f.subs([(x,x0 + b*S[0]),(y,y0 + b*S[1])])
for i in range(1,n) :
L = fib(n-i)*l0/fn
c = b - L
d = a + L
if c == d :
d = c + 0.0001
fc = f.subs([(x,x0 + c*S[0]),(y,y0 + c*S[1])])
fd = f.subs([(x,x0 + d*S[0]),(y,y0 + d*S[1])])
if fc <= fd :
b = d
fb = fd
else :
a = c
fa = fc
if fc <= fd :
l_star = c
else: l_star = d
return l_star
""" 求函数的最小值 """
Xnew = [0.1,0.1]
conv = 0
while conv == 0 :
x_sol = Xnew
Fx = grad(x_sol)
s = [-Fx[0],-Fx[1]]
lam = lam_star(f,x_sol)
Xnew = [x_sol[0]+s[0]*lam, x_sol[1]+s[1]*lam]
if ((abs(Fx[0]) <= 1e-1) & ((abs(Fx[1]) <= 1e-1))) :
conv = 1
print(x_sol)
解决方案
推荐阅读
- go - 从同一个包中导入,使用包名
- jupyter-notebook - Julia - 在 Jupyter Notebook 中使用包的开发版本
- django - 仅由配置文件所有者使用 UserPassesTestMixin 访问编辑配置文件显示错误?
- php - 将产品缩略图包装在 WooCommerce 购物车页面上
- iframe - 来自同一来源的 iframe 不会使用 Cross-Origin-Embedder-Policy 加载:require-corp
- postgresql - 精确匹配和 ILIKE 搜索的索引类型
- docker - 使用 docker 和 nodeJS 构建简单应用程序时,如何修复错误“npm ERR!无法从路径或包中检测节点名称”?
- c# - C#为什么int值不断重置为0?
- reactjs - 默认反应项目-通过设置主页出错-未捕获的语法错误:意外的令牌'<',我已经阅读了很多答案都没有工作
- microsoft-teams - 在 Microsoft 团队应用程序选项卡中聊天的深层链接不起作用