如何解决如何通过生成计数器来绘制函数内部
在下面的代码中,我想查看每次调用函数时error
的变化。但是,该图是点的垂直列。如何在函数中生成一个计数器以提供x轴值?
import matplotlib.pyplot as plt
import numpy as np
from scipy.optimize import minimize
t = np.random.uniform(0.,100.,100)
y = t**3 - 130*t**2 + 5000*t - 56000 + np.random.normal(0.,10000.,100)
def fn(x):
a,b,c,d = x;
fit = a * t **3 + b * t **2 + c * t + d
error = sum((fit - y)**2)
plt.plot(error,".")
fn.x = x
return error
init_x = [2,-100,1000,-10000]
res = minimize(fn,init_x,method='Nelder-Mead',tol=1e-6)
fn(res.x)
解决方法
一种选择是使用global
变量作为计数器,并在每次调用fn
函数时增加其值。然后,您可以在使用plt.plot
时将其用作x坐标。例如:
import matplotlib.pyplot as plt
import numpy as np
from scipy.optimize import minimize
t = np.random.uniform(0.,100.,100)
y = t**3 - 130*t**2 + 5000*t - 56000 + np.random.normal(0.,10000.,100)
xx = 0
def fn(x):
global xx
xx += 1
a,b,c,d = x;
fit = a * t **3 + b * t **2 + c * t + d
error = sum((fit - y)**2)
plt.plot(xx,error,".")
fn.x = x
return error
init_x = [2,-100,1000,-10000]
res = minimize(fn,init_x,method='Nelder-Mead',tol=1e-6)
fn(res.x)
plt.gca().set_yscale('log')
plt.show()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。