标签: symbolic-math

如何从MATLAB中的符号表达式创建函数?

如何从符号表达式中创建函数?例如,我有以下内容:

syms beta
n1,n2,m,aa= Constants
u = sqrt(n2-beta^2);
w = sqrt(beta^2-n1);
a = tan(u)/w+tanh(w)/u;
b = tanh(u)/w;
f = (a+b)*cos(aa*u+m*pi)+a-b*sin(aa*u+m*pi);  %# The main expression
Run Code Online (Sandbox Code Playgroud)

如果我想f在特殊程序中使用它来查找它的零,我该如何转换f为函数?或者,我该怎么做才能找到f这些嵌套表达式的零?

matlab symbolic-math

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

通过自动引入时间变量或以任何其他方式简化非常长的符号表达式

在尝试解决符号数学问题后,我得到了一个大约17000个字符的表达式.我正在使用Matlab的符号工具箱,但我对任何建议(Mathematica,无论如何)都持开放态度.

出于显而易见的原因,我不会将表达式直接复制粘贴到问题中.这是一个链接.

运行Matlab命令simplifysimple,甚至企图collect没有改善的情况(有些我们更糟糕).

但我想知道,我不关心是否使用时间参数逐步评估表达式.就像是:

 z1 = a^2*y1;
 %Now the expression can be simplified by using z1 as alias!
 z1+z1^2 ....
Run Code Online (Sandbox Code Playgroud)

是否有一种自动方法可以通过时间变量逐步简化这种方法?此外,您可以想到的任何其他方法都是合理的.

matlab wolfram-mathematica symbolic-math maple

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

在sympy中分解polys

我正在做一个非常简单的概率计算,即从AZ集(具有相应的概率x,y,z)中获取X,Y,Z的子集。

而且由于非常沉重的公式,以处理它们,我想简化(或收集因子使用这些多项式-我不知道确切的定义)sympy

因此..(具有从具有对应概率x,y,z的AZ集合中获得X,Y,Z子集的非常简单的概率计算表达式)

import sympy as sp

x, y, z = sp.symbols('x y z')

