与 sympy 集成
Integration with sympy
我正在尝试使用 sympy
;
执行以下集成
x = Symbol('x')
expr = (x+3)**5
integrate(expr)
我期待的答案是:
但是返回的是:
以下代码在 MATLAB 中有效:
syms x
y = (x+3)^5;
int(y)
我不确定为了使用 sympy
执行此操作我做错了什么。
这实际上是微积分中常见的问题,对于这些类型的多项式表达式,您确实会得到两个答案。 x
的每个幂的系数都存在,但它们之间缺少常数因子。
因此,您可以使用两种方法求出该表达式的不定积分。
第一种方法是对u = x+3
进行代换,然后对u
进行积分。那么,不定积分将如您所料 (1/6)*(x + 3)^6 + C
。
第二种方法是完全展开多项式并对每一项单独积分。
MATLAB 选择第一种方式求积分:
>> syms x;
>> out = int((x+3)^5)
out =
(x + 3)^6/6
后面要注意的是,如果我们展开这个多项式表达式,我们得到:
>> expand(out)
ans =
x^6/6 + 3*x^5 + (45*x^4)/2 + 90*x^3 + (405*x^2)/2 + 243*x + 243/2
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
您会注意到两种环境的答案相同,但缺少常数因子。由于缺少常数因子,因此没有一种巧妙的方法可以将其分解为您期望从 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
不过,常数因子不应该让您担心。最后你最关心的是一个定的积分,所以这些常数因子的减法会发生,不会影响最后的结果。
旁注
感谢 DSM,如果您为 integrate
指定 manual=True
标志,这将尝试模拟手动执行集成,这将为您提供您期望的答案:
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
我正在尝试使用 sympy
;
x = Symbol('x')
expr = (x+3)**5
integrate(expr)
我期待的答案是:
但是返回的是:
以下代码在 MATLAB 中有效:
syms x
y = (x+3)^5;
int(y)
我不确定为了使用 sympy
执行此操作我做错了什么。
这实际上是微积分中常见的问题,对于这些类型的多项式表达式,您确实会得到两个答案。 x
的每个幂的系数都存在,但它们之间缺少常数因子。
因此,您可以使用两种方法求出该表达式的不定积分。
第一种方法是对
u = x+3
进行代换,然后对u
进行积分。那么,不定积分将如您所料(1/6)*(x + 3)^6 + C
。第二种方法是完全展开多项式并对每一项单独积分。
MATLAB 选择第一种方式求积分:
>> syms x;
>> out = int((x+3)^5)
out =
(x + 3)^6/6
后面要注意的是,如果我们展开这个多项式表达式,我们得到:
>> expand(out)
ans =
x^6/6 + 3*x^5 + (45*x^4)/2 + 90*x^3 + (405*x^2)/2 + 243*x + 243/2
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
您会注意到两种环境的答案相同,但缺少常数因子。由于缺少常数因子,因此没有一种巧妙的方法可以将其分解为您期望从 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
不过,常数因子不应该让您担心。最后你最关心的是一个定的积分,所以这些常数因子的减法会发生,不会影响最后的结果。
旁注
感谢 DSM,如果您为 integrate
指定 manual=True
标志,这将尝试模拟手动执行集成,这将为您提供您期望的答案:
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