Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 矩阵值函数的泰勒展开式_Python_Sympy_Taylor Series - Fatal编程技术网

Python 矩阵值函数的泰勒展开式

Python 矩阵值函数的泰勒展开式,python,sympy,taylor-series,Python,Sympy,Taylor Series,我目前正试图象征性地表示矩阵指数函数的截断泰勒展开式。为此,我将使用Python和Symphy库 我的代码看起来像 import sympy as sy def taylor_exponential(x: sy.Symbol, order: int): res = sy.Integer(1) for k in range(1, order): res += (x ** k) / sy.factorial(k) return res # retur

我目前正试图象征性地表示矩阵指数函数的截断泰勒展开式。为此,我将使用Python和Symphy库

我的代码看起来像

import sympy as sy

def taylor_exponential(x: sy.Symbol, order: int):
    res = sy.Integer(1)
    for k in range(1, order):
        res += (x ** k) / sy.factorial(k)
    return res
    # return sy.series(sy.exp(x), x, n=order)

n = sy.symbols("n")
lambd = sy.symbols("lambda")
H0 = sy.MatrixSymbol("H_0", n, n)

print(taylor_exponential(H0 * lambd, 2))
在代码结束前引发了以下异常:

Traceback (most recent call last):
  File "mwe.py", line 14, in <module>
    H0 = sy.MatrixSymbol("H_0", n, n)
  File "mwe.py", line 6, in taylor_exponential
    for k in range(1, order):
  File "[path]/lib64/python3.6/site-packages/sympy/core/numbers.py", line 2088, in __add__
    return Rational.__add__(self, other)
# [ More lines of errors ]
  File "[path]/lib64/python3.6/site-packages/sympy/matrices/expressions/matexpr.py", line 95, in __radd__
    return MatAdd(other, self).doit()
  File "[path]/lib64/python3.6/site-packages/sympy/matrices/expressions/matadd.py", line 36, in __new__
    validate(*args)
  File "[path]/lib64/python3.6/site-packages/sympy/matrices/expressions/matadd.py", line 67, in validate
    raise TypeError("Mix of Matrix and Scalar symbols")
TypeError: Mix of Matrix and Scalar symbols

我的问题是:为什么第二个代码片段在我的代码片段抛出异常时工作?有什么方法可以实现我想要做的(表示lambda*H的泰勒展开式,其中lambda是标量符号,H是矩阵)?

可以将矩阵乘以标量,但不能将矩阵和标量相加:

In [1]: M = MatrixSymbol('M', 2, 2)                                                                                               

In [2]: M                                                                                                                         
Out[2]: M

In [3]: 2*M                                                                                                                       
Out[3]: 2⋅M

In [4]: 2 + M                                                                                                                     
---------------------------------------------------------------------------
TypeError: Mix of Matrix and Scalar symbols
您案例中的问题是
res
是一个整数。它应该是身份矩阵。我不知道如何创建符号维度的单位矩阵,所以我只使用符号
I

将sympy导入为sy
def taylor_指数(x:sy.符号,顺序:int):
res=sy.MatrixSymbol('I',*x.shape)
对于范围内的k(1,顺序):
res+=(x**k)/sy.阶乘(k)
返回res
#返回sy.系列(sy.exp(x),x,n=订单)
n=系统符号(“n”)
lambd=sy.符号(“lambda”)
H0=sy.MatrixSymbol(“H_0”,n,n)
打印(泰勒指数(H0*lambd,4))
输出:

lambda*H_0 + (1/2)*(lambda*H_0)**2 + (1/6)*(lambda*H_0)**3 + I
lambda*H_0 + (1/2)*(lambda*H_0)**2 + (1/6)*(lambda*H_0)**3 + I