微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何通过生成计数器来绘制函数内部

如何解决如何通过生成计数器来绘制函数内部

在下面的代码中,我想查看每次调用函数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()

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。