如何计算同情中多变量函数的(符号)梯度?
显然我可以单独计算每个变量的导数,但有没有矢量化操作呢?
例如
m=sympy.Matrix(sympy.symbols('a b c d'))
现在对于i = 0..3,我可以这样做:
sympy.diff(np.sum(m*m.T),m[i])
这将工作,但我宁愿做类似的事情:
sympy.diff(np.sum(m*m.T),m)
哪个不起作用("AttributeError:ImmutableMatrix没有属性_diff_wrt").
象征性地求解方程可以使用Ryacas库在R中实现.例如
library(Ryacas)
yacas("Solve(x/(1+x) == a, x)")
给
expression(list(x == a/(1 - a)))
有人知道如何(象征性地)解决方程组吗?
谢谢.
我的问题:符号表达操作.
在+, - ,*,/,min,max之类的运算符的帮助下,从整数常量和变量开始构建符号表达式.更准确地说,我将用以下方式表示一个表达式(Caml代码):
type sym_expr_t = 
  | PlusInf
  | MinusInf
  | Const of int
  | Var of var_t
  | Add of sym_expr_t * sym_expr_t
  | Sub of sym_expr_t * sym_expr_t
  | Mul of sym_expr_t * sym_expr_t
  | Div of sym_expr_t * sym_expr_t
  | Min of sym_expr_t * sym_expr_t
  | Max of sym_expr_t * sym_expr_t
我想,为了执行有用和有效的计算(例如a + b - a = 0或a + 1> a),我需要有某种正常形式并对其进行操作.上述表示可能不会太好.
有人能指出我应该如何处理这个问题吗?我不需要代码.如果我知道如何,这可以很容易地写出来.与提供正常形式表示和/或构建/简化/比较算法的论文的链接也会有所帮助.
另外,如果您知道Ocaml库,请告诉我.
我按照以下方式将列表转换为Maxima中的矩阵:
DataL : [ [1,2], [2,4], [3,6], [4,8] ];
DataM: apply('matrix,DataL);
怎么用其他方式呢?如何将给定矩阵DataM转换为DataL列表?
我们如何将Latex表示转换为符号数学.
例如,
LaTex表示
y = \int x^2  
具有等效的符号数学表示
syms x
y = int(x*x, x)
是否有执行此操作的功能?我知道在matlab中存在一个函数latex,我想要这个函数的确切反函数.
在SymPy中,我试图执行矩阵乘法并在之后展开它.但是,SymPy似乎不支持矩阵表达式的扩展.例如,这是矩阵的4阶Runge-Kutta(RK4):
from sympy import init_session
init_session()
from sympy import *
A = MatrixSymbol('A', 3, 3)
x = MatrixSymbol('x', 3, 1)
dt = symbols('dt')
k1 = A*x
k2 = A*(x + S(1)/2*k1*dt)
k3 = A*(x + S(1)/2*k2*dt)
k4 = A*(x + k3*dt)
final = dt*S(1)/6*(k1 + 2*k2 + 2*k3 + k4)
final.expand()
产生结果
Traceback (most recent call last)
<ipython-input-38-b3ff67883c61> in <module>()
     12 final = dt*1/6*(k1+2*k2+2*k3+k4)
     13 
---> 14 final.expand()
AttributeError: 'MatMul' object has no attribute 'expand'
我希望表达式可以像标量变量一样扩展:
A,x,dt = symbols('A x …问题:我试图解决不等式以获得变量coeff_rw,这是rw满足不等式的符号的值.此值应该是以下代码中定义的其他符号(变量).我首先解决方程,然后是不等式(使用本教程中的不等式求解器),但是,PolynomialError每次我使用任何求解器获得教程中coeff_rw给出的时间.
import sympy as sym
#======= define variables as symbols
r, c1, c2, c3, c4, rh, rg, rw, cg, cw, a = sym.symbols('r, c1 c2 c3 c4 rh rg rw cg cw a') # cg = nablaP_g/(4*mu_g); cw = nablaP_w/(4*mu_w); a = mu_g/mu_w
#======= solve system of equations
coeffs = sym.solve((c1*(sym.log(rh)) + c2 + cg*(rh**2), \
c1*(sym.log(rg)) + c2 - c3*(sym.log(rg)) - c4 - (cw - cg)*(rg**2), \ …在我的研究小组中,我们有不同的人在不同的符号工具中进行代数建模,例如Matlab中的Symbolic Toolbox和Python中的Sympy.然后,这些模型通常导出为C代码并复制粘贴到我们自己的基于符号C++的工具中,以进一步进行符号操作.
在寻找这种难以维护的方法的替代方案时,我发现了两种看起来或多或少标准化的格式:OpenMath和"Content MathML".请注意,我们只对语义感兴趣,没有漂亮的打印.
这两种格式之间有什么关系?两者都可以用来存储和交换工具之间的数学表达式吗?
是否还有其他或多或少标准化的数学表达式交换格式?
我需要自动简化一些符号表达式,但simplifymatlab 的功能无法完成我需要的一切.
例:
simplify(expand((ax + bx)^2 + (ay + by)^2))
这导致输出
ax^2 + 2*ax*bx + ay^2 + 2*ay*by + bx^2 + by^2
所以我试图创建自己的规则,使输出更漂亮
function [ result ] = simplify_pretty( term )
    read(symengine, 'simplify_pretty_rules.mu');
    result = feval(symengine, 'Simplify', term, 'SelectRules = simplify_pretty_rules')
end
与"simplify_pretty_rules.mu"
simplify_pretty_rules := proc()
begin
    [
        Rule(#X^2 - 2 * #X * #Y + #Y^2, (#X - #Y)^2),
        Rule(#X^2 + 2 * #X * #Y + #Y^2, (#X + #Y)^2)
    ]
end_proc:
这适用于像...这样的输入
simplify_pretty(expand((ax + bx)^2 …我试图用sympy做一些符号矩阵计算.我的目标是获得一些矩阵计算结果的符号表示.我遇到了一些问题,我已经将这个问题归结为这个简单的例子,其中我尝试评估指数矩阵的取幂结果并将其乘以任意向量.
>>> import sympy
>>> v = sympy.MatrixSymbol('v', 2, 1)
>>> Z = sympy.zeros(2, 2)  # create 2x2 zero matrix
>>> I = sympy.exp(Z)  # exponentiate zero matrix to get identity matrix
>>> I * v
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "sympy/matrices/matrices.py", line 507, in __mul__
    blst = B.T.tolist()
AttributeError: 'Transpose' object has no attribute 'tolist'
相反,如果我直接创建单位矩阵然后乘以v,那么就没有问题:
>>> I_ = sympy.eye(2)  # directly create the identity matrix
>>> I_ == I  # check …