二元函数图像3d绘制(Python)

1.简单的二元函数

举例:f(x,y)= sin x +cosy,f(x,y)=\frac{x+y}{2}等等较易实现,用一个函数,并直接返回表达式即可。

def func(x, y):
    return x*y*(x+y)/2

再分别定义x,y的范围与步长,并设置角度、颜色坐标即可。以函数

f(x,y) = xy\frac{x+y}{2}

为例,以下是实现代码,可供参考:

import math

from matplotlib import pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import mpl_toolkits.mplot3d
from matplotlib import pyplot as plt
from matplotlib import cm



figure = plt.figure()
ax = Axes3D(figure)
X = np.arange(0.0,1.0,0.01)
Y = np.arange(0.0,1.0,0.01)

X,Y = np.meshgrid(X,Y)
# 定义二元函数
def func(x, y):
    return x*y*(x+y)/2
Z = func(X,Y)#gist_rainbow
ax.plot_surface(X,Y,Z,rstride=1,cstride=1,cmap='gist_rainbow')
# 更改可视化角度
ax.view_init(elev=20, azim=150)  # elev是仰角,azim是方位角
# 添加颜色条
#fig.colorbar(ax)
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')


plt.show()

看一下图像显示效果:

2.复杂的、需要分段的且由变量相进行比较的二元函数

对于此类函数,思想是定义xy的取值范围,在区间内取出足够多个点,然后一个个带入公式比较,再用新的元组将函数值与xy取值绑定,再输出函数三维图像。可以看一下下面这个例子:

实现的代码如下:

import math

from matplotlib import pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import mpl_toolkits.mplot3d
from matplotlib import pyplot as plt
from matplotlib import cm
figure = plt.figure()
ax = Axes3D(figure)

x = np.linspace(0, 1, 50)
y = np.linspace(0, 1, 50)
# 定义二元函数
def func(x, y):
    if y<=0.3*x:
        return 2*y/3
    elif y>=0.3*x and y<=0.6*x:
        return -0.4*x+2*y
    elif y>=0.6*x and y<=5*x/3:
        return (x+y)/2
    elif y>5*x/3 and y<=10*x/3:
        return -0.4*y+2*x
    elif y>10*x/3:
        return 2*x/3
    else:
        return np.nan
# 生成x和y的网格点

X,Y = np.meshgrid(x,y)#创建网格
Z = np.array([[func(x, y) for x, y in zip(row_x, row_y)] for row_x, row_y in zip(X, Y)])
#Z = func(X,Y)#gist_rainbow
ax.plot_surface(X,Y,Z,rstride=1,cstride=1,cmap='rainbow')
# 更改可视化角度
ax.view_init(elev=20, azim=210)  # elev是仰角,azim是方位角
# 添加颜色条
#fig.colorbar(ax)
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')


plt.show()

显示效果:

和论文里实现的效果一样:

### 使用 Python 绘制二元函数图像 为了实现这一目标,需利用 Matplotlib 和 NumPy 库来完成绘图工作。下面是一个具体的例子,展示如何绘制一个简单的二元高斯分布函数的三维表面图。 #### 安装必要的库 如果尚未安装所需的库,则可以通过运行以下命令来进行安装: ```bash pip install matplotlib numpy seaborn ``` #### 导入所需模块并设置参数 接下来导入需要用到的各种模块,并设定一些基本参数以便后续操作[^2]。 ```python import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D import seaborn as sns sns.set(style="whitegrid") # 设置 Seaborn 的样式为白色网格背景 fig = plt.figure(figsize=(8, 6)) ax = fig.add_subplot(111, projection='3d') ``` #### 创建数据集 构建两个一维数组 `X` 和 `Y` 来表示平面上的位置坐标;通过这些位置计算对应的 Z 值(即高度),形成最终的数据矩阵 `Z`。 ```python x = y = np.linspace(-3, 3, 400) X, Y = np.meshgrid(x, y) def gaussian_function(x, y): """定义一个标准二维正态分布的概率密度函数""" return (1 / (2 * np.pi)) * np.exp(-(x**2 + y**2)/2) Z = gaussian_function(X, Y) ``` #### 绘制图形 最后一步就是调用合适的函数将上述准备好的数据可视化出来。这里选择了 wireframe 风格以及 surface 形式的组合方式呈现结果。 ```python # Wireframe plot ax.plot_wireframe(X, Y, Z, rstride=20, cstride=20, color='blue') # Surface plot with colormap and shading effect surf = ax.plot_surface(X, Y, Z, cmap='viridis', edgecolor='none', alpha=.9) plt.colorbar(surf, shrink=0.5, aspect=5) # 添加颜色条作为参考 plt.title('Bivariate Gaussian Distribution') # 图形标题 plt.show() ``` 此段代码不仅实现了基础功能,还加入了美观的设计元素如色彩映射表(cmap),使得整个图表更加直观易懂[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值