首页 > 解决方案 > 如何解决 Python 中多变量的限制?

问题描述

我正在尝试使用 Python 解决多变量函数(三个变量)sympy的限制,但 limit() 方法仅适用于一个变量;而且,如果我尝试使用 subs,它可以使用 2 个参数 f(x, y),但我需要三个参数 f(x, y, z)。

尝试使用 limit() 方法:

from sympy import *
import math
x, y, z = symbols('x y z')
exp = limit((x**3 + y*x**2)/sqrt(x**4 + y**2 + z**4), x, 0, y, 0, z, 0)
print(exp)

TypeError:limit() 接受 3 到 4 个位置参数,但给出了 7 个

尝试使用潜艇:

from sympy import *
import math
x, y, z = symbols('x y z')
exp = (x**3 + y*x**2)/sqrt(x**4 + y**2 + z**4)
res_exp = exp.subs([x,0], [y,0], [z,0])
print(res_exp)

ValueError: subs 接受 1 或 2 个参数

标签: pythonpython-3.x

解决方案


感谢回答,对我有用的方法是创建一个类似于 limit() 的方法,它接受 7 个参数,然后在每个轴变为 0 时评估方程。函数接收方程,以及要评估的点。

from sympy import *
x, y, z = symbols('x y z')
exp1 = (3*x*z**2*y + y**2) / (x**2 + 2*y**2 + z**4)
exp2 = (x*y + y*z +x*z) / (x**2 + y**2 + z**2)
exp3 = (x*z**2 + 2*y**2) / (x**2 + 2*y**2 + z**4)

def limit3var(eq, var1, val1,var2, val2, var3, val3):
    res_eqx = eq.subs([(var2, val2), (var3, val3)]) #x goes to 0.
    res_eqy = eq.subs([(var1, val1), (var3, val3)]) #y goes to 0.
    res_eqz = eq.subs([(var1, val1), (var2, val2)]) #z goes to 0.

    print("Evaluate x-axis : {}".format(res_exp))
    print("Evaluate y-axis : {}".format(res_exp2))
    print("Evaluate z-axis : {}".format(res_exp3))

    if res_exp != res_exp2 or res_exp != res_exp3 or res_exp2 != res_exp3:
        print("The limit does not exist in that point: ")
    else:
        print("The function is continuous in that point")

在控制台中运行:

In[45]: limit3var(exp1, x, 0, y, 0, z, 0)
Evaluate x-axis : 0
Evaluate y-axis : 1/2
Evaluate z-axis : 0
The limit does not exist in that point

In[46]: limit3var(exp2, x, 0, y, 0, z, 0)
Evaluate x-axis : 0
Evaluate y-axis : 0
Evaluate z-axis : 0
The function is continuous

In[47]: limit3var(exp3, x, 0, y, 0, z, 0)
Evaluate x-axis : 0
Evaluate y-axis : 1
Evaluate z-axis : 0
The limit does not exist in that point 

推荐阅读