如何用SymPy计算带约束条件的多元函数值域?
用SymPy计算多元函数值域的方法
对于多元函数,SymPy没有像function_range那样直接的内置函数,但可以通过临界点分析+边界值枚举的方式,结合SymPy的符号计算能力求解,以你给出的例子f = x*y(x∈[0,1],y∈[-1,1])为例:
步骤1:导入依赖并定义变量与函数
from sympy import symbols, diff, solve, Interval, Union # 定义符号变量和目标函数 x, y = symbols('x y') f = x * y
步骤2:寻找定义域内的临界点
计算函数对各变量的偏导数,解偏导为0的方程组,找到临界点:
# 计算偏导数 df_dx = diff(f, x) df_dy = diff(f, y) # 解偏导为0的方程组 critical_points = solve((df_dx, df_dy), (x, y)) # 临界点为(0, 0),代入函数得值0 critical_value = f.subs(critical_points[0])
步骤3:分析各边界的函数值域
闭区间定义域的边界需要逐一分析(部分边界可转化为单变量函数,直接用function_range计算,这里为简化直接推导):
- 边界1:x=0,y∈[-1,1] → f=0,值域为
Interval(0, 0)(单点集) - 边界2:x=1,y∈[-1,1] → f=y,值域为
Interval(-1, 1) - 边界3:y=-1,x∈[0,1] → f=-x,值域为
Interval(-1, 0) - 边界4:y=1,x∈[0,1] → f=x,值域为
Interval(0, 1)
用代码定义各边界值域:
# 定义各边界的值域 bound1 = Interval(0, 0) bound2 = Interval(-1, 1) bound3 = Interval(-1, 0) bound4 = Interval(0, 1)
步骤4:合并所有区间得到最终值域
将临界点的值转化为单点区间,再与所有边界值域取并集:
# 临界点值转为单点区间 critical_interval = Interval(critical_value, critical_value) # 合并所有区间 total_range = Union(critical_interval, bound1, bound2, bound3, bound4) print("函数f的值域为:", total_range) # 输出:函数f的值域为: Interval(-1, 1)
通用思路说明
对于一般的多元连续函数,在闭有界定义域上的值域由临界点的函数值和各边界上的函数值域共同决定:
- 计算所有偏导数,解偏导为0的方程组得到临界点;
- 逐一分析定义域的每个边界(复杂边界可转化为单变量函数,调用
function_range计算值域); - 合并所有临界点值和边界值域,取并集即为最终值域。
内容的提问来源于stack exchange,提问作者Quentin LAO
相关产品推荐
相关产品推荐