expression = (
    x * (1 - x) * y * (1 - x - y) * z +
    x * (1 - x) * z * (1 - x - z) * y +

    y * (1 - y) * x * (1 - y - x) * z +
    y * (1 - y) * z …
Run Code Online (Sandbox Code Playgroud)

python symbolic-math sympy

7
推荐指数
1
解决办法
3102
查看次数

函数矩阵,SymPy和SciPy的数值积分

从我的SymPy输出我有下面显示的矩阵,我必须在2D中集成.目前我正在以元素方式进行,如下所示.此方法适用,但它变得太慢(用于sympy.mpmath.quadscipy.integrate.dblquad)为我的真实案例(其中A,其职能是更大(见下面编辑):

from sympy import Matrix, sin, cos
import sympy
import scipy
sympy.var( 'x, t' )
A = Matrix([[(sin(2-0.1*x)*sin(t)*x+cos(2-0.1*x)*cos(t)*x)*cos(3-0.1*x)*cos(t)],
            [(cos(2-0.1*x)*sin(t)*x+sin(2-0.1*x)*cos(t)*x)*sin(3-0.1*x)*cos(t)],
            [(cos(2-0.1*x)*sin(t)*x+cos(2-0.1*x)*sin(t)*x)*sin(3-0.1*x)*sin(t)]])

# integration intervals
x1,x2,t1,t2 = (30, 75, 0, 2*scipy.pi)

# element-wise integration
from sympy.utilities import lambdify
from sympy.mpmath import quad
from scipy.integrate import dblquad
A_int1 = scipy.zeros( A.shape, dtype=float )
A_int2 = scipy.zeros( A.shape, dtype=float )
for (i,j), expr in scipy.ndenumerate(A):
    tmp = lambdify( (x,t), expr, 'math' )
    A_int1[i,j] = quad( tmp, (x1, x2), …
Run Code Online (Sandbox Code Playgroud)

python symbolic-math sympy scipy numerical-integration

7
推荐指数
1
解决办法
1924
查看次数

解释计算约旦形式的36乘36矩阵的误差

我一直在试图计算只有三个不同的项目,组成一个36分36矩阵的Jordan标准型1,1/20.矩阵是概率转移矩阵,因此,给定这些条目,矩阵显然是稀疏的.

我一直遇到的问题如下:每当我尝试计算时

[V, J] = jordan(A),
Run Code Online (Sandbox Code Playgroud)

要么

[V, J] = jordan(sym(A)),
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息:


在MuPAD命令中使用mupadmex 错误时出错:相似度矩阵太大.

sym/mupadmexnout出错(第1546行)
        out = mupadmex(fcn,args {:});

sym/jordan中的错误(第32行)
        [Vsym,Jsym] = mupadmexnout('symobj :: jordan',A,'All');

我在MATLAB帮助中读到,Jordan形式的计算对扰动非常敏感.但是,我认为我的计算不是问题,因为矩阵的所有条目都是整数或整数比.

我的问题如下:

  1. 如何解释收到的错误输出?
  2. 我收到的错误是否可以解决?
  3. 如果错误不可寻址,是否有替代方法(Matlab中的函数)我可以尝试计算Jordan形式?

matlab matrix linear-algebra symbolic-math numerical-stability

7
推荐指数
1
解决办法
875
查看次数

Sympy:在多项式中删除高阶项

使用Sympy,假设我们有一个表达式f,它是符号"x"(以及可能的其他符号)的多项式.

我想知道如果有一种有效的方法可以删除大于某个整数n的f中的所有项.

作为一个特例,我有一个非常复杂的功能,但我想只保留x中的第二个订单.有效的方法是什么?

这种明显的,非常有效的方法是每m小于n,取m个导数并将x设为0,得到x ^ m的系数.我们以这种方式获得每个系数,然后重建多项式.但是采取衍生品并不是最有效的方法.

python symbolic-math sympy computer-algebra-systems polynomials

7
推荐指数
1
解决办法
2446
查看次数

微积分限制与Java

我希望用Java计算限制(微积分).我有以下Limit可以计算限制的类:

package calculus;

public final class Limit {
    private Limit() {

    }

    public static final double limit(Function function, double approach) {
        double below = Limit.limitFromBelow(function, approach);
        double above = Limit.limitFromAbove(function, approach);
        return below == above ? below : Double.NaN;
    }

    public static final double limitFromBelow(Function function, double approach) {
        for (double d = approach - 10; d <= approach; d = approach
                - ((approach - d) / 10)) {
            if (function.apply(d) == Double.POSITIVE_INFINITY) {
                return Double.POSITIVE_INFINITY;
            } else …
Run Code Online (Sandbox Code Playgroud)

java algebra symbolic-math calculus

7
推荐指数
1
解决办法
4101
查看次数

程序可以用来简化代数表达式吗?

我们知道1+2+...+n等于n(n+1)/2.

但是如果我们事先不知道它,我们可以以编程方式获得相同的结果吗?

关于为什么我有这样的问题.

想想更复杂的情况:

X1 + X2 + ... + Xk = n,其中Xi是整数且> = 0.

什么是期望X1^2+...Xk^2

结果并不明显只是一目了然,一旦我们弄清楚期望的(详细的)数学表示,我们就会想要将它提供给程序来减少代数. X1^2+...Xk^2

algorithm math expression algebra symbolic-math

6
推荐指数
1
解决办法
3118
查看次数

避免使用Octave符号包中不需要的文本

当您第一次调用vpa(来自Octave的符号包)时,Octave会在输出实际结果之前在屏幕上生成一些文本.例如:

>> x = pretty(vpa('sqrt(-1)'))
OctSymPy v2.2.4: this is free software without warranty, see source.
Initializing communication with SymPy using a popen2() pipe.
Detected Windows: using "winwrapy.bat" to workaround Octave bug #43036
Some output from the Python subprocess (pid 6680) might appear next.

OctSymPy: Communication established.  SymPy v0.7.6.1.
Python 2.7.11 (v2.7.11:6d1b6a68f775, Dec  5 2015, 20:32:19) [MSC v.1500 32 bit (Intel)]
x =   1.0*I
Run Code Online (Sandbox Code Playgroud)

请注意,实际输出(变量x)是字符串'1.0*I',如预期的那样.其余部分不是函数输出的一部分,而是直接在屏幕上生成的文本.

该文本不会出现在后续调用中vpa,仅在启动Octave后第一次出现.它似乎并没有特别相关vpa,而是Octave与Python通信以处理符号计算的方式.

有没有办法避免显示该文本?或者失败了,有没有办法暂时 …

python matlab symbolic-math octave

6
推荐指数
1
解决办法
124
查看次数

Python使用变量保存(稀疏)矩阵

我有一些大小合适的矩阵(2000*2000),我希望在矩阵的元素中有符号表达式 - 即元素的.9**b + .8**b + .7**b ...一个例子.矩阵非常稀疏.

我通过添加中间计算来创建这些矩阵.我想将它们存储到磁盘中以便稍后读取并使用不同的值进行评估b.

我已经玩过同情,它确实完成了我需要它做的事情,但是做简单的添加是令人头脑麻木的慢.从我所看到的,似乎theano或tensorflow可能能够用Tensors做到这一点,但我无法弄清楚如何在Tensor中放置一个符号.

任何人都可以指出我正确的方向,使用这个任务的最佳工具?我更喜欢它在python中,但是如果python以外的东西能做到这一点也很好.

python symbolic-math sympy

6
推荐指数
1
解决办法
121
查看次数