2017-09-02 235 views
0

我有一個腳本在各種z處繪製一組(x,y)曲線。如何計算SciPy邊界的微分?

import numpy as np 
import matplotlib.pyplot as plt 

x = np.linspace(0,1,100) 
z = np.linspace(0,30,30) 

def y(z, x): 
    return z**(1-x) 

for i in z: 
    plt.plot(x, y(i,x)) 

我怎樣才能在x=0zdy/dx

plt.plot(z, dy/dx at x=0) 

事實上,我需要在每個(x,y)曲線(如下所示)的x=0邊界計算斜率,然後繪製斜坡針對z

enter image description here

回答

2

必須使用derivative功能:

scipy.misc.derivative(FUNC,X0,DX = 1.0,n = 1時,ARGS =(),順序= 3)

在一個點找到函數的n階導數。

給定一個函數,使用中心差分公式,間距dx到 計算x0處的n階導數。

參數:

FUNC:功能輸入功能。

x0: float找到了第n個導數的點。

dx:浮動,可選間距。

n: int,可選衍生物的順序。默認值爲1.

參數:元組,可選 參數順序:int,可選要使用的點數必須是奇數。

你的情況:

import numpy as np 
import matplotlib.pyplot as plt 

from scipy.misc import derivative 

x = np.linspace(0,1,100) 
z = np.linspace(0,30,30) 

x0 = 0 

def y(z, x): 
    return z**(1-x) 

dydx = [derivative(lambda x : y(zi, x) , x0) for zi in z] 

plt.plot(z, dydx) 

plt.show() 

截圖:

enter image description here

1

你混了描述中的變量。我假設你在變量(x,z)中有一個函數y。所以你需要計算dy/dx和dy/dz。

您有幾種選擇來計算導數,包括符號計算(使用SymPY)或者直接計算有限差分(容易產生數值誤差)。請參閱:How do I compute derivative using Numpy?

但是,由於您是在點(x = 0,z = 0)處計算它,因此不能繪製該導數,因此結果是浮點數,而不是函數。爲了製作你想要的圖,你需要計算一般的符號導數(dydx),並製作你建議的圖。爲了得到點(0,0)的結果,只需要dydx(0,0)。使用this

+0

我不需要'DY/dz'。顯示的每條曲線都是固定的「z」處的「x,y」。我需要爲'x = 0'處顯示的每條曲線計算'dy/dx'。然後根據相應的「z」值繪製點。 – Googlebot