pythonbook/梯度下降/梯度下降解决面积问题.py

40 lines
820 B
Python

import math
import numpy as np
import matplotlib.pyplot as plt
def f(r):
g = 9*np.tan(r)+9*np.tan(3/4*np.pi-r)
return g
def drawfig(f):
x = np.linspace(1.01/4*np.pi,0.99/2*np.pi,100)
y = f(x)
# print(y)
plt.plot(x,y)
plt.show()
def grad(r):
g = 9.0/(np.cos(r)**2) - 9.0/(np.cos(3/4*np.pi-r)**2)
return g
def gradientDescent(f,r0, eta, nstep):
r_history = np.zeros(nstep+1)
f_history = np.zeros(nstep+1)
r_history[0] = r0
f_history[0] = f(r0)
r = r0
for i in range(1,nstep+1):
r = r - eta * grad(r)
r_history[i] = r
f_history[i] = f(r)
print(f"r is :{r} f(r) is {f(r)}")
return r_history,f_history
# print(f(1/3*np.pi))
drawfig(f)
x,y = gradientDescent(f, 1.22/4*np.pi, 0.0001*np.pi, 10000)
plt.plot(x,y)
plt.show()