Equations Equality test (in C++ or with Unix tools) (algebra functions isomorphism) [closed]

I am looking for C++ open-source library (or just open-source Unix tool) to do: Equality test on Equations .

Equations can be build during runtime as AST Trees, string or other format.

Equations will mostly be simple algebra ones, with some assumptions about unknown functions. Domain, will be integer arithmetic (no floating point issues, as related issues are well known - Thanks @hardmath for stressing it out, I've assumed it's known).

Example: Input might contain function phi, with assumptions about it (most cases) phi(x,y)=phi(y,x) and try to solve :

equality_test( phi( (a+1)*(a+1) , a+b ) = phi( b+a, a*a + 2a + 1 )

It can be fuzzy or any equality test - what I mean is that, it does not have to always succeed (It may return "false" even if equations are equal).

If there would be problem with supporting assumptions like above about phi function, I can handle this, so just simple linear algebra equations equality testers are welcome as well.

  • Could you recommend some C/C++ programming libraries or Unix tools ? (open-source)
  • If possible, could you attach some example how such equality test, might look like in given library/tool ?

P.S. If such equality_test could (in case of success) return isomorphism - (what I mean, a kind of "mapping") - between two given equations, would be highly welcome. But tools without such capabilities are highly welcome as well.

P.S. By "fuzzy tester" I mean that in internals equation solver will be "fuzzy" in terms of looking for "isomorphism" of two functions, not in terms of testing against random inputs - I could implement this, for sure, but I try to find something with better precision.

P.P.S. There is another issue, why I need better performance solution, than brute-force "all inputs testing". Above equation is simplyfied form of my internal problem, where I do not have mapping between variables in equations. That is, I have eq1=phi( (a+1)*(a+1) , a+b ) and eq2=phi( l+k, k*k + 2k + 1 ) , and I have to find out that a==k and b==l. But this sub-problem I can handle with "brute-force" approach (even asymptotic complexity of this approach), case there is just a few variables, let it be 8. So I would need to do this equation_test for each possible mapping. If there is a tool that that whole job, I would be highly thankful, and could contribute to such project. But I don't require such functionality, simply equation_test() will be enough, I can handle rest easily.

To sum it up:

  • equality_test() is only one of many subproblems I have to solve, so computational complexity matters.
  • it does not have to be 100% reliable, but higher likelihood, than just testing equations with a few random inputs and variable mapping is highly welcome :).
  • output of "yes" or "no" (all additional information might be useful but in future, at this stage I need "Yes"/"No")


Your topic is one of automated theorem proving, for which a number of free/open source software packages have been developed. Many of these are meant for proof verification, but what you ask for is proof searching.

Dealing with the abstract topic of equations would be the theories mathematicians call varieties. These theories have nice properties with respect to the existence and regularity of their models.

It is possible you have in mind equations that deal specifically with real numbers or other system, which would add some axioms to the theory in which a proof is sought.

If in principle an algorithm exists to determine whether or not a logical statement can be proven in a theory, that theory is called decidable. For example, the theory of real closed fields is decidable, as Tarski showed in 1951. However a practical implementation of such an algorithm is lacking and perhaps impossible.

Here are a few open source packages that might be worth learning something about to guide your design and development:

Tac: A generic and adaptable interactive theorem prover

Prover9: An automated theorem prover for first-order and equational logic

E(quational) Theorem Prover

I am not sure for any library but how about you do it yourself by generating a random set of inputs for your equation and substituting it in both equations which have to be compared. This would give you a almost correct result given you generate considerable amount of random data.

Edit: Also you can try http://www.wolframalpha.com/


 (x+1)*(y+1) equals x+y+xy+2


 (x+1)*(y+1) equals x+y+xy+1

