Giter VIP home page Giter VIP logo

linearalgebramachine's Introduction

LinearAlgebraMachine

A learning tool for linear algebra

linearalgebramachine's People

Contributors

half-lang avatar hellomrgeorge avatar xcasey avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar

linearalgebramachine's Issues

线性方程模块

线性方程模块

class GESolver

GESolver可以对给定的矩阵实行高斯消元法,使之变为阶梯型

Source: lam/linequ/guasselimination.py


GESolver(mat: MutableDenseMatrix)

用给定的矩阵mat构造一个求解器

Parameter

  • mat: MutableDenseMatrix

properties

  • mat: MutableDenseMatrix 存储构造函数输入的参数mat
  • course: List[MutableDenseMatrix] 存储阶梯化矩阵时每一步初等变换后的矩阵

get_course()

无返回,但执行化矩阵阶梯型的操作,并将化阶梯型矩阵的过程存储在求解器对象的course字段中。


class LinequSolver

LinequSolver用高斯消元法解形如AX = b的线性方程组,无论A是否是方阵都可以求解

Source: lam/linequ/linequsolver.py


LinequSolver(mat, vec, evaluate=True)

用系数矩阵mat和常数项b构造一个求解器

Parameter

  • mat: MutableDenseMatrix 线性方程的系数矩阵A
  • vec: MutableDenseMatrix 线性方程的常数项b,注意必须是竖向量
  • evaluate: bool 默认为True,在构造完成后立即执行求解函数get_course(),当值为False时则不执行求解

properties

  • mat: MutableDenseMatrix 存储构造函数输入的参数mat
  • Ab: MutableDenseMatrix 系数矩阵和常数项合在一起构成的扩增矩阵
  • elimination_course: List[MutableDenseMatrix] 存储用高斯消元法阶梯化Ab的每一步初等变换后的矩阵
  • solveset: tuple, sympy.sets.sets.EmptySet 方程的解

当方程AX = b只有唯一解时,solveset不含未知量;有无穷多个解时,会出现自由未知量,自由未知量默认为希腊字母$\tau$;无解时,solveset是sympy.sets.sets.EmptySet类型,即它是空集


get_course()

无返回,如果构造对象时evaluate=False,则执行一次求解运算,并把结果和过程存储在对象的属性(properties)中。


解线性方程组格式示例

增广矩阵:C = (A, b)=
\left[\begin{matrix}1 & 1 & 1 & 1\1 & 1 & 1 & 1\2 & 1 & 3 & 2\end{matrix}\right]
\rightarrow
\left[\begin{matrix}1 & 1 & 1 & 1\0 & 0 & 0 & 0\2 & 1 & 3 & 2\end{matrix}\right] \
\rightarrow
\left[\begin{matrix}1 & 1 & 1 & 1\0 & 0 & 0 & 0\0 & -1 & 1 & 0\end{matrix}\right]
\rightarrow
\left[\begin{matrix}1 & 1 & 1 & 1\0 & -1 & 1 & 0\0 & 0 & 0 & 0\end{matrix}\right]
$$

