我有一个脚本在各种(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/dx
与x=0
之间绘制z
?
plt.plot(z, dy/dx at x=0)
事实上,我需要计算每条x=0
曲线(x,y)
边界的斜率(如下所示),然后根据z
绘制斜率。
答案 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()
截图:
答案 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。