gpt4 book ai didi

python - 如何使用 yscale ('log' 拟合曲线) - Python

转载 作者:太空宇宙 更新时间:2023-11-04 05:52:59 25 4
gpt4 key购买 nike

我一直在尝试将一些数据拟合到特定集合 x 和 y 的最佳拟合线。我尝试了很多次,但都没有成功,而且我似乎无法找到一种方法来使用 yscale('log') 和 xscale('log') 来拟合数据。我得到了这个奇怪的结果,但我似乎无法找到为什么它会给出这个奇怪的 [result]

[结果]:https://www.dropbox.com/s/g6m4f8wh7r7jffg/Imagem%20sem%20t%C3%ADtulo.png?dl=0 .

我的代码:

#!/usr/bin/env python 
# import the necessary modules
import numpy as np
import matplotlib.pyplot as plt

# Generate x and y values which the curve will be fitted to
# (In practical cases, these should be read in)
x = [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048]
y = [497775, 150760, 50929, 19697, 8520, 3948, 1812, 710, 214, 57, 18, 4]

p = np.polyfit(x,y,1)
plt.plot(x, np.polyval(p,x), 'r-')
plt.plot(x, y)
plt.yscale('log')
plt.xscale('log')
plt.show()

我有一种预感,这是因为我使用的是多元值,但我找不到如何计算它的对数。你能帮我吗?我是新手,需要帮助!

最佳答案

在双对数图上显示为线性的东西不是线性函数,而是指数函数。

您获得了最佳拟合线:

y = a * x + b

但您想要的是最适合以下形式的指数函数:

y = a * x**k

有很多方法可以做到这一点。使用 polyfit 是一种很好的方法,但您需要在“对数空间”中调整该行。换句话说,将 x 的对数与 y 的对数拟合。

例如,根据您的代码:

import numpy as np
import matplotlib.pyplot as plt

x = [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048]
y = [497775, 150760, 50929, 19697, 8520, 3948, 1812, 710, 214, 57, 18, 4]

logx, logy = np.log(x), np.log(y)

p = np.polyfit(logx, logy, 1)
y_fit = np.exp(np.polyval(p, logx))

plt.plot(x, y_fit, 'r-')
plt.plot(x, y)
plt.yscale('log')
plt.xscale('log')
plt.show()

enter image description here

关于python - 如何使用 yscale ('log' 拟合曲线) - Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29222199/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com