You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python在指定x、y区间内绘制给定符号函数的图像

二元函数图像绘制实现方案

核心问题修正

你当前代码存在几个错误:

  • 要绘制的是二元函数,不能用仅支持一维折线的plt.plot,需使用等高线图或3D曲面图
  • 混用sympy符号和numpy数值运算逻辑错误,直接使用numpy做数值计算即可,不需要定义sympy符号
  • 语法错误:numpy中cos平方需写为np.cos()**2或np.square(np.cos()),π需调用np.pi,自然对数用np.log而非log10,范数需调用np.linalg.norm()计算
  • 缺少数值采样步骤,必须先对x、y区间采样生成网格点再逐点计算函数值

完整可运行代码

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

# 定义参数
c = np.array([7,2])
A = np.array([[2,3],[4,6]])
b = np.array([10,50])
c_norm = np.linalg.norm(c) # 计算结果约为7.28,和你展开的7.2接近,也可直接写7.2

# 1. 采样生成网格点
x = np.linspace(-5, 5, 100) # x区间采样100个点
y = np.linspace(-3, 2, 100) # y区间采样100个点
X, Y = np.meshgrid(x, y) # 生成二维网格矩阵

# 2. 逐点计算函数值
# 线性项:7x + 2y
linear_term = c[0]*X + c[1]*Y
# 余弦平方项
cos_term = c_norm * (np.cos(np.pi * X)**2 + np.cos(np.pi * Y)**2)
# 对数项:注意对数参数必须大于0,小于等于0的位置返回nan,绘图时自动忽略
log_term = np.log(10 - 2*X - 3*Y) + np.log(50 -4*X -6*Y) + np.log(X) + np.log(Y)
# 总函数值
f = linear_term + cos_term - log_term

# 3. 可视化,两种方式可选:
# 方式1:绘制等高线填色图
plt.figure(figsize=(8,6))
contour = plt.contourf(X, Y, f, levels=50, cmap='viridis')
plt.colorbar(contour, label='函数值f(x,y)')
plt.xlabel('x')
plt.ylabel('y')
plt.title('目标函数等高线图')
plt.show()

# 方式2:绘制3D曲面图
fig = plt.figure(figsize=(10,7))
ax = fig.add_subplot(111, projection='3d')
surf = ax.plot_surface(X, Y, f, cmap='viridis', edgecolor='none')
fig.colorbar(surf, shrink=0.5, aspect=5, label='函数值f(x,y)')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('f(x,y)')
ax.set_title('目标函数3D曲面图')
plt.show()

注意事项

  • 对数项要求所有参数大于0,因此x>0、y>0、2x+3y<10、4x+6y<50,区间内只有满足约束的区域会正常显示,其他区域为无效定义域
  • 可以调整linspace的采样点数(第三个参数)控制图像清晰度,点数越高越清晰但计算速度越慢

内容的提问来源于stack exchange,提问作者user9990604

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 08:36:05