import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
f = lambda x : (x - 3)**2 + 2.5*x -7.5
求解导数令导数=0求解最小值
2*(x - 3)*1 + 2.5 = 0
2*x - 3.5 = 0
x = 1.75
x = np.linspace(-2,5,100)
y = f(x)
plt.plot(x,y)
梯度下降求解最小值
d = lambda x : 2*(x - 3) + 2.5
learning_rate = 0.1
min_value = np.random.randint(-3,5,size = 1)[0]
print('-------------------',min_value)
min_value_last = min_value + 0.1
tol = 0.0001
count = 0
while True:
if np.abs(min_value - min_value_last) < tol:
break
min_value_last = min_value
min_value = min_value - learning_rate*d(min_value)
count +=1
print('+++++++++++++++++++++%d'%(count),min_value)
print('**********************',min_value)
f2 = lambda x : -(x - 3)**2 + 2.5*x -7.5
x = np.linspace(-2,10,100)
y = f2(x)
plt.plot(x,y)
result = []
d2 = lambda x : -2*(x - 3) + 2.5
learning_rate = 10
max_value = np.random.randint(2,8,size = 1)[0]
result.append(max_value)
print('-------------------',max_value)
max_value_last = max_value + 0.001
precision = 0.0001
count = 0
while True:
if count >3000:
break
if np.abs(max_value - max_value_last) < precision:
break
max_value_last = max_value
max_value = max_value + learning_rate*d2(max_value)
result.append(max_value)
count +=1
print('+++++++++++++++++++++%d'%(count),max_value)
print('**********************',max_value)
ret = ret - ret*step
plt.figure(figsize=(12,9))
x = np.linspace(4,8,100)
y = f2(x)
plt.plot(x,y)
result = np.asarray(result)
plt.plot(result,f2(result),'*')