I think you can get pretty far with using Reverse Polish Notation.

  1. Write out your equation using RPN

  2. Apply transformations to bring all expressions to the same form, e.g. *A+BC --> +*AB*AC (which is the RPN equivalent of A*(B+C) --> A*B+A*C), ^*BCA --> *^BA^CA (i.e. (B*C)^A --> B^A * C^A)

  3. "Sort" the arguments of symmetric binary operator so that "lighter" operations appear on one side (e.g. A*B + C --> C + A*B)

  4. You will have problem with dummy variables, for example sum indices. There is no other way, I think, but to try every combination of matching them on both sides of the equation.

In general, the problem is very complicated.

You can try a hack, though: use an optimizing compiler (C,Fortran) and compile both sides of the equation to optimized machine code and compare the outputs. It may work, or may not.

Opensource (GPL) project Maxima has tool simmilar to Wolfram Alpha's equals tool :

(a+b+c)+(x+y)**2 equals (x**2+b+c+a+2*x*y+y**2)

Which is is(equal()), that solves formulas :

(%i1) is(equal( (a+b+c)+(x+y)**2 , (x**2+b+c+a+2*x*y+y**2) ));
(%o1)                                true

For this purpose, it uses rational simplifier - ratsimp, in order to simplify the difference of two equations. When difference of two equations is simplified to zero, we know they are equal for all possible values:

(%i2) ratsimp( ((a+b+c)+(x+y)**2) - ((x**2+b+c+a+2*x*y+y**2)) );
(%o2)                                  0

