Sympy 和 Scipy/Numpy

如何解决Sympy 和 Scipy/Numpy

我刚刚开始自学线性代数,并且正在尝试自学一些基本的 Python 模块。如果可以的话,我决定学习 Scipy 和 Numpy 的线性代数组件,以及一些 Sympy。

我遇到过如下练习:

matrix

我已经手动解决了第一步(我相信):

solution

我想使用 Numpy 和/或 Scipy 以及 Sympy 来解决这个问题。我今天花了一些时间试图找出使用什么结构来解决这个问题(显然是 Numpy 数组,然后是 Sympy 矩阵),但我不确定如何将其转换为三角形数组。我在求解方面看到了很多,但没有什么可以简单地产生上三角系统。

有人对使用其中一个或所有软件包执行此操作有任何建议吗?

解决方法

除上述之外,我还注意到 here 关于对矩阵进行基本运算。这样做似乎总是很尴尬,您可能会写一些东西来帮助您在学习如何使用矩阵时更自然地工作。下面是一个 do 例程,它可能是这样的帮手或如何编写自己的建议:

def do(self,s,i,j,k=1):
    """return self after doing row (`s` starts with 'r') or column (`s` starts with 'c') operation.

    Examples
    ========

    >>> from sympy import Matrix
    >>> Matrix.do = do
    >>> m = Matrix(3,3,list(range(9))); m
    Matrix([
    [0,1,2],[3,4,5],[6,7,8]])

    swap rows 0 and 1

    >>> m.do('rs',1)
    Matrix([
    [3,[0,8]])

    To row 0,add row 1 multiplied by 2

    >>> m.do('ra',2)
    Matrix([
    [6,9,12],8]])

    Multiply row 0 by 2

    >>> m.do('rm',2)
    Matrix([
    [0,2,4],8]])

    To operate on columns,replace the 'r' with 'c' in the
    examples above.

    If you want to keep working with the modified matrix
    you can either re-assign the output to the variable used for
    the original matrix (e.g. `m = m.do('rs',1)`) or make the
    modifications in place by appending an 'i' to `s`:

    >>> m.do('rsi',1)
    >>> m
    Matrix([
    [3,8]])
    >>> m.do('csi',1)
    >>> m
    Matrix([
    [4,[1,[7,6,8]])
    """
    rc,op = s.lower()[:2]
    assert op in 'sma'
    assert rc in 'rc'
    if len(s) > 2:
        # in place
        if rc == 'r':
            if op == 's':
                self.row_swap(i,j)
            elif op == 'm':
                self.row_op(i,lambda v,_: v*j)
            else:
                self.row_op(i,_: v + self[j,_]*k)
        else:
            if op == 's':
                self.col_swap(i,j)
            elif op == 'm':
                self.col_op(i,_: v*j)
            else:
                self.col_op(i,_: v + self[_,j]*k)
    else:
        f = getattr(self,'elementary_%s_op' % (
            'row' if rc=='r' else 'col'))
        if op == 's':
            return f('n<->m',None,j)
        elif op == 'a':
            return f('n->n+km',k,j)
        else:
            return f('n->kn',j)
,
In [731]: arr = np.array([[2,-3,3],[4,-5,7],[2,-1,5]])

您可以通过以下两个步骤完成:

减去第一行的倍数:

In [732]: arr -= arr[0,:]*np.array([0,1])[:,None]
In [733]: arr
Out[733]: 
array([[ 2,[ 0,1],2]])

减去第二行的倍数:

In [734]: arr -= arr[1,2])[:,None]
In [735]: arr
Out[735]: 
array([[ 2,0]])

但我不确定这对你学习线性代数有帮助。虽然我想出了如何去做,但这不是我们在使用 numpy 时通常会做的事情。

,

我不确定您到底想做什么,但这是您在 SymPy 中执行一些基本线性代数例程的方法:

In [1]: import sympy as sym

In [2]: M = sym.Matrix([[2,5]])

In [3]: M
Out[3]: 
⎡2  -3  0   3⎤
⎢            ⎥
⎢4  -5  1   7⎥
⎢            ⎥
⎣2  -1  -3  5⎦

In [4]: M.echelon_form()
Out[4]: 
⎡2  -3   0   3⎤
⎢             ⎥
⎢0  2    2   2⎥
⎢             ⎥
⎣0  0   -20  0⎦

In [5]: M.rref()
Out[5]: 
⎛⎡1  0  0  3⎤           ⎞
⎜⎢          ⎥           ⎟
⎜⎢0  1  0  1⎥,(0,2)⎟
⎜⎢          ⎥           ⎟
⎝⎣0  0  1  0⎦           ⎠

In [9]: sym.linsolve(M)
Out[9]: {(3,0)}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?