$$ 解得: \left{\begin{matrix} x_1 = 1 - 2 \tau_{0} \\ x_2 = \tau_{0}\\ x_3 = \tau_{0} \end{matrix}\right. $$

线性空间模块 linspace

线性空间模块 linspace

def is_lincombination(group, vect, coef = [])

Source: lam/linspace/lincombination.py

判断vect是否是group的线性组合。


Parameter:

  • group: List
  • vect: Any
  • coef: List

Return: bool

如果vect是group的线性组合则返回True,否则返回False。vect的类型应该与group中单个元素的类型相同。

当需要获取线性组合的系数时,可以用coef存储线性组合的系数,以引用参数的形式返回。当存在多组系数可以线性表示vect时,coef只存储一组系数。

Note: 目前该方法只支持vect是MutableDenseMatrix类型

class MLIGSolver

Source: lam/linspace/MLIG.py

该类用于求解一个给定向量组的极大无关组


MLIGSolver(group: list)

Parameter:

  • group: List

用向量组group构造一个求解器,向量可以矩阵类型,多项式类型等。(暂时只支持矩阵类型)


properties (成员变量)

  • coefs 存储每次筛选时得出的线性组合的系数,具体可以参考下面排版样式的内容
  • MLIG 存储得出的极大无关组
  • position 存储极大无关组的向量在group中的位置

filtrate_MLIG()

无返回,计算给定向量组group的极大无关向量组,结果存储在成员变量中


get_course()

Return: MLIGSolver

调用filtrate_MLIG()后,返回对象本身,计算过程所需要的内容均可以从成员变量中得到。


排版样式

引用区块的内容无需显示到网页中(即本句话的区块样式)

筛选法求极大无关向量组

$a_1$ = $\left[\begin{matrix} 1\2\3\-1 \end{matrix}\right]$,
$a_2$ = $\left[\begin{matrix} 3\2\1\-1 \end{matrix}\right]$,
$a_3$ = $\left[\begin{matrix} 2\3\1\1 \end{matrix}\right]$,
$a_4$ = $\left[\begin{matrix} 2\2\2\-1 \end{matrix}\right]$,
$a_5$ = $\left[\begin{matrix} 5\5\2\0 \end{matrix}\right]$.

向量组$(a_1, a_2)$线性无关;

向量组$(a_1, a_2, a_3)$线性无关;

向量组$(a_1, a_2, a_3, a_4)$线性相关,因为$\frac{1}{2}a_1+\frac{1}{2}a_2 = a_4$

向量组$(a_1, a_2, a_3, a_5)$线性相关,因为$a_2+a_3 = a_5$

所以极大线性无关组是$(a_1, a_2, a_3)$

这个例子的coefs可以表示为[[], [], [1/2, 1/2, 0], [0, 1, 1]],空列表表示线性无关,非空列表则存储线性组合的系数

词法分析器需求分析21.9.27

读取用户输入文本

readtext -- 读取文本

Source code: lam/readtext/readtext.py

readtext.loadMatrix(text: str)

接收用户输入的字符串形式的矩阵数据text,返回text对应的sympy.matrices.dense.MutableDenseMatrix对象,即一个矩阵。

建议支持python的列表格式,如输入字符串'[[1,2,3],[4,5,6],[7,8,9]]',则返回一个3阶矩阵。

二次型后端

二次型后端

任务

  1. 为django框架创建一个新的app,命名为quad
  2. quad app可以对二次型进行规范化,它接收前端发送的矩阵数据(存储在json对象中的'matrix'键当中),并向前端返回包含计算过程的json文件。

提示

具体需要调用的接口,请参考issue二次型模块,该链接的文本中还包含一个规范化二次型的示例,返回的json文件要求包含示例中所有矩阵的latex文本信息

输出模块需求分析21.9.27

打印数学元素

latextext -- 修正sympy的latex模块功能

Source code: lam/readtext/latextext

latextext.latex(expr, **settings)

(已实现)

补足了不能sympy不能打印行列式定界符的功能。打印行列式时,可以使用latex(expr, mat_delim = '|')。expr代表你输入的矩阵对象。

网页上开放功能入口

请为网页HOME.html添加求解器功能入口,需要添加的入口包括:行列式展开,Gauss消元,筛选法求极大无关组,特征值和特征向量,矩阵对角化,Schmidt正交化,二次型化标准形。要求功能入口的网页元素占据网页中间位置,调整大小使得网页不要显得太空,并去掉该页面的求解器文本框(因为本页面不需要提供求解功能)。功能入口需要附加相应的url链接,比如行列式展开需要链接到之前编写的行列式网页的url,其他入口先留出url位置,之后再填写。

建议:功能入口可以用块级元素,里面再附加链接元素。

提示:HOME.html在templates文件夹,它是首页的网页文件,在启动服务器后可以通过地址IP:Port直接访问,比如127.0.0.1:8080

子程序需求分析2021.9.27

用于输出过程的子程序

该任务的源代码不建议放在lam包内,建议新建文件夹/process作为子程序的目录。

django框架的view模块将常常调用子程序,并且一般使用subprocess模块的run()函数或者Popen()函数调用,调用子程序将写入一个json文件,以便与前端交换数据。

slvdeter.py

读取用户输入的矩阵文本,并利用lam包的determinant模块求解该行列式,得到返回来的一个字典,并将字典中sympy对象变成latex文本,得到新的字典,再将字典作为数据写入json文件中。

可能要利用的函数

  1. lam.determinant.course.det_course()

解题网页需求

通用题目页面

该题目页面应当作为其他题目页面的模板网页,以便之后使用django框架的继承功能,该页面应配合首页的设计风格。
Source code: mysite/template/promblemTemp.html

网页元素

  1. 输入文本框,该文本框用于输入问题的条件,
  2. 显示答案的块级元素,该元素用于存放服务器返回的答案文本
  3. 以上元素的上下文都应存在一个文本区,用于注明一些提示信息,文本可暂时用任意字符填充
  4. 文本框旁边附带的一个“求解”按钮

二次型模块

二次型模块 quad

class QuadSolver

Source: lam/quad/quadratic.py


二次型模块求解器,用于求二次型的标准型

QuadSolver(mat: MutableDenseMatrix)

用矩阵对象构造一个求解器。矩阵必须是对称矩阵,否则不能化标准型

Parameter

  • mat: MutableDenseMatrix

get_standardFrom()

返回矩阵的标准型,即矩阵对应二次型的标准型。

Return: MutableDenseMatrix


get_course()

返回化矩阵的标准型的过程。

Return: List[Tuple[MutableDenseMatrix, MutableDenseMatrix]]

以下面的过程的为例,如果公式不能正常显示,请下载documentation文件夹中对应名字的文档查看。

$
A_0 = \left[\begin{matrix}1 & 3 & 4 & 6\3 & 2 & 3 & 0\4 & 3 & 7 & 8\6 & 0 & 8 & 10\end{matrix}\right]
$


$
T_1 = \left[\begin{matrix}1 & -3 & -4 & -6\0 & 1 & 0 & 0\0 & 0 & 1 & 0\0 & 0 & 0 & 1\end{matrix}\right],
$
配平方项得
$
A_1 = T_1'A_0T_1 = \left[\begin{matrix}1 & 0 & 0 & 0\0 & -7 & -9 & -18\0 & -9 & -9 & -16\0 & -18 & -16 & -26\end{matrix}\right]
$


$
T_2 = \left[\begin{matrix}1 & 0 & 0 & 0\0 & 1 & - \frac{9}{7} & - \frac{18}{7}\0 & 0 & 1 & 0\0 & 0 & 0 & 1\end{matrix}\right],
$
配平方项得
$
A_2 = T_2'A_1T_2 = \left[\begin{matrix}1 & 0 & 0 & 0\0 & -7 & 0 & 0\0 & 0 & \frac{18}{7} & \frac{50}{7}\0 & 0 & \frac{50}{7} & \frac{142}{7}\end{matrix}\right]
$


$
T_3 = \left[\begin{matrix}1 & 0 & 0 & 0\0 & 1 & 0 & 0\0 & 0 & 1 & - \frac{25}{9}\0 & 0 & 0 & 1\end{matrix}\right],
$
配平方项得
$
A_3 = T_3'A_2T_3 = \left[\begin{matrix}1 & 0 & 0 & 0\0 & -7 & 0 & 0\0 & 0 & \frac{18}{7} & 0\0 & 0 & 0 & \frac{4}{9}\end{matrix}\right]
$

get_course()将返回一个列表,列表中的每个元素都是元组,元组中有两个元素分别是变数矩阵T和结果矩阵A。按上面的例子,返回值可以表示为[($T_1$, $A_1$), ($T_2$, $A_2$), ($T_3$, $A_3$)]

行列式模块后端

行列式后端

为django框架创建一个新的app,命名为determinant

使用startapp命令创建。

实现处理http请求的功能

请将处理http请求的函数写入views文件,前端会将用户输入的矩阵数据通过POST或GET请求发送到后端,该数据是一个json对象(字典),它包含一个"matrix"键,该键的值是一个格式化的矩阵文本,该函数通过标准输入接口调用之前写好的程序slvdeter.py,并读取该程序生成的json文件数据作为一个json对象返回到前端。

特征值模块概述

特征值模块--eigen

class EigenSolver

Source code: lam/eigen/eigenvalue.py

特征值模块求解器,可以求解特征值,特征多项式,特征向量。

EigenSolver(mat)

将需要求解的矩阵作为参数输入,构造一个求解器。

Parameters

  • mat: sympy.MutableDenseMatrix

getEigenvalues()

返回矩阵的特征值。

Return: dict

返回值是一个字典,它是存储键值对(特征值:特征值重数),比如{2: 1, 1 - sqrt(3): 1, 1 + sqrt(3): 1}表示特征值2重数为1,特征值1 - sqrt(3)重数为1,特征值1 + sqrt(3)重数为1。

getCharpoly()

返回矩阵的特征多项式。

Return: sympy.PurePoly

返回值是PurePoly类,它是sympy模块多项式类的一个子类,使用它的对象方法as_expr()可将它转化为sympy.Expr类。

getEigenvectors()

返回矩阵的一组无关特征向量,每个向量对应一个特征值,如果特征值有n重则向量有n个。

Return: list[tuple]

返回值是元组列表,其中每个元组的格式(特征值, 重数, 特征向量列表)。

get_course()

返回描述求解矩阵特征向量过程所需的数学元素。

Return: dict

dict含有字段'matrix','charpoly','eigenvectors','matrix'是构造求解器时的矩阵,'charpoly'是getCharpoly()返回值,存储矩阵的特征多项式,'eigenvectors'是getEigenvectors()的返回值,存储矩阵的特征向量,特征值和重数。

@Property is_diagonalizable(reals_only=False)

判断矩阵是否可对角化

Parameter

  • reals_only: bool 当reals_only=False,将判断是否可复对角化,否则将只判断是否可实对角化

Return: bool

该方法是属性方法,将布尔值作为返回,应直接调用is_diagonalizable得到返回值。

class Diagnoalizer(EigenSolver)

Source code: lam/eigen/diagnoalize.py

对角化求解器,可以求对角化,继承自EigenSolver。

diagnoalize()

返回矩阵mat的对角矩阵以及过渡矩阵T,$(T^{-1}AT)$。

Return: list

返回值的第一个是过渡矩阵,第二个是对角矩阵。

不定阶矩阵模块

基本的不定阶矩阵

class mn_matrix

不定阶矩阵(即中间含省略号的矩阵)的基类,不建议直接用该类的构造方法

Source: lam/mnmatrix/mnmatrix.py


properties

  • m: 矩阵最后一行的序号
  • n: 矩阵最后一列的序号

get(x, y)

获取矩阵第x行,第y列的元素

Parameter

  • x: Expr, Number, Symbol
  • y: Expr, Number, Symbol

x, y是获取元素的坐标,行和列的序号以1开始计数,x,y可以是sympy中的Expr, Number, Symbol类。
如要获取倒数第一行,倒数第一列的元素,可以参考以下语句

mat = corner_matrix(tl, tr, bl, br, square=True)
element = mat.get(mat.m, mat.n)

以此类推,倒数第二行可以表示为mat.m-1


class corner_matrix(mn_matrix)

Source: lam/mnmatrix/cornermatrix.py

一个可定制的不定阶矩阵,该类适用于辅助生成latex代码,不需要严谨的数学逻辑。corner_matrix继承自mn_matrix,包含了mn_matrix所有的成员变量和方法。

在数学文章中,一般的不定阶矩阵只有四个角落的元素会显示,所以该类只开放了编辑矩阵四个角落元素的功能。以下面的矩阵为例,A,B,C,D四个位置的元素是可编辑的内容,A,B,C,D可以不单是一个元素,还可以视为整个矩阵的一个分块矩阵。

$$ \left[\begin{matrix} A & \cdots & B\\ \vdots & \ddots & \vdots\\ C & \dots & D \end{matrix}\right] $$


corner_matrix(tl, tr, bl, br, square=True)

用四个角落的分块矩阵构造一个不定阶矩阵

Parameter

  • tl: MutableDenseMatrix
  • tr: MutableDenseMatrix
  • bl: MutableDenseMatrix
  • br: MutableDenseMatrix
  • square: bool

tl, tr, bl, br分别代表一个矩阵的左上角,右上角,左下角,右下角的元素,即A,B,C,D四个分块矩阵,这四个必须是MutableDenseMatrix类,即便他们是一个纯粹的数字。square用于标志该矩阵是否是方阵,square=True时,不定阶矩阵将以方阵的形式生成。


properties

  • tl: 矩阵左上角可显示的分块
  • tr: 矩阵右上角可显示的分块
  • bl: 矩阵左下角可显示的分块
  • br: 矩阵右下角可显示的分块

继承自mn_matrix的成员变量不做赘述


get(x, y)

该方法继承自mn_matrix类,也没有修改父类的任何内容


线性运算

class scalar_mul_matrix(mn_matrix):

Source: lam/mnmatrix/mnmatrix.py

用于实现矩阵数乘的类,scalar_mul_matrix继承自mn_matrix,包含了mn_matrix所有的成员变量和方法,故之后重复的成员变量和方法不在叙述。


scalar_mul_matrix(mat, k):

构造矩阵mat和标量k相乘得到的矩阵对象

Parameter

  • mat: mn_matrix
  • k: Expr, Number, Symbol

class add_matrix(mn_matrix):

Source: lam/mnmatrix/mnmatrix.py

用于实现矩阵加法的类,add_matrix继承自mn_matrix,包含了mn_matrix所有的成员变量和方法。


add_matrix(ma, mb):

构造矩阵ma和矩阵mb相加得到的矩阵对象

Parameter

  • ma: mn_matrix
  • mb: mn_matrix

初等变换

class ele_row_tran_mn(mn_matrix):

Source: lam/mnmatrix/eletran.py

该类实现了矩阵初等行变换:交换m,n行

ele_row_tran_mn继承自mn_matrix,包含了mn_matrix所有的成员变量和方法。


ele_row_tran_mn(mat, m_ind, n_ind):

构造矩阵mat交换自身m_ind,n_ind行后得到的矩阵对象

Parameter

  • mat: mn_matrix
  • m_ind: Expr, Number, Symbol
  • n_ind: Expr, Number, Symbol

class ele_row_tran_km(mn_matrix):

Source: lam/mnmatrix/eletran.py

该类实现了矩阵初等行变换:m行乘k

ele_row_tran_km继承自mn_matrix,包含了mn_matrix所有的成员变量和方法。


ele_row_tran_km(mat, k, m_ind):

构造矩阵mat的第m_ind行乘k后得到的矩阵对象

Parameter

  • mat: mn_matrix
  • k: Expr, Number, Symbol
  • m_ind: Expr, Number, Symbol

class ele_row_tran_kmn(mn_matrix):

Source: lam/mnmatrix/eletran.py

该类实现了矩阵初等行变换:m行乘k

ele_row_tran_kmn继承自mn_matrix,包含了mn_matrix所有的成员变量和方法。


ele_row_tran_kmn(mat, k, m_ind, n_ind):

构造矩阵mat的第m_ind行乘k后加到n_ind行得到的矩阵对象

Parameter

  • mat: mn_matrix
  • k: Expr, Number, Symbol
  • m_ind: Expr, Number, Symbol
  • n_ind: Expr, Number, Symbol

同样的,也有对应的初等列变换,它们分别是ele_row_tran_mn, ele_row_tran_km, ele_row_tran_kmn这三个类,用法和行变换相同。


单例的矩阵

class id_matrix(mn_matrix)

Source: lam/mnmatrix/lammatrix

定义了单位矩阵,继承自mn_matrix,用于调试和后续拓展。


id_matrix():

构造一个单位矩阵。


class tridiagonal_matrix

Source: lam/mnmatrix/lammatrix

定义了三对角矩阵,即主对角线和次对角线不为0的对称矩阵。


tridiagonal_matrix(diag, diag2nd):

构造一个三对角矩阵。diag, diag2nd分别指主对角,次对角上的元素

Parameter

  • diag: Expr, Number, Symbol
  • diag2nd: Expr, Number, Symbol

class circ_matrix

Source: lam/mnmatrix/lammatrix

定义了一个典型的循环矩阵,即1到n的序列在每行不断循环的矩阵。


circ_matrix():

构造一个典型的循环矩阵。


特征值模块后端

特征值模块后端

为django框架创建eigen的app,并实现以下功能

  1. 接收前端发送的矩阵数据,向前端返回矩阵的特征多项式 getCharpoly()
  2. 接收前端发送的矩阵数据,向前端返回矩阵的特征值 getEigenvalues()
  3. 接收前端发送的矩阵数据,向前端返回矩阵的特征向量 getEigenvectors()
  4. 接收前端发送的矩阵数据,向前端返回矩阵的特征向量及其求解过程 getEigenvectorsCourse()

注1: 前端发送的矩阵数据存储在json对象中的'matrix'键当中,返回时也请返回一个json对象,json对象包含必要latex文本形式的数学元素,其键值对可能有多个,请自行斟酌名字,并在issue上或者文档中附带必要的说明。

注2:实现过程中可能用到的方法已备注在每一条的末尾,详情查看特征值模块概述

注3: 虽然getEigenvectorsCourse()已经给出了过程中必要的数学元素,但是部分过程还需进一步补全,请参照下面的图示。需要补充的矩阵数据可以简单地用的sympy的加减和代入实现。没有框出的数学元素和已框出的是类似的,如倒数第二行的矩阵是需要补充的。补充完这些矩阵后,请一并作为第四条功能的返回。

图示

矩阵代数模块

矩阵求逆

class InverseSolver

Source code: lam/inverse/inverse.py

逆矩阵的求解器,可以用Gauss-Jordan消元法求逆矩阵,以及输出消元过程

InverseSolver(mat)

将需要求解的矩阵作为参数输入,构造一个求解器。

Parameters

  • mat: MutableDenseMatrix

property

  • course: List[MutableDenseMatrix] 存储消元的过程
  • mat: MutableDenseMatrix 存储输入的原始矩阵mat
  • is_Invertible: bool 标识mat是否可逆

getCourse(self) -> List[MutableDenseMatrix]

获取用Gauss-Jordan消元法对mat求逆的过程,返回一个列表。

getInverse(self) -> MutableDenseMatrix

直接返回mat的逆矩阵。

特征值模块前端

特征值模块前端

  1. 创建特征值和特征向量入口对应的网页,名字和相应url自拟,版式同行列式展开的网页一致。
  2. 请参照issue:特征值模块后端中图片所提供的格式,为答案显示区的排版格式编写相应的JavaScript脚本。

提示

你可以通过向地址{% url 'eigenCourse' %}(django中有提到这个形式的url)发送矩阵文本,从而得到后端返回的数据,对数据的内容如有疑问,可以询问 @half-lang

特征值模块后端的图片示例中,前三行是在求解特征多项式的根,后面每两行求解一个根对应的特征向量。

行列式模块前端

行列式模块前端

前端发送用户输入的矩阵数据

用户在问题输入框输入文本,按下相应按钮后,前端可以通过表单或者ajax技术以GET或POST请求的形式,实现对数据的发送,发送的数据应该是一个json对象,它包含一个"matrix"字段,这个字段用于存储用户输入的文本。相关的url链接可以暂时空置,待后端定义好后填上。

前端能够显示答案

前端接收到后端发送的json对象后,将该对象解包,对象的元素只有字符串数据,它满足latex语法,可以被MathJax组件转换为数学文本。将解包后的元素放到答案显示区,适当排版使得有所间隔即可,之后看效果再做调整。

LaTeX语法分析器

LaTeX语法分析器

Source: latexparser

请在根目录新建latexparser库以完成任务,不要引用lam库的功能防止交叉引用。

需求概述


latex语法分析器需要提供一个接口,接收str类型的参数,返回sympy.MutableDenseMatrix类型的对象。因为前端发送的数据到目前为止总是矩阵形式的文本,如

[[1, 2, 3], [3.3, 5.2, 1.3], [7, 11, 32]]

所以需要矩阵形式的返回值,故建议使用sympy.MutableDenseMatrix作为返回值。返回的矩阵的每个元素都应属于sympy库当中的类型,这些元素对应着输入的文本参数的每个单元。对于之前举的例子,它每个单元对应的类型就是(省略sympy前缀)

[[Integer, Integer, Integer], [Float, Float, Float], [Integer, Integer, Integer]]

这个例子,并没有涉及任何latex命令,详细的每个数学元素与sympy类型对应关系可以参考后面的类型对照表,注意latex命令的反斜杠字符,如\sqrt,请不要变成转义字符。

此外除了一般形式的矩阵文本,latex语法分析器也应支持解析latex语法的矩阵文本(\left[\begin{matrix} ... \end{matrix}\right]),仍然用第一个例子,它的latex语法是

\left[\begin{matrix} 1 & 2 & 3 \\3.3 & 5.2 & 1.3 \\7 & 11 & 32 \end{matrix}\right]

如果前端发送的latex矩阵形式的文本,那么接口也应返回相应的MutableDenseMatrix对象。

类型对照表


类型一栏均省略了sympy的前缀,具体内容请查询sympy文档

数学元素 示例 类型 备注
整数 10 Integer 纯数字文本
小数 10.1 Float 纯数字文本
拉丁字母 a Symbol 不要用Symbol的构造函数创建,而是用sympy.abc的内建对象创建,它已经内置了所有拉丁和希腊字母
希腊字母 \epsilon Symbol 用sympy.abc的内建对象创建,示例对应的内建对象是sympy.abc.epsilon
加法 a+b Add 加法需要兼容字母运算
减法 a-b Add a减b视为加-b
乘法 ab Mul 乘法需要兼容字母运算
乘方 a^{b} Pow 乘方需要兼容字母运算, 当指数只有一个字符可以省略大括号,如a^b
分式 \frac{a}{b} Mul a除以b视为乘b^{-1},故用Mul类型
根式 \sqrt{a} Pow 开方视为1/2次幂

除了以上提到的内容,显然还有对数,三角函数等数学元素,我们分阶段实现,这些内容可以放到后面拓展。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.