2017-08-05 65 views
-1

我有np.arange這個奇怪的問題。我想繪製一個基本上看起來像y = Ax^{ - 1/3}(1-Bx^{4/3})^ {1/2}的簡單公式從我提供的公式得到wolfram mathematica的質量圖,但我正努力在python中生成相同的圖!ValueError:超出的最大允許大小,變量範圍從0到3e33

import numpy as np 
import matplotlib.pyplot as plt 
import math 

# evenly sampled time at 200ms intervals 
x = np.arange(0., 10**33, 10**8.) 

plt.plot(x**(-1/3)*(1.102*10**20)*(1-(x**(4/3)*2.424*10**(-45)))**(1/2)) 

plt.xlim(math.pow(10,31), 3*math.pow(10,33)) 
plt.ylim(5*math.pow(10,8), 2.5*math.pow(10,9)) 

plt.xlabel("M(g)", fontsize =13) 
plt.ylabel("R(cm)", fontsize=13) 
plt.show() 

我的變量x應該從0到3e33,我希望看到無論是在直線和雙對數情節的情節,但我有與X系列內存問題,如果我設置一個較小的範圍內,我基本上根本沒有情節。我確信我在這裏做錯了事,我只是看不到它。感謝您的幫助。

+0

爲什麼你需要繪製到3e33?這是不是有點過分。也可以使用較小的間隔來評估情節的性質。 –

+4

您正在要求'arange'函數生成一個包含從0到10^33的均勻間隔值的ndarray,步長爲10^8。這是10^25分,不能存儲在所有的RAM中。 –

+2

@Clock Slave原則上,繪製從0到3e33的函數與繪製從0到3的函數沒有什麼不同。它取決於您要在區間內繪製多少個點。 –

回答

1

有在代碼中幾個問題:

  1. x有太多的分。減少點數,例如1000分。
  2. x不應該從0開始,因爲0**(-1/3)未定義(您不能被0除)。這樣的x一個明智的定義可能

    x = np.linspace(1e30, 1e33, 1001) 
    
  3. x值實際上並不出現在情節,因爲你只積yplt.plot(y)代替yxplt.plot(x,y)

總之,

from __future__ import division # if using python 2 
import numpy as np 
import matplotlib.pyplot as plt 

x = np.linspace(1e30, 1e33, 1001) 
y = x**(-1/3)*(1.102*10**20)*(1-(x**(4/3)*2.424*10**(-45)))**(1/2) 
plt.plot(x,y) 

plt.xlabel("M(g)", fontsize =13) 
plt.ylabel("R(cm)", fontsize=13) 
plt.show() 

將提供

enter image description here

+0

感謝所有的更正。但我必須看到我的情節爲那些確切的x和y限制,以解釋曲線的物理重要性。我嘗試了線性和loglog情節,似乎沒有出現這些限制。 – bhjghjh

+0

我明白了。你想在x軸上顯示'x'值。看到我更新的答案。 – ImportanceOfBeingErnest

相關問題