2017-04-02 51 views
0

我正在通過實例8.1工作,標題爲來自Mark Newman的「計算物理」一書的歐拉方法。我用Numpy數組重寫了這個例子,但是當我繪製它的時候,我在同一個圖上得到兩個圖,不知道如何糾正它。也有更好的方法來將我的2個1D數組轉換成1個2D數組用於繪製Matplotlib,謝謝。我得到python中的一個數據集的兩個圖

紐曼例如:

from math import sin 
from numpy import arange 
from pylab import plot,xlabel,ylabel,show 

def f(x,t): 
    return -x**3 + sin(t) 

a = 0.0   # Start of the interval 
b = 10.0   # End of the interval 
N = 1000   # Number of steps 
h = (b-a)/N  # Size of a single step 
x = 0.0   # Initial condition 

tpoints = arange(a,b,h) 
xpoints = [] 
for t in tpoints: 
    xpoints.append(x) 
    x += h*f(x,t) 

plot(tpoints,xpoints) 
xlabel("t") 
ylabel("x(t)") 
show() 

我的修改:

from pylab import plot,show,xlabel,ylabel 
from numpy import linspace,exp,sin,zeros,vstack,column_stack 


def f(x,t): 
    return (-x**(3) + sin(t)) 

def Euler(f,x0,a,b): 
    N=1000  
    h = (b-a)/N 
    t = linspace(a,b,N) 
    x = zeros(N,float) 
    y = x0 
    for i in range(N): 
     x[i] = y 
     y += h*f(x[i],t[i]) 

    return column_stack((t,x)) #vstack((t,x)).T 


plot(Euler(f,0.0,0.0,10.0)) 
xlabel("t") 
ylabel("x(t)") 
show() 
+1

我想你的第一個問題是你需要清除劇情空間不知何故。我不太瞭解Pyplot,但是在Matplotlib中有一個'plt.clf()'@ – Henry

+0

@Henry剛剛嘗試,但它的幫助,主要的線性情節仍然出現,因爲某些原因它似乎需要一個數據集並繪製兩個圖從中。 – FireFistAce

+0

對不起兄弟。沒有pyplot的經驗! – Henry

回答

1

的原因,你得到兩行是t以及x都對他們的指數繪製,而不是x暗算t

我不明白你爲什麼要堆疊這兩個數組。只要保持分開,這也將解決這兩個地塊的問題。

以下工作正常。

import numpy as np 
import matplotlib.pyplot as plt 
f = lambda x,t: -x**3 + np.sin(t) 

def Euler(f,x0,a,b): 
    N=1000  
    h = (b-a)/N 
    t = np.linspace(a,b,N) 
    x = np.zeros(N,float) 
    y = x0 
    for i in range(N): 
     x[i] = y 
     y += h*f(x[i],t[i]) 

    return t,x 

t,x = Euler(f,0.0,0.0,10.0) 
plt.plot(t,x) 
plt.xlabel("t") 
plt.ylabel("x(t)") 
plt.show() 
相關問題