python - 如何显示 f(x) 以及朝向 f(xd) 和 f(x+d) 的斜率,中间值未知?
问题描述
假设 x 是 x 轴上我的元素的元素之一。现在假设对于常数 d,让right-slope = [f(x+d)-f(x)]/d
和left-slope = [f(x)-f(x-d)]/d
,对于x
我们知道的每个 。
我想要的是在 处绘制一个标记(如图中的菱形或加号)B = (x,f(x))
,而 B 左侧(AB
)和右侧(BC
)的段应分别代表左斜率和右斜率,即的坡度AB
应为左坡,BC 的坡度应为右坡。
我认为这基本上归结为:你知道你的 x 数组中f(x)
的每一个。x
你也知道f(x-d)
,f(x+d)
对于所有这些x
,给定一个小常数d
。现在您要绘制这样的图,仅[x-d,f(x-d)]
,[x,f(x)], [x+d,f(x+d)]
由一条线连接每个x
。
我如何才能以这种方式为所有此类元素绘制图表,例如x
在 python 中的 x 数组中?
解决方案
以下方法为 中fn
的每个条目创建 4 个条目f
。第一个对应于左值,第二个对应于 f 值本身,第三个对应于右值,第四个是np.nan
. 请注意,当nan
在绘图命令中遇到时,会创建一个间隙。有 4 个对应的 x 值,一个在 xd,一个在 x,一个在 x+d,一个不重要,因为不会被绘制。
以下代码首先从正弦函数 ( sin(x^2)
) 创建一些测试数据。实际上,这些值将来自更复杂的计算。
如果你只有斜率,你可以计算f_right = f + right_slope*d
。和类似的f_left = f - left_slope*d
。
from matplotlib import pyplot as plt
import numpy as np
d = .04
x = np.linspace(0, 4, 20)
f = np.sin(x ** 2)
f_left = np.sin((x - d) ** 2)
f_right = np.sin((x + d) ** 2)
xn = np.repeat(x, 4)
xn[::4] -= d
xn[2::4] += d
fn = np.column_stack([f_left, f, f_right, np.full_like(f, np.nan)]).ravel()
plt.plot(x, f, marker='D', ls='', color='crimson')
plt.plot(xn, fn, color='navy')
plt.show()
推荐阅读
- elasticsearch - Elastisearch:只能在关键字和文本字段上使用前缀查询 - 而不是在类型为 [boolean] 的 [isXyz] 上
- javascript - 嵌套命名空间与 ES 模块
- x86 - 是否对不同的 INTEL SIMD 指令集有任何依赖关系?
- python-3.x - AttributeError:“Hundo”对象没有属性“saluti”
- javascript - 根据字符串的索引获取元素
- python - 修改 sympify 以不简化乘法
- python - python脚本过程中的日志文件
- python - 尝试将功能写入模块然后等待它时获取'AttributeError:模块'module'没有属性'function'
- reactjs - 测试reducer时如何在第一次测试后忽略一个笑话
- apache - “PermissionError:[Errno 13] 权限被拒绝:”在烧瓶应用程序中