与sympy融为一体

bax*_*axx 4 python math matlab sympy python-3.x

我正在尝试执行以下集成sympy;

x = Symbol('x')
expr = (x+3)**5
integrate(expr)
Run Code Online (Sandbox Code Playgroud)

我期待的答案是:

在此输入图像描述

但是返回的是:

在此输入图像描述

以下代码适用于MATLAB:

syms x
y = (x+3)^5;
int(y)
Run Code Online (Sandbox Code Playgroud)

我不确定我为了执行此操作而做错了什么sympy.

ray*_*ica 7

这实际上是在微积分中看到的常见问题,对于这些类型的多项式表达式,您确实得到了两个答案.每个幂的系数都x存在,但它们之间缺少常数因子.

因此,您可以使用两种方法来查找此表达式的不定积分.

  1. 第一种方法是执行替换u = x+3,然后进行集成u.然后,不定积分将(1/6)*(x + 3)^6 + C如您所愿.

  2. 第二种方法是完全展开多项式并单独整合每个项.


MATLAB选择以第一种方式找到积分:

>> syms x;
>> out = int((x+3)^5)

out =

(x + 3)^6/6
Run Code Online (Sandbox Code Playgroud)

稍后要注意的是,如果我们扩展这个多项式表达式,我们得到:

>> expand(out)

ans =

x^6/6 + 3*x^5 + (45*x^4)/2 + 90*x^3 + (405*x^2)/2 + 243*x + 243/2
Run Code Online (Sandbox Code Playgroud)

sympy 选择找到第二种方式的积分:

In [20]: from sympy import *

In [21]: x = sym.Symbol('x')

In [22]: expr = (x+3)**5

In [23]: integrate(expr)
Out[23]: x**6/6 + 3*x**5 + 45*x**4/2 + 90*x**3 + 405*x**2/2 + 243*x
Run Code Online (Sandbox Code Playgroud)

您会注意到两种环境之间的答案是相同的,但缺少常数因子.因为缺少常数因子,所以没有简洁的方法将这个因素纳入你在MATLAB中看到的输出所期望的整齐多项式中.

最后要注意的是,如果要重现sympy生成的内容,请展开多项式,然后进行积分.我们得到的结果sympy:

>> syms x;
>> out = expand((x+3)^5)

out =

x^5 + 15*x^4 + 90*x^3 + 270*x^2 + 405*x + 243

>> int(out)

ans =

x^6/6 + 3*x^5 + (45*x^4)/2 + 90*x^3 + (405*x^2)/2 + 243*x
Run Code Online (Sandbox Code Playgroud)

不变因素虽然不应该让你担心.最后,你最关心的是一个明确的积分,因此这些常数因子的减法将会发生,这不会影响最终结果.


边注

感谢DSM,如果您指定了manual=True标志integrate,这将尝试手动模仿执行集成,这将为您提供您期望的答案:

In [26]: from sympy import *

In [27]: x = sym.Symbol('x')

In [28]: expr = (x+3)**5

In [29]: integrate(expr, manual=True)
Out[29]: (x + 3)**6/6
Run Code Online (Sandbox Code Playgroud)

  • 注意`integration((x + 3)**5,manual = True)`尝试更多,好的,"手动"过程来找到反导数,并且在这种情况下产生OP期望的输出形式.正如你所说,更重要的是要实现*为什么*形式无关紧要. (4认同)