This answer, just shows direction (like other answers). If you know about something similar, that can be used as a part of C++ Unix program - programming library ? Good C/C++ binding similar tool to this. Please, post new answer.

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

  • C ++中的线性方程组? [关闭](System of linear equations in C++? [closed])
    问题 从目前的情况来看,这个问题不适合我们的问答形式。 我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意测验或进一步的讨论。 如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 我需要在程序中求解线性方程组。 是否有一个简单的C ++线性代数库,最好只包含几个头文件? 我一直在寻找将近一个小时,发现的所有东西都需要弄乱Linux,在MinGW中编译DLL等,等等。(我正在使用Visual Studio2008。) 回答1 我认为Eigen是您要找的东西。 http://eigen.tuxfamily.org/index.php?title=Main_Page 它是仅标头的库,可以在许多编译器上进行编译。 它甚至使用奇异的汇编来加快数学速度。 这是展示线性求解器API的页面。 http://eigen.tuxfamily.org/dox-2.0/TutorialAdvancedLinearAlgebra.html 它有一些带有简单api的求解器。 回答2 Boost具有一些基本的线性代数内容。 回答3 您可以使用LAPACK的C ++绑定。 一个快速的谷歌打开了这个链接到Windows库的一些LAPACK。 但是,根据您系统的大小,这可能会显得有些过时。 回答4 我是Armadillo的忠实拥护者
  • 计量经济软件'全'推荐,囊括全世界主要的应用软件,包括综合性和专门性的
    计量经济软件全推荐,里面囊括了全世界主要的应用软件。计量经济圈认为没有最好,只有最适合自己胃口的。真正的大咖很多时候只用很简单易学的软件,但做出来的成果却成为后来者的标杆。文末有你意想不到的收获。 以下软件有的是综合性的,有的是专门性的,计量经济圈推荐那些开放性的、使用者多的、简单易学的计量软件,比如Amos, Eviews, Rats, Stata, Spss, R等。计量经济学的背后主要是概率论和统计回归,把这些看起来学术性很强的概念想成生活哲学,那么我们会发现数学之美,凡是真正的“大家作品”往往看起来简单明了。 Econometric software package information Amos This package is designed for estimating linear structural equation models. It is particularly well suited for models with latent variables or measurement error components. Bootstrap methods are provided for the computation of standard errors. While this is not a general purpose econometrics
  • 在MATLAB中绘制隐式代数方程(Plotting Implicit Algebraic equations in MATLAB)
    问题 我希望在MATLAB中绘制隐式函数。 像x ^ 3 + xy + y ^ 2 = 36一样,不能将方程变成简单的参数形式。 有没有简单的方法? 回答1 这里有几个选择... 使用ezplot(或在较新版本中建议使用fplot): 最简单的解决方案是使用ezplot函数: ezplot('x.^3 + x.*y + y.^2 - 36', [-10 10 -10 10]); 这为您提供了以下情节: 使用轮廓: 另一种选择是生成一组点,您将在其中评估函数f(x,y) = x^3 + x*y + y^2 ,然后使用函数轮廓绘制其中f(x,y)轮廓线等于36: [x, y] = meshgrid(-10:0.1:10); % Create a mesh of x and y points f = x.^3+x.*y+y.^2; % Evaluate f at those points contour(x, y, f, [36 36], 'b'); % Generate the contour plot xlabel('x'); % Add an x label ylabel('y'); % Add a y label title('x^3 + x y + y^2 = 36'); % Add a title 上面的内容将为您提供与ezplot生成的图几乎相同的图: 回答2
  • 算法中如何使用线性代数?(How is linear algebra used in algorithms?)
    问题 我的几个同行都提到“线性代数”在学习算法时非常重要。 我研究了各种算法并参加了一些线性代数课程,但我没有看到它们之间的联系。 那么线性代数在算法中是如何使用的呢? 例如,使用图形的连接矩阵可以做什么有趣的事情? 回答1 三个具体例子: 线性代数是现代 3d 图形的基础。 这与你在学校学到的东西本质上是一样的。 数据保存在投影在 2d 表面的 3d 空间中,这就是您在屏幕上看到的。 大多数搜索引擎都基于线性代数。 这个想法是将每个文档表示为超空间中的向量,并查看向量在这个空间中如何相互关联。 这被 lucene 项目等使用。 参见 VSM。 一些现代压缩算法(例如 ogg vorbis 格式使用的算法)基于线性代数,或者更具体地说是一种称为矢量量化的方法。 基本上归结为这样一个事实,即线性代数在处理多个变量时是一种非常强大的方法,并且在设计算法时将其用作理论基础有巨大的好处。 在许多情况下,这个基础并不像你想象的那么明显,但这并不意味着它不存在。 您很可能已经实现了如果没有 linalg 就很难推导出来的算法。 回答2 密码学家可能会告诉您,在学习算法时,掌握数论非常重要。 他是对的——适合他的特定领域。 统计学也有它的用处——跳过列表、哈希表等等。图论的用处就更明显了。 线性代数和算法之间没有内在的联系; 数学和算法之间有着内在的联系。 线性代数是一个有很多应用的领域
  • 线性代数英语词汇大集合_艾孜尔江撰
    A adjont(adjugate) of matrix A A 的伴随矩阵 augmented matrix A 的增广矩阵 B block diagonal matrix 块对角矩阵 block matrix 块矩阵 basic solution set 基础解系 C Cauchy-Schwarz inequality 柯西 - 许瓦兹不等式 characteristic equation 特征方程 characteristic polynomial 特征多项式 coffcient matrix 系数矩阵 cofactor 代数余子式 cofactor expansion 代数余子式展开 column vector 列向量 commuting matrices 交换矩阵 consistent linear system 相容线性方程组 Cramer’s rule 克莱姆法则 Cross- product term 交叉项 D Determinant 行列式 Diagonal entries 对角元素 Diagonal matrix 对角矩阵 Dimension of a vector space V 向量空间 V 的维数 E echelon matrix 梯形矩阵 eigenspace 特征空间 eigenvalue 特征值 eigenvector 特征向量
  • 用Python解决数学方程式的最简单方法(Simplest way to solve mathematical equations in Python)
    问题 我想求解一组线性或有时是二次方程式。 我没有特定的问题,但是通常,我经常遇到这种情况。 使用Wolframalpha.com(相当于Mathematica的网络版)来解决问题很简单。 但这不能提供iPython shell的舒适性和便利性。 是否有一个简单的库可用于处理来自python shell的线性和二次方程式? 就个人而言,我发现使用Casio 991 MS科学计算器极为方便。 我知道如何设置变量,求解方程式以及做很多事情。 我希望最好在ipython shell中使用这样的工具。 没发现任何东西我感到很惊讶。 圣人没有给我足够的印象。 也许我缺少了一些东西。 回答1 sympy正是您要找的东西。 回答2 您认为最好的答案是无法接受的。 您的问题是“我想要一个可以在Python中使用的免费计算机代数系统”。 答案是“ SAGE做到了”。 您是否看过最大值/骨质疏松症? SAGE为此提供了绑定,这是功能更强大的免费版本之一。 http://maxima.sourceforge.net/ 回答3 这是使用Python(通过Sage)解决原始问题的方法。 这从根本上澄清了保罗·麦克米兰(Paul McMillan)的上述言论。 sage: a,b,c = var('a,b,c') sage: solve([a+b+c==1000, a^2+b^2==c^2], a,b,c)
  • C ++的稀疏矩阵库(sparse matrix library for C++ [closed])
    问题 关闭。 此问题不符合堆栈溢出准则。 它当前不接受答案。 想要改善这个问题吗? 更新问题,使它成为Stack Overflow的主题。 2年前关闭。 改善这个问题 是否有可以执行以下操作的稀疏矩阵库: 求解线性代数方程支持矩阵-矩阵/数乘法/加法/减法,矩阵转置,获取矩阵的行/列等操作矩阵大小可以是40k * 40k或更大,例如250k * 250k 快速地可以在Windows中使用 有人可以为我推荐一些图书馆吗? 如果您推荐,请告诉我它的优缺点,以及推荐它的原因。 顺便说一句,我已经在互联网上搜索了许多稀疏矩阵库并对其进行了测试。 我发现它们每个仅支持很少的运算(其中许多只能求解线性代数方程式并执行矩阵矢量乘法)。最后,我找到了一个名为SparseLib ++的运算符。 它也不支持很多操作,因此我添加了很多基本的矩阵操作。 现在可以了。 但是,我只是听说SparseLib ++太旧了而且不够快。 但是我的项目基于SparseLib ++,我在SparseLib ++上花费了很多工作。 所以我想知道是否尝试另一个稀疏矩阵库。 回答1 http://www.mcs.anl.gov/petsc/具有大量内置的线性代数,并且在数据变大时可以在整个群集上分布矩阵。 遇到技术问题时,https://scicomp.stackexchange.com/上还会有活跃的关注者。
  • 可构造点的坐标可以精确表示吗?(Can coordinates of constructable points be represented exactly?)
    问题 我想编写一个程序,让用户可以像使用直尺和指南针一样绘制点、线和圆。 那么我想能够回答这个问题,“这三点共线吗?” 为了正确回答,我需要在计算点数时避免舍入错误。 这可能吗? 我如何表示内存中的点? (我查看了一些不寻常的数字库,但我没有找到任何声称提供精确算术和精确比较的东西,它们保证终止。) 回答1 是的。 我强烈推荐建筑介绍,这是一个很好的基础指南。 基本上,您需要能够使用可构造的数字进行计算 - 有理数或 a + b sqrt(c) 形式的数字,其中 a,b,c 是先前创建的(请参阅该 PDF 的第 6 页)。 这可以通过代数数据类型来完成(例如data C = Rational Integer Integer | Root CCC Haskell 中的data C = Rational Integer Integer | Root CCC ,其中 Root abc = a + b sqrt(c))。 但是,我不知道如何使用该表示进行测试。 两种可能的方法是: 可构造数是代数数的子集,因此您可以使用代数数。 所有的代数数都可以用多项式来表示,它们的根是多项式。 这些操作是可计算的,所以如果你用多项式 p 表示一个数 a,用多项式 q 表示 b (p(a) = q(b) = 0),那么就有可能找到一个多项式 r,使得 r(a+b ) = 0。这是在一些 CAS 中完成的
  • 如何在Python中求解方程式? [关闭](How can I solve equations in Python? [closed])
    问题 关门了。 这个问题需要更加集中。 它当前不接受答案。 想要改善这个问题吗? 更新问题,使其仅通过编辑此帖子即可将重点放在一个问题上。 5年前关闭。 改善这个问题 假设我有一个方程: 2x + 6 = 12 使用代数,我们可以看到x = 3 。 如何使用Python编写可以解决x ? 我是编程的新手,我查看了eval()和exec()但我不知道如何使它们执行我想要的操作。 我不想使用外部库(例如SAGE),我只想在纯Python中执行此操作。 回答1 SymPy呢? 他们的求解器看起来像您所需要的。 如果您想自己构建库,请查看它们的源代码… 回答2 有两种方法可以解决此问题:数字方式和符号方式。 要用数字方式解决它,您必须首先将其编码为“可运行”功能-插入一个值,取出一个值。 例如, def my_function(x): return 2*x + 6 解析一个字符串来自动创建这样的函数是很有可能的。 假设您将2x + 6解析为一个列表[6, 2] (其中列表索引对应于x的幂-因此6 * x ^ 0 + 2 * x ^ 1)。 然后: def makePoly(arr): def fn(x): return sum(c*x**p for p,c in enumerate(arr)) return fn my_func = makePoly([6, 2]) my_func(3)
  • matlab工具箱
    matlab“最小系统”安装 组件Valuematlab必备安装simulink不用说simscape电力电子simscape driveline汽车动力总成建模工具simscape fluids液压antenna toolboxAntenna Toolbox™ 提供了设计、分析天线单元和阵列并使其可视化的功能和应用程序。您可以使用具有参数化几何结构的预定义单元或任意平面单元设计独立的天线并建立天线阵列。Data Acquisition Toolbox提供应用和功能,用于配置数据采集硬件,将数据读入MATLAB ®和Simulink ®,和将数据写入DAQ模拟和数字输出通道。该工具箱支持多种数据采集硬件,包括USB,PCI,PCI Express总线®,PXI ®,和PXI Express ®设备,从美国国家仪器公司®和其他供应商。Fixed-Point Designer™提供了丰富的数据类型和工具,用于在嵌入式硬件上优化和实现定点和浮点算法。它包括定点和浮点数据类型以及特定于目标的数值设置。使用 Fixed-Point Designer,您可以执行特定于目标的定点位真仿真。然后,您可以事先测试和调试溢出及精度损失等量化效应,之后再在硬件上实现设计Filter Design HDL Coder用于生成可合成、可移植的 VHDL® 和 Verilog® 代码,以实现在 FPGA 或
  • sparse matrix library for C++ [closed]
    Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers. Want to improve this question? Update the question so it's on-topic for Stack Overflow. Closed 2 years ago. Improve this question Is there any sparse matrix library that can do these: solve linear algebraic equations support operations like matrix-matrix/number multiplication/addition/subtraction,matrix transposition, get a row/column of a matrix,and so on matrix size could be 40k*40k or bigger,like 250k*250k fast can be used in Windows Can someone recommend some libraries for me? If you
  • 纯C中的符号计算库(Symbolic Computation Library in pure C)
    问题 是否存在用纯C语言编写的符号计算库? 像以符号形式处理数学方程式一样的符号计算。 我知道这里有Mathematica和Sympy 。 但是,我有兴趣在高性能的纯C实现中创建符号计算库,以绑定到脚本语言,尤其是Ruby。 似乎他们需要这样的符号数学库。 随着时间的流逝,理想情况下,该库可以以与libgit2类似的方式构建,在该库中,有一个项目的中央C实现,并且为了创建与其他语言的绑定而分支了各种实现? 回答1 您是否看过GAP? 从其网站: GAP是一个用于计算离散代数的系统,特别着重于计算群论。 GAP提供了一种编程语言,数千种实现用GAP语言编写的代数算法的函数的库以及代数对象的大型数据库。 另请参见数学功能的概述和说明。 GAP用于研究和教学,以研究组及其表示,环,向量空间,代数,组合结构等。 该系统(包括源代码)是免费分发的。 您可以学习并轻松修改或扩展它以适合您的特殊用途。 根据其Wikipedia页面,GAP是用C实现的,并且源代码是免费提供的。 回答2 数学是用C实现的,可能适合您的目的。 Mathomatic™是一款可移植的命令行教育型CAS和计算器软件,完全使用C编程语言编写。 它是免费的开源软件(FOSS),根据GNU通用公共许可协议(LGPL 2.1版)发行,自1986年以来一直在持续开发。该软件可以同时象征性地求解,简化,组合和比较代数方程式
  • 如何使用4D转子(How to use 4d rotors)
    问题 我正在尝试创建一个类似于Miegakure的4D环境。 我在理解如何表示旋转方面遇到麻烦。 Miegakure的创造者写了这篇小文章,解释说他为4d转子做了一门课。 http://marctenbosch.com/news/2011/05/4d-rotations-and-the-4d-equivalent-of-quaternions/ 如何实现此类的功能? 特别是旋转矢量和其他转子并求逆的函数。 我将不胜感激一些伪代码示例。 非常感谢任何愿意回答的人。 回答1 解决围绕任意矢量的旋转将使您在4D中疯狂。 是的,那里有方程式,例如用于将3D旋转扩展到4D的Euler-Rodrigues公式,但是所有这些方程式都需要求解方程组,在4D中它的使用对于我们来说确实不直观。 我使用的是平行于平面的旋转(类似于3D中围绕主轴的旋转)。在4D中,有6个XY,YZ,ZX,XW,YW,ZW所以只需创建旋转矩阵(类似于3D )。 我对4D使用5x5均匀变换矩阵,因此旋转如下所示: xy: ( c , s ,0.0,0.0,0.0) (-s , c ,0.0,0.0,0.0) (0.0,0.0,1.0,0.0,0.0) (0.0,0.0,0.0,1.0,0.0) (0.0,0.0,0.0,0.0,1.0) yz: (1.0,0.0,0.0,0.0,0.0) (0.0, c , s ,0.0,0
  • How can I improve performance via a high-level approach when implementing long equations in C++
    I am developing some engineering simulations. This involves implementing some long equations such as this equation to calculate stress in a rubber like material: T = ( mu * ( pow(l1 * pow(l1 * l2 * l3, -0.1e1 / 0.3e1), a) * a * ( pow(l1 * l2 * l3, -0.1e1 / 0.3e1) - l1 * l2 * l3 * pow(l1 * l2 * l3, -0.4e1 / 0.3e1) / 0.3e1 ) * pow(l1 * l2 * l3, 0.1e1 / 0.3e1) / l1 - pow(l2 * pow(l1 * l2 * l3, -0.1e1 / 0.3e1), a) * a / l1 / 0.3e1 - pow(l3 * pow(l1 * l2 * l3, -0.1e1 / 0.3e1), a) * a / l1 / 0.3e1 ) / a + K * (l1 * l2 * l3 - 0.1e1) * l2 * l3 ) * N1 / l2 / l3 + ( mu * ( - pow(l1 * pow(l1 * l2 * l3,
  • Python 初步了解科学计算和数据分析
    推荐自己的专栏:分享一些Python案例,将所学用出来随着Python语言生态环境的完善,众多科学计算和数据分析库(例如NumPy、SciPy、Pandas、Matplotlib、IPython等),使得Python成为科学计算和数据分析的首选语言 Python科学计算和数据分析库简介 科学计算和数据分析库: NumPy NumPy是Python数据处理的底层库,是高性能科学计算和数据分析的基础,许多其它科学计算库都基于NumPy库SciPy SciPy是Python解决科学计算中常见问题的工具集团,其不同子模块对应于不同的应用,包括:线性代数、插值、积分、最优化、图像处理、统计等等Pandas Pandas是Python的高级数据分析工具库Matplotlib Matplotlib是Python最流行的绘图程序库。Seaborn和Prettyplotlib是在Matplotlib的基础上改进功能的绘图程序库SciKit SciKit程序库为SciPy、NumPy和Python提供了专业化的扩展。例如,scikit-learn是用于机器学习和数据挖掘的库IPython IPython是基于Python Shell的交互式解释器,功能更加强大,被广泛应用于交互式科学计算 使用IPython Notebook进行科学计算 第一种安装方法
  • C++中的符号计算(symbolic computation in C++)
    问题 我需要在 C++ 中进行分析集成。 例如,我应该整合这样的表达式: exp[I(xy)] , I是一个虚数。 我怎样才能在 C++ 中做到这一点? 我试过 GiNaC,但它只能对多项式进行积分。 我也尝试过 SymbolicC++。 它可以集成sine 、 cosine或exp(x)和ln(x)等ln(x) ,但它不是很强大。 例如,它不能对x*ln(x)进行积分,而x*ln(x)可以通过使用 Mathematica 或分部积分很容易获得。 是否有任何其他工具或库可以进行符号计算,例如 C++ 中的分析集成? 回答1 如果您需要进行符号集成,那么您可能不会比在 mathematica 或 maxima 中运行它更快——它们已经用(类似)C++ 编写了。 因此,除非您的方程有一个非常具体的公式,您可以以 Mathematica 或 Maxima 无法利用的方式加以利用,否则您可能不走运——至少您不会从现成的图书馆。 如果您需要进行数值求解,您可能有理由编写自己的代码来提高速度。 (我知道我是为生成偏微分方程的数值解而做的)。 回答2 我所知道的其他进行符号计算的 C++ 库是 SymEngine (https://github.com/symengine/symengine) 食人鱼 (https://github.com/bluescarni/piranha)
  • NumPy数组的高级操作第五关
    NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。是在学习机器学习、深度学习之前应该掌握的一个非常基本且实用的Python库。 本实训将介绍NumPy的一些更高级的知识与使用方法。实训通关后你将学会NumPy的进阶使用技能,并为后续的综合练习部分打好基础。如果你对NumPy的基础知识不熟,可以看看这里。 PS:若需要更加详细的查阅NumPy所提供的接口,可以查阅官方文档。 任务描述 相关知识 numpy的线性代数 常用函数 编程要求 任务描述 本关任务:编写一个能求解线性方程的函数。 相关知识 为了完成本关任务,你需要掌握:1.如何使用numpy进行矩阵运算;2.点积和matmul的区别。 numpy的线性代数 线性代数(如矩阵乘法、矩阵分解、行列式以及其他方阵数学等)是任何数组库的重要组成部分,一般我们使用*对两个二维数组相乘得到的是一个元素级的积,而不是一个矩阵点积。因此numpy提供了线性代数函数库linalg,该库包含了线性代数所需的所有功能。 常用的numpy.linalg函数: 函数 说明 dot 矩阵乘法 vdot 两个向量的点积 det 计算矩阵的行列式 inv 计算方阵的逆 svd 计算奇异值分解(SVD) solve 解线性方程组 Ax=b,A是一个方阵
  • 三阶行列式的题目_线性代数入门——三阶行列式的定义与计算
    系列简介:这个系列文章讲解线性代数的基础内容,注重学习方法的培养。线性代数课程的一个重要特点(也是难点)是概念众多,而且各概念间有着千丝万缕的联系,对于初学者不易理解的问题我们会不惜笔墨加以解释。在内容上,以国内的经典教材“同济版线性代数”为蓝本,并适当选取了一些补充材料以开阔读者的视野。本系列文章适合作为初学线性代数时的课堂同步辅导,也可作为考研复习的参考资料。文章中的例题大多为扎实基础的常规题目和帮助加深理解的概念辨析题,并有相当数量的历年考研试题。对于一些难度较大或对理解所学知识有帮助的“经典好题”,我们会详细讲解。阅读更多“线性代数入门”系列文章,欢迎关注数学若只如初见! 上一节中我们通过求解二元线性方程组的一般公式引入了二阶行列式的概念,本节介绍三阶行列式的定义和计算,并对行列式在线性代数课程中的“地位”,以及线性代数课程本身的特点作一些简单介绍。(由于公式较多,故正文采用图片形式给出。) 一、三阶行列式的定义。 二、对三阶行列式概念的一些补充说明。(仔细观察三阶行列式定义的特点,展开式中共有多少项?分别有多少个“正项”和“负项”?正负号是按什么规律“分配”给各项的?最后一个问题留给读者思考,这些特点在n阶行列式的定义中都有所体现。) 三、三阶行列式定义的记忆方法(“对角线法则”)。 四、三阶行列式的计算举例。(在学习了行列式的性质及行列式的“按行或列展开”后
  • NumPy数组的高级操作(五)
    @R星校长 第5关:线性代数 numpy的线性代数 线性代数(如矩阵乘法、矩阵分解、行列式以及其他方阵数学等)是任何数组库的重要组成部分,一般我们使用*对两个二维数组相乘得到的是一个元素级的积,而不是一个矩阵点积。因此numpy提供了线性代数函数库linalg,该库包含了线性代数所需的所有功能。 常用的numpy.linalg函数: 函数说明dot矩阵乘法vdot两个向量的点积det计算矩阵的行列式inv计算方阵的逆svd计算奇异值分解(SVD)solve解线性方程组 Ax=b,A是一个方阵matmul两个数组的矩阵积 常用函数 dot(): 该函数返回俩个数组的点积。对于二维向量,效果等于矩阵乘法;对于一维数组,它是向量的内积;对于N维数组,它是a的最后一个轴上的和与b的倒数第二个轴的乘积。 a=np.array([[1,2],[3,4]]) a1=np.array([[5,6],[7,8]]) np.dot(a,a1) ''' 输出:array([[19, 22], [43, 50]]) ''' det(): 该函数用于计算输入矩阵的行列式。 a = np.array([[14, 1], [6, 2]]) a=linalg.det(a) print(a) ''' 输出:21.999999999999996 ''' inv(): 该函数用于计算方阵的逆矩阵
  • 知识体系结构
    知识体系结构 论文研究 知识体系结构 1. 数学基础 3. 计算机语言基础9. Linux操作系统基础 5. 数字图像处理理论基础 6. 数字图像处理技术基础 7. 医学图像处理理论基础 8. 医学图像处理技术基础 10. 英语写作基础 11. 深度学习框架 13. 机器学习14. 前沿探讨 数学基础知识: 一 概率论: 二 线性代数: 三 微积分: 四 矩阵 五 应用数学 六 离散数学 七 信息论 计算机语言基础: 一 Python 英语写作基础: 一 英文写作 二 单词、短语、语句积累 深度学习框架: 一 Pytorch 二 Tensorflow 机器学习: 一 传统机器学习 一.一机器学习实战 二 机器学习和神经网络 三 深度学习CV方向论文 四 深度学习NLP方向论文 一 数学基础知识 一 概率论: <1>概率基础概念 1.概率的定义 2.条件概率和乘法公式 3.全概率公式和贝叶斯公式 4.事件的独立性 <2>随机变量的概率特征–分布函数 1.随机变量与分布函数 2.离散型随机变量和常用分布 3.连续型随机变量和常用分布 4.正态分布 5.随便变量函数的分布 <3>随机变量的数值特征 1.期望 2.方差 3.柯西-施瓦兹不等式 4.相关系数 <4>数理统计的基础概念 1.统计学科的定义 2.常用的统计量 3.三大分布 4.正态总体统计量的分布 <5>参数估计 1.矩估计 2