9.2 SymPy基础

9.3.1 化简

使用simplify()函数可以对表达式进行化简,simplify()函数以字符表达式类型作为传入参数,以SymPy表达式类型返回表达式的化简结果。

[]:expr=(x**3 + x**2 - x - 1)/(x**2 + 2*x + 1)

simplify(expr)

9.3.2 展开

多项式展开

使用expand()函数可以对多项式进行展开,expand()函数以多项式类型作为传入参数,以SymPy表达式类型返回多项式的化简结果。

[]:expr=(1+2*x+4*y)**3

expand(expr)

三角展开

使用expand_trig()函数可以对三角多项式进行展开,expand_trig()函数以三角多项式类型作为传入参数,以SymPy表达式类型返回多项式的化简结果。

[]:expr=sin(2*x)+cos(2*x)

expand_trig(expr)

9.3.3 因式分解

使用factor()函数可以对符号表达式进行因式分解,factor()函数以字符表达式类型作为传入参数,以字符表达式类型返回因式分解结果。

[]:expr=x**3-x**2+x-1

factor(expr)

9.3.4 合并同类项

使用collect()函数可以对符号表达式进行同类项合并,collect()函数以字符表达式类型作为传入参数,以字符表达式类型返回同类项合并结果结果。使用expr.collect.coeff(expr, n)可以返回前的系数。

[]:expr = x*y + x - 3 + 2*x**2 - z*x**2 + x**3

collected_expr=collect(expr, x)

collected_expr

[]:collected_expr.coeff(x,2)

9.3.5 解一元方程

使用solveset()函数可以对一元方程进行求解,solveset()函数以字符表达式类型作为传入参数,以集合类型返回一元方程的解。

[]:solveset((x+1)*(x+3)-15, x)

Eq()函数用来创建一个等式,eq()函数接受两个参数,分别为等号的左右两侧数学表达式。

[]:Equ=Eq((x+1)*(x+3), 15)

solveset(Equ, x)

9.3.6 解方程组

线性系统

使用linsolve()函数可以对线性系统方程组进行求解。

linsolve()函数的用法如下:

sympy.solvers.solveset.linsolve(system, *symbols)

其中system代之线性系统也即需要解的线性方程组。*symbols为需要求解的变量。求解结果以集合的形式给出。

例:求解线性系统

[]:linsolve([3*x+2*y+z-39, 2*x+3*y+z-34, x+2*y+3*z-26], (x, y, z))

非线性系统

使用nonlinsolve()函数可以对线性系统方程组进行求解。

nonlinsolve()函数的用法如下:

sympy.solvers.solveset.linsolve(system, *symbols)

其中system代之线性系统也即需要解的非线性方程组。*symbols为需要求解的变量。求解结果以集合的形式给出。

例:求解非线性系统

[]:nonlinsolve([x**2+4*y**2-5, x+2*y-1], x, y)

9.3.7 解不等式

解带有有理系数的有理不等式

针对有带有有理系数的有理不等式,SymPy在sympy.solvers.inequalities模块中封装了solve_poly_inequality()函数来求解此类不等式。

使用如下语句导入solve_poly_inequality()函数:

from sympy.solvers.inequalities import solve_rational_inequality

例:解不等式组

[]:solve_rational_inequalities([[

... ((Poly(-x + 1), Poly(1, x)), '>='),

... ((Poly(-x + 1), Poly(1, x)), '<=')]])

例:解不等式组

[]:solve_rational_inequalities([[

... ((Poly(x), Poly(1, x)), '!='),

... ((Poly(-x + 1), Poly(1, x)), '>=')]])

解带有理数系数的多项不等式

在对使用SymPy解带有有理系数的多项不等式进行讲解之前,我们首先需要介绍一个特殊的函数——Ploy。

Ploy()用于表示多项式表达式并对其进行操作的泛型类,是Expr类的子类。

Ploy()函数的使用方式如下:

Poly**(rep,** *gens**,** **args**)**

使用如下语句导入Poly函数:

针对有带有有理系数的有理不等式,SymPy在sympy.solvers.inequalities模块中封装了solve_poly_inequality()函数来求解此类不等式。

使用如下语句导入solve_poly_inequality()函数:

from sympy.solvers.inequalities import solve_poly_inequality

例:解不等式组

[]:>>> solve_poly_inequality(Poly(x**2 - 1, x, domain='ZZ'), '!=')

例:解方程

[]:solve_rational_inequalities([[

... ((Poly(-x + 1), Poly(1, x)), '!='),

... ((Poly(-x + 1), Poly(1, x)), '<=')]])

解实数单变量不等式

针对实数单变量不等式,SymPy在sympy.solvers.inequalities模块中封装了solve_ univariate _inequality()函数来求解此类不等式。

使用如下语句导入solve_ univariate _inequality()函数:

from sympy.solvers.inequalities import solve_ univariate _inequality

例:解不等式

[]:solve_univariate_inequality(x**2 >= 4, x, relational=False)

Union(Interval(-oo, -2), Interval(2, oo))

例:解不等式

[]:solve_univariate_inequality(x**3+2*x**2 -3*x>= 4, x, relational=False)

例:解不等式

[]:domain = Interval(0, S.Infinity)

solve_univariate_inequality(x**3+2*x**2 -3*x>= 4, x, False, domain)

例:解三角不等式

[]:solve_univariate_inequality(sin(x)**2> 0, x, relational=False)

化简带有有理系数的有理数多项式

[]:from sympy import Poly, Symbol

from sympy.solvers.inequalities import reduce_rational_inequalities

x = Symbol('x', real=True)

例:化简

[]:reduce_rational_inequalities([[x**2 <= 0]], x)

例:化简

[]:reduce_rational_inequalities([[x + 2 > 0]], x)

[]:reduce_rational_inequalities([[(x + 2, ">")]], x)

[]:reduce_rational_inequalities([[x + 2]], x)

化简带有绝对值的不等式

[]:from sympy import Abs, Symbol

from sympy.solvers.inequalities import reduce_abs_inequality

x = Symbol('x', real=True)

[]:reduce_abs_inequality(Abs(x - 5) - 3, '<', x)

[]:reduce_abs_inequality(Abs(x + 2)*3 - 13, '<', x)

化简带有绝对值的不等式系统

[]:from sympy import Abs, Symbol

from sympy.solvers.inequalities import reduce_abs_inequality

x = Symbol('x', real=True)

例:化简

[]:reduce_abs_inequalities([(Abs(3*x - 5) - 7, '<'),

... (Abs(x + 25) - 13, '>')], x)

例:化简

[]:reduce_abs_inequalities([(Abs(x - 4) + Abs(3*x - 5) - 7, '<')], x)

Last updated