如何计算SciPy边界的导数?

时间:2017-09-02 14:02:07

标签: python numpy scipy derivative

我有一个脚本在各种(x,y)绘制一组z曲线。

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))

如何在dy/dxx=0之间绘制z

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

事实上,我需要计算每条x=0曲线(x,y)边界的斜率(如下所示),然后根据z绘制斜率。

enter image description here

2 个答案:

答案 0 :(得分:2)

您必须使用derivative功能:

  

scipy.misc.derivative(func,x0,dx = 1.0,n = 1,args =(),order = 3)

     

在某一点找到函数的第n个导数。

     

给定一个函数,使用间距为dx的中心差分公式   计算x0处的第n个导数。

     

参数:

     

func:功能输入功能。

     

x0: float找到第n个导数的点。

     

dx: float,可选的间距。

     

n: int,衍生品的可选订单。默认值为1.

     

args:元组,可选   参数order:int,optional要使用的点数,必须是奇数。

在你的情况下:

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 :(得分: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)。

顺便说一下,dydx = -ln(z)*z**(1-x)和{{1}}使用this