利用pytorch 自动求导,计算 sin(x)的导数。画出导数的函数图像。
时间: 2024-09-24 09:22:51 浏览: 36
在PyTorch中,自动微分(Automatic Differentiation, AD)功能使得我们能够方便地计算梯度。对于计算`sin(x)`的导数,实际上就是计算正弦函数关于输入x的导数,也就是cos(x)。
首先,我们需要导入必要的库并创建一个Variable实例来表示我们要操作的张量:
```python
import torch
# 创建一个Tensor实例
x = torch.tensor([0.5], requires_grad=True)
```
然后,我们可以对x应用sin函数,并利用`.grad_fn`属性获取到这个操作的链式法则对象,它将用于后续的梯度计算:
```python
y = torch.sin(x)
print("y =", y)
```
接着,我们计算y相对于x的导数,这会自动更新x的梯度信息:
```python
dy_dx = y.grad_fn
dy_dx.backward()
```
此时,`x.grad`将会包含`cos(0.5)`的结果,这是`sin(x)`在x=0.5处的导数值。
至于绘制导数函数图像,你可以创建一个x值的范围,例如从-π到π,然后计算对应的sin(x)和cos(x)值,最后用matplotlib绘制出来:
```python
import matplotlib.pyplot as plt
x_values = torch.linspace(-3 * np.pi, 3 * np.pi, 400).float()
y_values = torch.sin(x_values)
plt.plot(x_values.numpy(), y_values.numpy(), label='sin(x)')
plt.plot(x_values.numpy(), x_values.numpy() * 0 + 1, 'r--', label='cos(x)', linestyle='dashed')
plt.legend()
plt.show()
```
这条图将同时展示sin(x)曲线及其导数(cos(x)的线)。
阅读全文