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

如何用Python的SymPy求隐函数的实水平与垂直切线?

解决隐函数求实切线的问题

问题分析

你的代码存在两个关键问题:

  • 垂直切线的条件写错了:垂直切线对应dy/dx不存在(分母为0),正确条件是y² - 4x = 0,而非你写的-x² + 4y = 0(这和水平切线条件重复了)。
  • SymPy的solve默认返回所有复数解,需要显式限定求解范围为实数域。

修正后的代码

from sympy import *

x, y = symbols('x y')
LHS = x**3 + y**3
RHS = 12*x*y

# 计算隐式导数
dydx = idiff(LHS - RHS, y, x)
print(f'dy/dx = {dydx}')
print()

# 水平切线:dy/dx=0 → 分子为0,同时满足原方程,限定实数解
htan = solve([4*y - x**2, LHS - RHS], [x, y], domain=S.Reals)
print('Horizontal tangents at', htan)
print()

# 垂直切线:dy/dx不存在 → 分母为0,同时满足原方程,限定实数解
vtan = solve([y**2 - 4*x, LHS - RHS], [x, y], domain=S.Reals)
print('Vertical tangents at', vtan)
print()

手动筛选实根的方式

如果不想用domain参数,也可以在解出所有根后手动筛选实数解:

# 水平切线筛选实根
all_htan = solve([4*y - x**2, LHS - RHS], [x, y])
real_htan = [sol for sol in all_htan if all(s.is_real for s in sol)]
print('Horizontal tangents (real only):', real_htan)

# 垂直切线筛选实根
all_vtan = solve([y**2 - 4*x, LHS - RHS], [x, y])
real_vtan = [sol for sol in all_vtan if all(s.is_real for s in sol)]
print('Vertical tangents (real only):', real_vtan)

结果说明

运行修正后的代码,会得到以下实解:

  • 水平切线:[(0, 0), (4, 4)](注意(0,0)是原函数的奇点,导数无定义,可根据需求判断是否保留)
  • 垂直切线:[(0, 0), (4, 4)](同样(0,0)是奇点)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 14:33:10