SymPy分步解决积分问题

6
在sympy文档http://docs.sympy.org/latest/modules/integrals/integrals.html中,我们可以看到以下内容:

manualintegrate模块包含返回使用的步骤的函数(有关更多信息,请参见模块docstring)。

但是调用help(sympy.integrals.manualintegrate),我们得到如下结果:
Help on function manualintegrate in module sympy.integrals.manualintegrate:

manualintegrate(f, var)
manualintegrate(f, var)

Compute indefinite integral of a single variable using an algorithm that
resembles what a student would do by hand.

Unlike ``integrate``, var can only be a single symbol.

Examples
========

>>> from sympy import sin, cos, tan, exp, log, integrate
>>> from sympy.integrals.manualintegrate import manualintegrate
>>> from sympy.abc import x
>>> manualintegrate(1 / x, x)
log(x)
>>> integrate(1/x)
log(x)
>>> manualintegrate(log(x), x)
x*log(x) - x
>>> integrate(log(x))
x*log(x) - x
>>> manualintegrate(exp(x) / (1 + exp(2 * x)), x)
atan(exp(x))
>>> integrate(exp(x) / (1 + exp(2 * x)))
RootSum(4*_z**2 + 1, Lambda(_i, _i*log(2*_i + exp(x))))
>>> manualintegrate(cos(x)**4 * sin(x), x)
-cos(x)**5/5
>>> integrate(cos(x)**4 * sin(x), x)
-cos(x)**5/5
>>> manualintegrate(cos(x)**4 * sin(x)**3, x)
cos(x)**7/7 - cos(x)**5/5
>>> integrate(cos(x)**4 * sin(x)**3, x)
cos(x)**7/7 - cos(x)**5/5
>>> manualintegrate(tan(x), x)
-log(cos(x))
>>> integrate(tan(x), x)
-log(sin(x)**2 - 1)/2

See Also
========

sympy.integrals.integrals.integrate
sympy.integrals.integrals.Integral.doit
sympy.integrals.integrals.Integral

我看不到逐步解决方案。


不幸的是,由于Python导入的工作方式,当存在同名函数和子模块时,函数优先,因此sympy.integrals.manualintegrate是函数而不是模块。如果您运行from sympy.integrals import manualintegrate,它将为您提供模块。 - asmeurer
2个回答

7
您正在查看函数manualintegrate的文档字符串,而不是模块manualintegrate的文档字符串。该模块在此处,并且它说:
该模块还提供了获取用于计算特定积分的步骤的功能,即integral_steps函数。这将返回表示所使用整合规则的嵌套命名元组。
integral_steps函数的文档如下:
返回计算积分所需的步骤。该函数尽可能地模仿学生手动计算的过程。SymPy Gamma使用它来提供积分的逐步说明。用于格式化此函数结果的代码可以在https://github.com/sympy/sympy_gamma/blob/master/app/logic/intsteps.py找到。

除非您使用SymPy Gamma,否则integral_steps的输出将难以阅读。例如:

from sympy.integrals.manualintegrate import integral_steps
integral_steps(x*sin(3*x), x)

返回

PartsRule(u=x, dv=sin(3*x), v_step=URule(u_var=_u, u_func=3*x, constant=1/3, substep=ConstantTimesRule(constant=1/3, other=sin(_u), substep=TrigRule(func='sin', arg=_u, context=sin(_u), symbol=_u), context=sin(_u), symbol=_u), context=sin(3*x), symbol=x), second_step=ConstantTimesRule(constant=-1/3, other=cos(3*x), substep=URule(u_var=_u, u_func=3*x, constant=1/3, substep=ConstantTimesRule(constant=1/3, other=cos(_u), substep=TrigRule(func='cos', arg=_u, context=cos(_u), symbol=_u), context=cos(_u), symbol=_u), context=cos(3*x), symbol=x), context=-cos(3*x)/3, symbol=x), context=x*sin(3*x), symbol=x)

SymPy Gamma网站上更易读。


我在哪里可以找到一个将输出转换的函数?我想在Jupyter中使用它。 - asv
链接在上面引用的“integral_steps”文档字符串中。它输出HTML,所以您需要进行一些修改才能在笔记本中使用它。 - user6655984
我在Jupyter尝试了,但是遇到了这个错误:ModuleNotFoundError: No module named 'stepprinter'。 - asv
因为该模块在sympy gamma中,它不是sympy的一部分,所以你没有安装它。你需要找到一种方法在你的Python环境中安装sympy gamma代码。 - user6655984
是的,我尝试下载所有逻辑文件夹,但没有成功。也许我没有用正确的方法。 - asv

1
根据用户6655984的提示,我能够调整Sympy Gama格式化代码以便以LaTex格式输出到控制台。我仍在努力确保每个规则都能正确翻译,但现在这是我所拥有的:sympy gama

希望这对您有所帮助!

根据目前的写法,你的回答不够清晰。请编辑以添加更多细节,帮助其他人理解这如何回答所提出的问题。你可以在帮助中心找到关于如何撰写好回答的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接