Python 如何通过生成计数器在函数内部绘图
在下面的代码中,我想看看每次调用函数时Python 如何通过生成计数器在函数内部绘图,python,function,loops,matplotlib,Python,Function,Loops,Matplotlib,在下面的代码中,我想看看每次调用函数时错误是如何变化的。但是,绘图是点的垂直列。如何在函数中生成计数器以提供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.,
错误是如何变化的。但是,绘图是点的垂直列。如何在函数中生成计数器以提供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()