繁体   English   中英

由于python中的sympy,如何解决简单的矩阵方程?

[英]How to solve easy matrix equations thanks to sympy in python?

你能告诉我为什么吗

import sympy as sym
import numpy as np

a=np.eye(3)*3
eq = sym.Eq(a*y,0)
sym.solve(eq, y)

Eror code is:
---------------------------------------------------------------------------
SympifyError                              Traceback (most recent call last)
<ipython-input-100-13919806323c> in <module>()
      4 a=np.eye(3)*3
      5 print(a)
----> 6 eq = sym.Eq(a*y,0)
      7 sym.solve(eq, y)

2 frames
/usr/local/lib/python3.7/dist-packages/sympy/core/sympify.py in sympify(a, locals, convert_xor, strict, rational, evaluate)
    432 
    433     if strict:
--> 434         raise SympifyError(a)
    435 
    436     if iterable(a):

SympifyError: SympifyError: array([[3.0*y, 0, 0],
       [0, 3.0*y, 0],
       [0, 0, 3.0*y]], dtype=object)

不工作,但

import sympy as sym
eq = sym.Eq(x**3 + 3*x**2 + 3*x + 1,0)
sym.solve(eq, x)

工作正常。 以及如何使用类似的代码求解简单的矩阵方程。

当然这两个代码都是我理解这个库的消费税

In [101]: a = np.eye(3)*3

In [103]: a*y
Out[103]: 
array([[3.0*y, 0, 0],
       [0, 3.0*y, 0],
       [0, 0, 3.0*y]], dtype=object)

它可以做成一个sympy.Array

In [104]: Array(a*y)
Out[104]: 
⎡3.0⋅y    0      0  ⎤
⎢                   ⎥
⎢  0    3.0⋅y    0  ⎥
⎢                   ⎥
⎣  0      0    3.0⋅y⎦

并且Eq有效,尽管它是不必要的,因为默认情况下表达式等于 0(在求解中):

In [105]: Eq(_, 0)
Out[105]: 
⎡3.0⋅y    0      0  ⎤    
⎢                   ⎥    
⎢  0    3.0⋅y    0  ⎥ = 0
⎢                   ⎥    
⎣  0      0    3.0⋅y⎦   

但是将solve应用于此会导致与我之前解决的错误相同的错误:

In [106]: solve(Array(a*y))
---------------------------------------------------------------------------
...

AttributeError: 'ImmutableDenseNDimArray' object has no attribute 'as_independent'

solve(a*y)产生相同的错误。

解决:AttributeError: 'ImmutableDenseNDimArray' 对象没有属性 'as_independent'

[105]数组与: x**3 + 3*x**2 + 3*x + 1 你为什么期望它起作用?

还有你为什么使用np.eye sympy有一只眼睛

In [128]: eq =  eye(3)*3*y
In [129]: eq
Out[129]: 
⎡3⋅y   0    0 ⎤
⎢             ⎥
⎢ 0   3⋅y   0 ⎥
⎢             ⎥
⎣ 0    0   3⋅y⎦
In [130]: Eq(eq,0)
Out[130]: False
In [131]: solve(eq,y)
Out[131]: {y: 0}

我对solve可以使用什么只有肤浅的了解,但type的差异很可能是关键:

In [132]: type(eq)
Out[132]: sympy.matrices.dense.MutableDenseMatrix
In [133]: type(Out[104])
Out[133]: sympy.tensor.array.dense_ndim_array.ImmutableDenseNDimArray
In [134]: Matrix(a*y)
Out[134]: 
⎡3.0⋅y    0      0  ⎤
⎢                   ⎥
⎢  0    3.0⋅y    0  ⎥
⎢                   ⎥
⎣  0      0    3.0⋅y⎦
In [135]: type(Matrix(a*y))
Out[135]: sympy.matrices.dense.MutableDenseMatrix

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM