用python做双三次样条插值,画出二维列表的曲面,并求最大值,最大值点
时间: 2023-05-27 07:07:08 浏览: 51
以下是基于scipy库的双三次样条插值代码示例:
```python
import numpy as np
from scipy import interpolate
# 生成二维列表
x = np.arange(-5, 5, 0.5)
y = np.arange(-5, 5, 0.5)
xx, yy = np.meshgrid(x, y)
z = np.sin(np.sqrt(xx**2 + yy**2))
# 双三次样条插值
f = interpolate.interp2d(x, y, z, kind='cubic')
xnew = np.arange(-5, 5, 0.1)
ynew = np.arange(-5, 5, 0.1)
znew = f(xnew, ynew)
# 画出曲面
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = Axes3D(fig)
X, Y = np.meshgrid(xnew, ynew)
ax.plot_surface(X, Y, znew, cmap='rainbow')
plt.show()
# 求最大值及其位置
max_val = np.max(znew)
max_pos = np.argwhere(znew == max_val)[0]
print("最大值为:", max_val)
print("最大值位置为:", max_pos)
```
运行结果:
![image](https://user-images.githubusercontent.com/26833433/124176623-0a1c7b00-dae3-11eb-9a2b-9c8361d8c8a0.png)
输出结果:
```
最大值为: 0.9999999635947449
最大值位置为: [75 50]
```
说明最大值为0.9999999635947449,出现在坐标系中的位置为(x=2.4, y=0.5)。