Python的高等数学应用四 梯度下降法求函数最小值

问题引入

可以应用于机器学习(Python)的梯度下降寻找最小值
计算:
minf(x) = x1 - x2 + 2x1^2 + 2x1x2 + x2^2
给定初始值 X^(0) = (0,0)^T

import  matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np 
def Fun(x,y):
	return x - y + 2  * x * x + 2 * x * y +  y * y 

def pxFun(x,y):
	return  + 4 * x + 2 * y





def pyFun(x,y):
	return -1 + 2 * x + 2 * y


fig = plt.figure()
ax = Axes3D(fig)

X,Y = np.mgrid[-2:2:40j, -2:2:40j] #取样并作满射联合
Z = Fun(X,Y) #取样点Z坐标打表
ax.plot_surface(X,Y,Z, rstride = 1, cmap = "rainbow")
ax.set_xlabel('x')
ax.set_ylable('y')
ax.set_zlable('z')

#梯度下降

strp = 0.008 # 取步长
x = 0
y = 0

tag_x = [x]
tag_y = [y]
tag_z = [Fun(x,y)] #绘制点
new_x = x
new_y = y
Over = Flase
while Over == False :
new_x -= step * PxFun(x,y)
new_y -= step * PyFun(x,y)
if Fun(x,y) - Fun(new_x, new_y) < 7e-9:
Over = True 
x = new_x
y = new_y

tag_x.append(x)
tag_y.append(y)
tag_z.append(Fun(x,y)) # 新点的3个坐标打入表中
ax.plot(tag_x,tag_y,tag_z,'r')
plt.title('(x,y)~('+str(x)+"," + str(y) +')')
plt.show()




  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值