# Python 优化 回溯下降算法 原

阿豪boy

``````from matplotlib import pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
from sympy import *
import math

# 构造函数表达式
x1 = symbols('x1')
x2 = symbols('x2')
fx = E ** (x1 + 3 * x2 - 0.1) + E ** (x1 - 3 * x2 - 0.1) + E ** (-x1 - 0.1)
# 求偏导数
dx = diff(fx, x1)
dy = diff(fx, x2)

# 显示函数图像
def show():
fig = plt.figure()
ax = Axes3D(fig)
max_x = 1
X = np.linspace(-max_x, max_x, 100)
Y = np.linspace(-max_x, max_x, 100)

Z = np.array([
np.array([float(fx.evalf(subs={x1: i, x2: j}))
for j in Y])
for i in X
])

X, Y = np.meshgrid(X, Y)
ax.plot_surface(X, Y, Z, rstride=3, cstride=3, cmap='rainbow')
plt.show()

# 给定a,b求回溯直线下降
def down(a, b):
# 初始值
x = np.array([1, 1])
t = 1
vals = [fx.evalf(subs={x1: x[0], x2: x[1]})]
d = [-dx.evalf(subs={x1: x[0], x2: x[1]}), -dy.evalf(subs={x1: x[0], x2: x[1]})]
while (d[0] ** 2 + d[1] ** 2) > 1:
d = [-dx.evalf(subs={x1: x[0], x2: x[1]}), -dy.evalf(subs={x1: x[0], x2: x[1]})]
xk = np.array(x) + np.array(d) * t
while fx.evalf(subs={x1: xk[0], x2: xk[1]}) > \
fx.evalf(subs={x1: x[0], x2: x[1]}) - \
a * t * (d[0] ** 2 + d[1] ** 2):
xk = x + np.array(d) * t
t = b * t
x = x + np.array(d) * t
vals.append(fx.evalf(subs={x1: x[0], x2: x[1]}))

return vals

# 暴力求解最小值
def test():
minf = 1 << 64
minx1 = 0
minx2 = 0
for i in np.linspace(-10, 10, 1000):
for j in np.linspace(-10, 10, 1000):
f = math.e ** (i + 3 * j - 0.1) + math.e ** (i - 3 * j - 0.1) + math.e ** (-i - 0.1)
if f < minf:
minx1 = i
minx2 = j
minf = f
print(minf, minx1, minx2)

# 保存图像
def saveImg(a, b, arr):
print(a, b, len(arr))
plt.figure()
plt.plot([i for i in range(len(arr))], [i for i in arr])
plt.xlabel('k')
plt.ylabel('fx')
plt.title(f"a={a}\nb={b}")
plt.savefig(f'./imgs/{a}_{b}.png')
plt.close()

#  根据不同的ab，保存图片
def fun():
for i in np.linspace(0.1, 0.4, 4):
for j in np.linspace(0.1, 0.9, 9):
saveImg(i, j, down(i, j))

test()
# fun()

# show()``````

### 阿豪boy

Python下的正则表达式原理和优化笔记

2013/06/19
0
16
Python 代码优化常见技巧

2012/07/30
0
0
Python编程规范及性能优化

Python编程规范及性能优化 Ptyhon编程规范 编码 所有的 Python 脚本文件都应在文件头标上 # -- coding:utf-8 -- 。设置编辑器，默认保存为 utf-8 格式。 注释 业界普遍认同 Python 的注释分为...

2013/01/16
0
1
Hacker News与Reddit的算法比较

Hacker News是Y Combinator旗下的一个新闻频道，属于digg类产品， SEOmoz曾经在2008年7月隆重推出Reddit、Stumbleupon、Del.icio.us和Hacker News算法全揭秘。由此，这些知名Web2.0网站的算法...

2011/05/02
0
0
Python处理正则表达式超时的办法

title: Python处理正则表达式超时的办法 tags: [python3, 正则表达式超时, re模块] date: 2018-04-27 21:40:21 categories: Python keywords: python3, 正则表达式, re模块, linux信号 最近在...

PigPeek
04/27
0
0

《Kafka入门与实践》 作者：牟大恩 点此链接购买纸书 本书以Kafka 0.10.1.1版本以基础，对Kafka的基本组件的实现细节及其基本应用进行了详细介绍，同时，通过对Kafka与当前大数据主流框架整合...

05/29
0
0

1、编程范式：数据流图 声明式编程与命令式编程的对比讨论 数据流图： tensorflow 1.2.0 2、数据载体：张量 张量：Tensor 稀疏张量：SparseTensor类，以键值对的形式表示高维稀疏数据，它包含...

qfire
05/28
0
0

05/03
0
0

英文原文：awesome-machine-learning 　　本文汇编了一些机器学习领域的框架、库以及软件（按编程语言排序）。 　　C++ 　　计算机视觉 CCV —基于C语言/提供缓存/核心的机器视觉库，新颖的...

chworld
2015/08/07
0
0
Python 进程线程协程 GIL 闭包 与高阶函数（五）

1 GIL线程全局锁 线程全局锁(Global Interpreter Lock),即Python为了保证线程安全而采取的独立线程运行的限制,说白了就是一个核只能在同一时间运行一个线程.对于io密集型任务，python的多线程...

06/20
0
0

ClassNotFoundException: javax.el.ELManager

7分钟前
0
0
Jvm堆内存的划分结构和优化，垃圾回收详解（详细解答篇）

19分钟前
0
0
CentOS 7.4 设置系统字符编码

1.语言变量LANG在 /etc/locale 文件中。 2.可以通过/ect/profile 来修改LC_TYPE 变量的值 添加如下代码 export LC_ALL="zh_CN.GBK" export LANG="zh_CN.GBK" 到profile文件中，变量的可以修改...

qimh
20分钟前
0
0
Kafka相关使用

20分钟前
0
0
CentOS7 解决无法使用tab自动补全 tab代码提示

ziluopao
26分钟前
0
0
redis安装

https://www.cnblogs.com/feijl/p/6879929.html

ghou-靠墙哭
27分钟前
0
0
Spring核心——注解自动装载

30分钟前
2
0
ElasticSearch学习（8）—— SearchType

Elasticsearch有四种类型的SearchType 1、query and fetch 向索引的所有分片（shard）都发出查询请求，各分片返回的时候把元素文档（document）和计算后的排名信息一起返回。这种搜索方式是最...

31分钟前
0
0
MYSQL备份工具-mysqldump

33分钟前
0
0

34分钟前
0
0