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

Python实现f(x,y,k)=0与g(x,y,k)=0交线在x-y平面的投影绘制

实现方案

核心思路是利用结式(Resultant) 消去公共参数k:因为你明确f、g均为k的多项式,两个多项式关于k的结式可以直接消去变量k,得到仅包含x、y的隐式方程,该方程的解集就是两个曲面交线在x-y平面的投影,之后直接用隐函数绘图工具绘制即可。

步骤1:调用sympy的结式接口消去k

sympy内置了resultant函数专门用于多项式结式计算,代码示例如下:

import sympy as sp
from sympy.plotting import plot_implicit

# 定义符号变量
x, y, k = sp.symbols('x y k')

# 替换为你实际的f、g表达式
f = x**2 + y**2 + k**2 - 4  # 示例:球面方程
g = k**2 + x*k + y - 2      # 示例:k的二次多项式曲面

# 计算关于k的结式,消去k得到仅含x、y的投影方程
proj_equation = sp.resultant(f, g, k)

步骤2:绘制投影隐函数图像

方法1:直接用sympy内置隐函数绘制

如果投影方程复杂度不高,可以直接调用plot_implicit绘制:

# 可自行调整x、y的取值范围
plot_implicit(sp.Eq(proj_equation, 0), (x, -3, 3), (y, -3, 3),
              xlabel='x', ylabel='y', title='曲面交线的x-y平面投影')

方法2:转数值函数用matplotlib绘制(性能更高)

如果结式方程过于复杂导致sympy绘图卡顿,可以转成numpy数值函数后用等高线找0值线,速度更快:

import numpy as np
import matplotlib.pyplot as plt

# 把符号方程转成numpy可调用的数值函数
proj_func = sp.lambdify((x, y), proj_equation, 'numpy')

# 生成计算网格,可调整范围和精度
xx, yy = np.meshgrid(np.linspace(-3, 3, 300), np.linspace(-3, 3, 300))
zz = proj_func(xx, yy)

# 0值等高线就是投影曲线
plt.contour(xx, yy, zz, levels=[0], colors='#d62728')
plt.xlabel('x')
plt.ylabel('y')
plt.title('曲面交线的x-y平面投影')
plt.grid(alpha=0.3)
plt.show()

注意事项

  • 若f、g关于k的最高次项系数包含x、y,结式结果会自动包含这些系数为0的额外解,你可以根据业务逻辑自行过滤这类解。
  • 当k的多项式次数很高时,结式的符号表达式会非常复杂,优先选择方法2进行数值绘制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 04:51:03