2017-09-02 103 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