[英]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.