这是我的python代码:
import math
import decimal as dec
import numpy as np
import matplotlib.pyplot as plt
c = 3e8
wave = np.array([253.6e-9,283e-9,303.9e-9,330.2e-9,366.3e-9,435.8e-9])
freq = c/wave
potent = np.array([2.6,2.11,1.81,1.47,1.10,0.57])
m,b = np.polyfit(freq,potent,1)
print m,b
e = 1.6e-19
planck = m*e
print planck
plt.plot(freq,potent,'r.')
x = np.linspace(0,10,11)
y = m*x + b
plt.plot(x,y,'b-')
具体来说,我在包含y = m * x + b的行遇到了麻烦。所述行的输出是
array([-2.27198136, -2.27198136, -2.27198136, -2.27198136, -2.27198136,
-2.27198136, -2.27198136, -2.27198136, -2.27198136, -2.27198136,
-2.27198136])
这个结果是由于斜率'm'的幅度相当小,而'b'的幅度相当大。那么,我怎么能克服这个障碍呢?
另外,如果我写plt.plot(freq,potent,'r。')和plt.plot(x,y,'b - '),它会覆盖图吗?
答案 0 :(得分:0)
你面临的问题被称为"失去意义"或"取消"这是一个数学问题,而不是计算机科学问题。
您需要做的是更改算法,以便不再发生取消。如何在简单的情况下执行此操作:
http://en.wikipedia.org/wiki/Loss_of_significance
但算法的变化在某些情况下并不简单,根本不可能。如果您使用更多数字进行计算,则无法真正解决问题。你宁愿推迟它。一旦更改了数字,您可能会再次遇到同样的问题。
答案 1 :(得分:0)
要显示更多小数点,请将其添加到代码末尾:
print('%.60f' % value_x)
“。60”表示要显示的小数点后60位,“ value_x”表示要显示的任何值。
除了默认输出(以科学计数法表示)之外,我还需要将P值输出为实际的十进制数时,会使用此值。
示例:
In [1]: pearson_coef, p_value = stats.pearsonr(df['horsepower'], df['price'])
In [2]: print("The Pearson Correlation Coefficient is", pearson_coef, " with a P-value of P = ", p_value, "or ")
In [3]: print('%.50f' % p_value)
Out [4]: The Pearson Correlation Coefficient is 0.8095745670036559 with a P-value of P = 6.369057428260101e-48 or 0.00000000000000000000000000000000000000000000000637