完整函数的运算#
加法和乘法#
两个完整函数可以相加或相乘,结果也是一个完整函数。
>>> from sympy.holonomic.holonomic import HolonomicFunction, DifferentialOperators >>> from sympy.polys.domains import QQ >>> from sympy import symbols >>> x = symbols('x') >>> R, Dx = DifferentialOperators(QQ.old_poly_ring(x),'Dx')
p
和q
以下是 \(e^x\) 和 \(\sin(x)\) 分别。>>> p = HolonomicFunction(Dx - 1, x, 0, [1]) >>> q = HolonomicFunction(Dx**2 + 1, x, 0, [0, 1])完整表示 \(e^x+\sin(x)\)
>>> p + q HolonomicFunction((-1) + (1)*Dx + (-1)*Dx**2 + (1)*Dx**3, x, 0, [1, 2, 1])完整表示 \(e^x \cdot \sin(x)\)
>>> p * q HolonomicFunction((2) + (-2)*Dx + (1)*Dx**2, x, 0, [0, 1])
整合与差异化#
- HolonomicFunction.integrate(limits, initcond=False)[源代码]#
对给定的完整函数进行积分。
实例
>>> from sympy.holonomic.holonomic import HolonomicFunction, DifferentialOperators >>> from sympy import QQ >>> from sympy import symbols >>> x = symbols('x') >>> R, Dx = DifferentialOperators(QQ.old_poly_ring(x),'Dx') >>> HolonomicFunction(Dx - 1, x, 0, [1]).integrate((x, 0, x)) # e^x - 1 HolonomicFunction((-1)*Dx + (1)*Dx**2, x, 0, [0, 1]) >>> HolonomicFunction(Dx**2 + 1, x, 0, [1, 0]).integrate((x, 0, x)) HolonomicFunction((1)*Dx + (1)*Dx**3, x, 0, [0, 1, 0])
- HolonomicFunction.diff(*args, **kwargs)[源代码]#
给定完整函数的微分。
实例
>>> from sympy.holonomic.holonomic import HolonomicFunction, DifferentialOperators >>> from sympy import ZZ >>> from sympy import symbols >>> x = symbols('x') >>> R, Dx = DifferentialOperators(ZZ.old_poly_ring(x),'Dx') >>> HolonomicFunction(Dx**2 + 1, x, 0, [0, 1]).diff().to_expr() cos(x) >>> HolonomicFunction(Dx - 2, x, 0, [1]).diff().to_expr() 2*exp(2*x)
参见
多项式合成#
- HolonomicFunction.composition(expr, *args, **kwargs)[源代码]#
Returns function after composition of a holonomic function with an algebraic function. The method cannot compute initial conditions for the result by itself, so they can be also be provided.
实例
>>> from sympy.holonomic.holonomic import HolonomicFunction, DifferentialOperators >>> from sympy import QQ >>> from sympy import symbols >>> x = symbols('x') >>> R, Dx = DifferentialOperators(QQ.old_poly_ring(x),'Dx') >>> HolonomicFunction(Dx - 1, x).composition(x**2, 0, [1]) # e^(x**2) HolonomicFunction((-2*x) + (1)*Dx, x, 0, [1]) >>> HolonomicFunction(Dx**2 + 1, x).composition(x**2 - 1, 1, [1, 0]) HolonomicFunction((4*x**3) + (-1)*Dx + (x)*Dx**2, x, 1, [1, 0])
参见
转换为完整序列#
- HolonomicFunction.to_sequence(lb=True)[源代码]#
求函数级数展开中系数的递推关系 \(x_0\) 在哪里 \(x_0\) 是存储初始条件的点。
解释
如果这一点 \(x_0\) 是普通的,解的形式 \([(R, n_0)]\) 返回。在哪里? \(R\) 是递归关系和 \(n_0\) 是最小的
n
重复出现的情况。如果这一点 \(x_0\) 是正则单数,是一种格式的解决方案列表 \((R, p, n_0)\) 返回,即。 \([(R, p, n_0), ... ]\) . 这个向量中的每个元组代表一个递归关系 \(R\) 与指数方程的根有关
p
. 在这种情况下也可以提供不同格式的条件,请参见HolonomicFunction类的docstring。如果无法用数值计算初始条件,它将作为符号返回 \(C_j\) ,表示 \((x - x_0)^j\) 在幂级数中关于 \(x_0\) .
实例
>>> from sympy.holonomic.holonomic import HolonomicFunction, DifferentialOperators >>> from sympy import QQ >>> from sympy import symbols, S >>> x = symbols('x') >>> R, Dx = DifferentialOperators(QQ.old_poly_ring(x),'Dx') >>> HolonomicFunction(Dx - 1, x, 0, [1]).to_sequence() [(HolonomicSequence((-1) + (n + 1)Sn, n), u(0) = 1, 0)] >>> HolonomicFunction((1 + x)*Dx**2 + Dx, x, 0, [0, 1]).to_sequence() [(HolonomicSequence((n**2) + (n**2 + n)Sn, n), u(0) = 0, u(1) = 1, u(2) = -1/2, 2)] >>> HolonomicFunction(-S(1)/2 + x*Dx, x, 0, {S(1)/2: [1]}).to_sequence() [(HolonomicSequence((n), n), u(0) = 1, 1/2, 1)]
工具书类
级数展开#
- HolonomicFunction.series(n=6, coefficient=False, order=True, _recur=None)[源代码]#
求给定完整函数的幂级数展开式 \(x_0\) .
解释
如果 \(x_0\) 是一个正则点,它具有指数方程的多个根。
实例
>>> from sympy.holonomic.holonomic import HolonomicFunction, DifferentialOperators >>> from sympy import QQ >>> from sympy import symbols >>> x = symbols('x') >>> R, Dx = DifferentialOperators(QQ.old_poly_ring(x),'Dx') >>> HolonomicFunction(Dx - 1, x, 0, [1]).series() # e^x 1 + x + x**2/2 + x**3/6 + x**4/24 + x**5/120 + O(x**6) >>> HolonomicFunction(Dx**2 + 1, x, 0, [0, 1]).series(n=8) # sin(x) x - x**3/6 + x**5/120 - x**7/5040 + O(x**8)
数值计算#
- HolonomicFunction.evalf(points, method='RK4', h=0.05, derivatives=False)[源代码]#
用数值方法求完整函数的数值。(默认为RK4)。必须提供一组点(实数或复数),这将是数值积分的路径。
解释
The path should be given as a list \([x_1, x_2, \dots x_n]\). The numerical values will be computed at each point in this order \(x_1 \rightarrow x_2 \rightarrow x_3 \dots \rightarrow x_n\).
Returns values of the function at \(x_1, x_2, \dots x_n\) in a list.
实例
>>> from sympy.holonomic.holonomic import HolonomicFunction, DifferentialOperators >>> from sympy import QQ >>> from sympy import symbols >>> x = symbols('x') >>> R, Dx = DifferentialOperators(QQ.old_poly_ring(x),'Dx')
从(0到1)的实轴上的直线
>>> r = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1]
从0.1到1在e^x上的Runge-Kutta四阶。1处的精确解为2.71828182845905
>>> HolonomicFunction(Dx - 1, x, 0, [1]).evalf(r) [1.10517083333333, 1.22140257085069, 1.34985849706254, 1.49182424008069, 1.64872063859684, 1.82211796209193, 2.01375162659678, 2.22553956329232, 2.45960141378007, 2.71827974413517]
欧拉方法
>>> HolonomicFunction(Dx - 1, x, 0, [1]).evalf(r, method='Euler') [1.1, 1.21, 1.331, 1.4641, 1.61051, 1.771561, 1.9487171, 2.14358881, 2.357947691, 2.5937424601]
我们还可以观察到,用龙格-库塔四阶法得到的数值比欧拉法要精确得多。
转换为超几何函数的线性组合#
- HolonomicFunction.to_hyper(as_list=False, _recur=None)[源代码]#
返回表示给定完整函数的超几何函数(或它们的线性组合)。
解释
Returns an answer of the form: \(a_1 \cdot x^{b_1} \cdot{hyper()} + a_2 \cdot x^{b_2} \cdot{hyper()} \dots\)
这是非常有用的,因为我们现在可以使用
hyperexpand
找到符号表达式/函数。实例
>>> from sympy.holonomic.holonomic import HolonomicFunction, DifferentialOperators >>> from sympy import ZZ >>> from sympy import symbols >>> x = symbols('x') >>> R, Dx = DifferentialOperators(ZZ.old_poly_ring(x),'Dx') >>> # sin(x) >>> HolonomicFunction(Dx**2 + 1, x, 0, [0, 1]).to_hyper() x*hyper((), (3/2,), -x**2/4) >>> # exp(x) >>> HolonomicFunction(Dx - 1, x, 0, [1]).to_hyper() hyper((), (), x)
转化为Meijer G函数的线性组合#
- HolonomicFunction.to_meijerg()[源代码]#
返回Meijer G函数的线性组合。
实例
>>> from sympy.holonomic import expr_to_holonomic >>> from sympy import sin, cos, hyperexpand, log, symbols >>> x = symbols('x') >>> hyperexpand(expr_to_holonomic(cos(x) + sin(x)).to_meijerg()) sin(x) + cos(x) >>> hyperexpand(expr_to_holonomic(log(x)).to_meijerg()).simplify() log(x)
参见
转换为表达式#
- HolonomicFunction.to_expr()[源代码]#
将完整函数转换回初等函数。
实例
>>> from sympy.holonomic.holonomic import HolonomicFunction, DifferentialOperators >>> from sympy import ZZ >>> from sympy import symbols, S >>> x = symbols('x') >>> R, Dx = DifferentialOperators(ZZ.old_poly_ring(x),'Dx') >>> HolonomicFunction(x**2*Dx**2 + x*Dx + (x**2 - 1), x, 0, [0, S(1)/2]).to_expr() besselj(1, x) >>> HolonomicFunction((1 + x)*Dx**3 + Dx**2, x, 0, [1, 1, 1]).to_expr() x*log(x + 1) + log(x + 1) + 1