matplotlib 绘制三维方程

mklgxw1f  于 2023-05-01  发布在  其他
关注(0)|答案(1)|浏览(174)

我试图在python中绘制一个3d方程,但我遇到了一个类型错误:只有大小为1的数组可以转换为标量。公式为:

$$z=f(x,y)=\cos(x)\cdot\cos(y)\cdot e^{(\frac{-\sqrt{(x^{2}+y^{2})}}{4})}$$

我的代码是:

import numpy as np
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d.axes3d import Axes3D
import math

def f(x,y):
    return math.cos(x)*math.cos(y)*math.e**(-math.sqrt(x**2 + y**2)/4)
x_5 = np.linspace(start=-2, stop=2, num=200)
y_5 = np.linspace(start=-2, stop=2, num=200)
x_5, y_5 = np.meshgrid(x_5, y_5)
#plotting
fig = plt.figure(figsize=(16, 15))
ax = fig.add_subplot(111, projection="3d")
ax.set_xlabel("X", fontsize=18)
ax.set_ylabel("Y", fontsize=18)
ax.set_zlabel("z=f(X,Y), Cost Function", fontsize=18)
ax.plot_surface(x_5, y_5, f(x_5,y_5), cmap=cm.coolwarm, alpha=0.5)
plt.show()
olmpazwi

olmpazwi1#

你需要使用numpy函数,因为math库不能处理数组。

def f(x, y):
    return np.cos(x) * np.cos(y) * np.exp(-np.sqrt(x**2 + y**2) / 4)

相关问题