标签: symbolic-math

SymPy中的非顺序替换

我正在尝试使用[SymPy] [1]同时替换表达式中的多个术语.我用字典作为参数尝试了[subs function] [2],但发现它依次替换.

In : a.subs({a:b, b:c})
Out: c
Run Code Online (Sandbox Code Playgroud)

问题是第一次替换导致一个术语可以被第二次替换取代,但它不应该(因为我的原因).

关于如何同时进行替换的任何想法,没有它们相互干扰?

编辑: 这是一个真实的例子

In [1]: I_x, I_y, I_z = Symbol("I_x"), Symbol("I_y"), Symbol("I_z")

In [2]: S_x, S_y, S_z = Symbol("S_x"), Symbol("S_y"), Symbol("S_z")

In [3]: J_is = Symbol("J_IS")

In [4]: t = Symbol("t")

In [5]: substitutions = (
(2 * I_x * S_z, 2 * I_x * S_z * cos(2 * pi * J_is * t) + I_y * sin(2 * pi * J_is * t)),
(I_x,  I_x * cos(2 * …
Run Code Online (Sandbox Code Playgroud)

python math symbolic-math sympy substitution

13
推荐指数
1
解决办法
1777
查看次数

朱莉娅的符号数学?

我使用Mathematica进行符号数学计算.我打算换成另一种语言.Matlab(我用于标准计算的东西)包括这个功能,但我正在研究使用Julia的可能性,因为它似乎是未来.然而,似乎没有可用的象征工具(在官方文档中没有提到).显然,唯一可用的软件包(SymPy)在官方网站(http://pkg.julialang.org/)上说"测试失败" .

有谁能在朱莉娅这样做?

symbolic-math julia

13
推荐指数
2
解决办法
7229
查看次数

处理由sympy整合返回的分段方程式

同情我有一个积分返回一个Piecewise对象,例如

In [2]: from sympy.abc import x,y,z

In [3]: test = exp(-x**2/z**2)

In [4]: itest = integrate(test,(x,0,oo))

In [5]: itest
Out[5]: 
?   ___                                                   
? ?? ? ?z       ?                 ?      1          ??   ?
? ???????   for ?periodic_argument???????????????, ??? ? ?
?    2          ?                 ?          2      ??   2
?               ?                 ?polar_lift (z)   ??    
?                                                         
??                                                        
??                                                        
??    2                                                   
??  -x                                                    
??  ???                                                   
??    2                                                   
??   z                                                    
?? ?    dx                    otherwise                   
??                                                        
?0                                                        
?    
Run Code Online (Sandbox Code Playgroud)

我想提取这个分段方程的第一个分支,换句话说,我希望能够做一些itest.parts(0)简单的提取sqrt(pi)*z/2.我似乎无法找到任何方法来做到这一点,但也许我在文档中使用了错误的搜索词.有任何想法吗?

编辑

稍微探讨一下,我已经设法发现,如果我这样做,itest.args[0][0]我可以提取这个表达式.然而,这看起来有点像黑客.有更好的方法吗?

python symbolic-math sympy computer-algebra-systems symbolic-computation

12
推荐指数
1
解决办法
2894
查看次数

如何简化SymPy中的矩阵表达式?

请考虑以下示例

import sympy as sy
n = sy.symbols('n')
A = sy.MatrixSymbol("A",n,n)
B = sy.MatrixSymbol("B",n,n)
C = sy.MatrixSymbol("C",n,n)
M = A.inverse()*B.inverse() - A.inverse()*C*B.inverse()
B.inverse()*M.inverse()*A.inverse()
Run Code Online (Sandbox Code Playgroud)

打印出来的例子B^-1*(A^-1*B^-1 - A^-1*C*B^-1)^-1*A^-1.

SymPy可以简化表达式(I-C)^-1吗?如果没有,那么任何中间结果如何收集共同因素M

python symbolic-math sympy

12
推荐指数
1
解决办法
307
查看次数

Python中的单位转换

SymPy是在Python中进行单位转换的绝佳工具:

>>> from sympy.physics import units
>>> 12. * units.inch / units.m
0.304800000000000
Run Code Online (Sandbox Code Playgroud)

你可以轻松自己动手:

>>> units.BTU = 1055.05585 * units.J
>>> units.BTU
1055.05585*m**2*kg/s**2
Run Code Online (Sandbox Code Playgroud)

但是,我无法将此实现到我的应用程序中,除非我可以将度C(绝对值)转换为K到度数F到度数R或其任何组合.

我想也许这样的事情会起作用:

units.degC = <<somefunc of units.K>>
Run Code Online (Sandbox Code Playgroud)

但显然这是走错路.在SymPy中干净地实现"偏移"型单位转换的任何建议?

注意:我愿意尝试其他单元转换模块,但除了Unum之外不知道任何其他单元,并且发现它很麻烦.

编辑:好的,现在很清楚,我想要做的是首先确定要比较的两个量是否在同一个坐标系中.(如时间单位参考不同的时期或时区或dB到直线幅度),进行适当的变换,然后进行转换.有没有通用的坐标系管理工具?那太好了.

我会假设°F和°C总是指表达式中的Δ°FΔ°C,但是单独站立时指的是绝对值.我只是想知道是否有办法制作units.degF一个函数并property()在其上拍一个装饰器来处理这两个条件.

但是现在,我将设置units.C == units.K并尝试在文档中清楚地说明使用函数convertCtoK(...)convertFtoR(...)处理绝对单位时.(开个玩笑.不,我不会.)

python math symbolic-math sympy

11
推荐指数
2
解决办法
1万
查看次数

在Matlab中构造分段符号函数

我试图在Matlab中生成一个分段符号函数.它必须是符号的原因是我希望能够在之后集成/区分函数和/或插入实际值.我有以下功能:

x^3/6   ->   0 < x <= 1
(1/6)*(-3*x^3+12*x^2-12x+4)   ->   1 < x <= 2
(1/6)*(3*x^3-24*x^2+60x-44)   ->   2 < x <= 3
(1/6)*(4-x)^3   ->   3 < x <= 4
0   ->   otherwise
Run Code Online (Sandbox Code Playgroud)

例如,我想把这个函数放在一个变量中(比如说f),然后调用

int(diff(f, 1)^2, x, 0, 4) % numbers could be different
Run Code Online (Sandbox Code Playgroud)

得到(标量)结果2/3.

我尝试了各种各样的事情,涉及分段()函数和符号比较,但没有任何效果......你能帮忙吗?:-)

matlab symbolic-math piecewise

11
推荐指数
1
解决办法
1万
查看次数

Sympy中的因子/收集表达

我有一个等式:

     R??V? + R??V? - R??V?
i? = ?????????????????????
     R??R? + R??R? + R??R?
Run Code Online (Sandbox Code Playgroud)

已定义,我想将其拆分为仅包含单个变量的因子 - 在本例中为V1和V2.

所以我希望如此

        -R?                        (R? + R?)
i? = V??????????????????????? + V???????????????????????
        R??R? + R??R? + R??R?      R??R? + R??R? + R??R?
Run Code Online (Sandbox Code Playgroud)

但到目前为止我能做到的最好的是

     -R??V? + V??(R? + R?)
i? = ?????????????????????
     R??R? + R??R? + R??R?
Run Code Online (Sandbox Code Playgroud)

使用equation.factor(V1,V2).因果或其他方法还有一些其他选项可以进一步分离变量吗?

python symbolic-math sympy symbolic-computation

11
推荐指数
1
解决办法
4669
查看次数

SymPy:从对角矩阵创建一个numpy函数,它采用numpy数组

基于我在这里找到的一个例子,我试图从使用的对角矩阵创建一个函数sumpy.diag

myM = Matrix([
[x1, 4, 4],
[4, x2, 4],
[4, 4, x3]])  
Run Code Online (Sandbox Code Playgroud)

这是使用此例程创建的,例如:

import sympy as sp
import numpy as np

x1 = sp.Symbol('x1')
x2 = sp.Symbol('x2')
x3 = sp.Symbol('x3')
X = sp.Matrix([x1, x2, x3])

myM = 4 * sp.ones(3, 3)
sp.diag(*X) + myM - sp.diag(*np.diag(myM))
Run Code Online (Sandbox Code Playgroud)

现在我将要创建一个函数,使用lambdifyufuncify,采用一个numpy.array或长度3(像np.array([0.1,0.2,0.3]))作为输入,并给出输出作为根据矩阵myM

myM = Matrix([
[0.1, 4, 4],
[4, 0.2, 4],
[4, 4, 0.3]])  
Run Code Online (Sandbox Code Playgroud)

最终我需要使用这种方法象征性地创建雅可比矩阵: 雅可比 并且由于函数形式可能在计算过程中发生变化,因此以符号方式计算雅可比矩阵将非常有用.

python numpy matrix symbolic-math sympy

11
推荐指数
2
解决办法
713
查看次数

为什么SymPy计算错误的飞机交叉点?

我有一个奇怪的问题,SymPy中的平面交叉点可以用简单的例子,但是对于坐标更复杂的一个,它会失败.我发布了一个有效的简单示例和失败的示例.正如Povray图像所示,我有三个平面穿过多面体的顶点并垂直于穿过相应顶点和中心的直线.我想计算这些平面相交的点,但是SymPy给出了平面对相交的线的错误结果.在图像中,正确的交叉点可以看作短线(用CSG交叉点创建).与它们平行的长线是由SymPy计算的线.

我做错了什么,或者这是SymPy中的错误?

更多图片在这里:http ://paste.watchduck.net/1712/sympy_planes/
有谁知道如何在页面上放置许多图像,而不是不发布问题?("您的帖子似乎包含未正确格式化为代码的代码.")

作品

码:

from sympy import Point3D, Plane


pointR = Point3D(1/2, 0, 1/2)
pointG = Point3D(1, 0, 0)

planeR = Plane(pointR, pointR)
planeG = Plane(pointG, pointG)

print('\n######## Intersection of the planes:')
lineRG = planeR.intersection(planeG)[0]  # yellow
print(lineRG)

print('\n######## Intersection of plane and contained line returns the line:')
lineRG_again = planeR.intersection(lineRG)[0]
print(lineRG_again.equals(lineRG))
Run Code Online (Sandbox Code Playgroud)

输出:

######## Intersection of the planes:
Line3D(Point3D(1, 0, 0), Point3D(1, 1/2, 0))

######## Intersection of plane and contained line …
Run Code Online (Sandbox Code Playgroud)

python symbolic-math sympy

11
推荐指数
1
解决办法
430
查看次数

集成在一个恒定的函数上

我试图在MATLAB 2017a中集成一个常量函数,但我被卡住了.首先,当我使用以下脚本进行集成时,我得到了正确的输出.所以脚本适用于x0依赖的脚本t.

function E=sol(n,k)
x0 = @(t)  t^(2);
j = 0;
E = zeros(n,1);
 while j < n+1 ;
    K = matlabFunction(subs(po(j,k))) ; 
    eval(sprintf('x%d = integral(K,0,1);',j+1)) ;
    E(j+1,1) = subs(sprintf('x%d',j+1))
    j = j+1;
 end
end
Run Code Online (Sandbox Code Playgroud)

功能po(j,k)如下,

function A_j = po(j,k)          % Adomian polynomials
 if j >0
  x =  sym('x',[1 j]);
    syms p;                            % Assinging a symbolic variable for p
    syms x0;
    S = x0+ sum(p.^(1:j) .* x) ;     % Sum of p*x up to …
Run Code Online (Sandbox Code Playgroud)

matlab symbolic-math numerical-integration

10
推荐指数
1
解决办法
170
查看次数