我是python新手,我需要为我的大学课程绘制图表。我在这段代码中得到一个值错误,我不知道如何解决它。我试图用np.asscalar
转换V和m,但没有得到任何改进
ValueError: err must be a scalar or a 1D or (2, n) array-like
我认为问题出在错误栏上,但我确实在努力解决它
import numpy as np
from matplotlib import pyplot as plt
from scipy.optimize import curve_fit
m=np.array([np.loadtxt('masse.txt')])
sigma_m=np.array([np.loadtxt('errore_masse.txt')])
lati=np.array([np.loadtxt('lati.txt')])
sigma_lati=np.array(np.loadtxt('errore_lati.txt'))
h=np.array([np.loadtxt('altezze.txt')])
sigma_h=np.array([np.loadtxt('errore_altezza.txt')])
dc=np.array([6.45, 8.56, 10.45, 10.46])
hc=np.array([16.25, 40.80, 75., 17.67])
lpe=np.array([8.56])
a=np.array([7.41])
hpe=np.array([37.3])
lb=np.array([10.46])
rc=dc/2
Vc=2*np.pi*a**2 *hc
sigma_rc=sigma_lati/2
sigma_Vc=Vc*2*(0.01/dc)
Vpe=6*lpe*a*hpe
sigma_Vpe=((lpe*a)**2 *(0.01)**2 +(lpe*hpe)**2 *(0.01)**2 +(hpe*a)**2 *(0.01)**2)
Vp=lb**2
sigma_Vp=2*Vp*(0.01/lb)
V=np.array([np.loadtxt('volumi.txt')])
sigma_V=np.array([np.loadtxt('errore_volumi.txt')])
def line (x, a, q):
"""funzione retta
"""
return a*x+q
plt.figure('Grafico massa-volume oggetti di ottone')
plt.errorbar(m, sigma_m, V, sigma_V, marker='.', fmt='.')
popt, pcov=curve_fit(m, V, line)
a_fit, q_fit= popt
sigma_a_fit, sigma_q_fit=np.sqrt(pcov.diagonal())
print(a_fit, q_fit, sigma_a_fit, sigma_q_fit)
x=np.linspace(10.675, 34.080, 10)
plt.plot(x, line(x, a_fit, q_fit))
plt.xlabel('Volume [mm$^3$]')
plt.ylabel('Massa [g]')
plt.grid (ls='dashed', which='both')
plt.show()
您得到的值错误是因为您在错误栏中混淆了值。有关用法,请查看the documentation
你的问题源于这一行:
首先,您应该使用
m.shape
、sigma_m.shape
等检查所有这些变量的形状。它们需要具有相同的形状,或者第二个2值应该是您切换的错误。如果它们是多维数组,则需要展平或使用索引来获取所需的数组。假设m
是您的x数据V
是您的y数据,您应该有如下内容:由于您有一个具有(1,N)的多维数组,请使用:
相关问题 更多 >
编程相关推荐