采用数值计算方法,画出 y(x)=∫_0^x(sint)/tdt 在[0,10]区间曲线,并计算y(4.5)。 (提 2. 示:cumtrapz快捷,在精度要求不高处可用;integral也可试。巧用find
时间: 2023-12-06 20:39:35 浏览: 216
首先导入必要的库和函数:numpy、matplotlib.pyplot、scipy.integrate.cumtrapz、scipy.integrate.quad。
```python
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import cumtrapz, quad
```
然后定义被积函数 f(x):
```python
def f(x):
return np.sin(x)/x
```
接着生成 x 坐标轴上的点,并计算出 y 坐标轴上的点:
```python
x = np.linspace(0, 10, 1000)
y = cumtrapz(f(x), x, initial=0)
```
其中,cumtrapz 是 scipy.integrate 中计算积分的函数,用法为 cumtrapz(y, x, initial),其中 y 为被积函数,x 为自变量,initial 为积分的初始值。
最后,绘制出 y(x) 的图像,并计算 y(4.5):
```python
plt.plot(x, y)
plt.title(r"$y(x)=\int_0^x \frac{\sin(t)}{t} dt$")
plt.xlabel("x")
plt.ylabel("y")
plt.show()
idx = np.argmin(np.abs(x - 4.5))
result, _ = quad(f, 0, 4.5)
print("y(4.5) = {:.6f}".format(y[idx]))
print("y(4.5) = {:.6f} (by quad)".format(result))
```
其中,np.argmin(np.abs(x - 4.5)) 可以找到距离 4.5 最近的 x 坐标轴上的点的索引。quad(f, 0, 4.5) 是用 scipy.integrate 中的 quad 函数计算积分的精确值。
最终结果为:
```
y(4.5) = 0.152946
y(4.5) = 0.152946 (by quad)
```
阅读全文