V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Hlianbobo
V2EX  ›  Python

现在可以在 Python 中使用 rubi 来解不定积分了么?

  •  
  •   Hlianbobo · 2020-08-16 19:20:41 +08:00 · 1996 次点击
    这是一个创建于 1350 天前的主题,其中的信息可能已经有所发展或是发生改变。
    是不是 pip 还不能安装只能从 GitHub 上下载呢?
    The SymPy (Symbolic Python) CAS also intends to incorporate Rubi’s integration rules. The code for Rubi is in the sympy/integrals/rubi subdirectory of the SymPy source-code on GitHub.

    https://rulebasedintegration.org/downloadRubi.html
    11 条回复    2021-10-15 14:53:18 +08:00
    necomancer
        1
    necomancer  
       2020-08-17 14:39:35 +08:00
    你有没有试过 Sage
    Hlianbobo
        2
    Hlianbobo  
    OP
       2020-08-17 19:32:17 +08:00
    @necomancer 谢谢回复。谢谢之路。我去知乎,和百度搜了一圈。很多都说 sage 在符号运算方面比肩 mathematica 。开源免费。而且现在已经到 9.0 版本了。
    于是产生了问题 1:这么好的一个软件,且开源免费。内网上评价也多积极正面。但是为什么国内没有流行起来。形成这种印象的原因是:在知乎搜索 python 积分 出来的大部分都介绍 sympy 的方法。在知乎搜索“sagemath mathematica ” 出来的内容评论和点赞都很少。在知乎直接搜索“sagemat”话题,问题,评论点赞都不多。豆瓣和京东上也只找到了一本中文书。这么好用又免费的软件没理由这样啊。是不是有什么不知道的坑?求老师指教。

    我看了 sage 的介绍:W.Stein 在设计 Sage 时意识到了有不同的语言(包括有 C 、C++、Fortran 和 Python )编写的大量现成的大型开源数学软件可用。因此,Sage (用 Python 和 Cython 实现的)将所有专用的数学软件集成到一个通用的接口而不是从头开发。
    还有些网上文章说 sympy 也是 sage 的一个子集。
    于是产生了问题 2:他的软件质量如何控制。众多开源软件很多功能都是重合的,比如很多开源库都可以解不定积分。但是能力参差不齐。且这些开源库本身向下兼容规则不一致(有些升级到新版本,原来基于老版本写的代码就不能用了。),升级频率也不同。sage 作为一款软件如何协调这些问题,比如我在软件中求解不定积分,他们他是调用 sympy,还是调用其他支持符号计算的库?


    问题 3:最近在看微积分。特别看到了“应用三角函数公式的积分” “关千三角函数的幕的积分” 讲解也都看得懂。但是我知道如果不做题,看到类似问题肯定傻眼。且章节末尾也说:“即使你掌握了所有的方法,如果你不做大量的练习,那么遇到实际问题时,你还是会陷入混乱。确信通过大量的练习后,你能应付各种各样复杂的积分,这样你
    才能够在计算中有自信这时你就是一个非常好的积分计算者了.”
    我学微积分,是为学习概率和统计打基础。不是为了考试。当然其他地方如果需要也希望能将微积分知识“用”起来。但是针对求解积分这样的运算知识。是刷题用人脑掌握比较划算?还是可以通过学习 mathematica 或 sage 这种软件来变相掌握比较划算呢?哪种学习投入产出比比较高?

    以上想听听老师的建议,如有打扰请忽略本回复。
    necomancer
        3
    necomancer  
       2020-08-18 15:12:33 +08:00
    看你的需求,我这么说吧,Mathematica,sage,matlab 都只是工具,哪个能用用哪个,都会一点,都没必要太精通,更没必要非要专注哪一个。从你的说法上看,你好像不是研究数学的。搞个积分表,没事查就可以了。数值积分常用的就那么几个算法,比如 simps,trapz……,看看数值积分的原理,知道其敛散限制就可以,比如什么场合 simps 准确、什么时候 simps 扯淡等。知道就行。现成的库太多了,scipy 、matlab 、mathematica……啥都有,你更需要注意的是怎么用、什么场景下用什么。

    Sage 不火的原因我也不知道啊,是因为没有中文文档?还是文档质量没有商业软件高?各种商业软件比如 Mathematica 中文文档很厉害的,还能在看文档的时候补充很多数学知识,不像很多开源软件的工具,是你很懂了才能去用,不然盯着文档看半天也看不明白一些参数的意思,比如 scipy,有的能给指一个 wikipedia 的链接就不错了。Sage 的坑我倒是没太见过几个,和商业软件比,至少没有 scipy 的 minimize,curve_fit 和 Mathmatica 的差距那么大。不过我也只能算 Sage 轻中度用户,所以也说不准。至于 sage 每部分用什么库、又有什么微调改动的我也不清楚,没查过,作为用户我更关心问题是否能解决,只是从手感上说,sage 比 sympy 好一些。

    看你的描述,基础数学对你来说完全可以作为一个可以不求甚解的工具,你更需要的是站得高尿得远。但是站得高需要一定程度的数学知识,大概扫了一眼你之前帖子里贴的问题,你现在看到的这些问题在我看来都还没碰到用工具的地步,还是很基础的,属于盯着看就应该知道结果的。顺带一提,你要学概率和统计是指到什么地步?随机过程鞅理论啥的要学吗?不要的话生化环财类微积分的书买两本看看,做做书后面习题就得了。否则各种分析、测度、希尔伯特空间之类基础概念还是要懂的,那数学就很刺激了。总之一句话,为了用而学的工具,没必要太精,因为有各种好用的工具所以可以不求甚解;最重要的是一定要有站得高尿的远的视角以及遇到新问题知道从哪里下手补充基本知识、怎么利用甚至改进工具来解决手头的问题的能力。
    Hlianbobo
        4
    Hlianbobo  
    OP
       2020-08-18 15:55:45 +08:00
    @necomancer 感觉你是真懂我,回复给我很大启发。十分感谢!不知道以下问题目前的数学软件是否能给出“完美答案” http://www.mathchina.com/bbs/forum.php?mod=viewthread&tid=2042007&extra=
    我用 sage 计算给出结果但是没给定义域。
    类似问题,求不定积分。大部分函数的不定积分是一个反导数➕c 。个别函数的不定积分 (比如 1/x )结果是 ln | x |+c,但是( 0,oo )是 c1,在(-oo,0 )是 c2 。

    类似以上两类解析解情况比较复杂,牵扯到定义域的问题。目前的软件能给出包含定义域差别的“完整”答案么。包括 MMA 和 sage 。
    Hlianbobo
        5
    Hlianbobo  
    OP
       2020-08-18 16:06:34 +08:00
    @necomancer “看你的需求,我这么说吧,Mathematica,sage,matlab 都只是工具,哪个能用用哪个,都会一点,都没必要太精通,更没必要非要专注哪一个。”仔细一想确实如此。我也不是想成为某软件使用达人去授课。但是换个角度一想,担心不精通会掉进“沉默错误”的坑。比如上个回复里那道题,软件给出的不定积分结果去求导验证似乎也是对的。但是没有别人给出计算过程就会忽略定义域的问题。比如我刚学完最小二乘法做线性回归,什么数据哪来看看散点图感觉有线性关系都先做个线性回归。后来稍微多学点,才知道有什么线性相关,自相关,平稳一堆问题。

    以上论述是想知道以数学为工具的人在多大程度上可以依靠这些数学软件,以及对这些数学软件掌握到什么程度才可以避免“沉默错误”(比如 MMA 和 sage 可能有函数可以给出不定积分结果定义域区间,只不过我还没学到而已)。有时遇到报错还不是最可怕的事情…………
    necomancer
        6
    necomancer  
       2020-08-19 01:13:03 +08:00
    你想多了少年,你如果**不研究数学**的话,这类问题几乎是不存在的,除非你对基础概念实在没有掌握,比如微积分书里都会提的不写积分常数导致 sinx=cosx 还是 0=1 的证明啥的。但实际问题中,你求个啥优化出来两个解,怎么判定是根据问题的,例如分布函数都是可积、平方可积,异常解很容易看出来;或者更极端一点,物理上大多数关于时间啥的优化问题给你一个正解一个负解一个复数解,想也知道该是啥答案。至于为什么关于时间建模的问题可以解出来复数和负数,那是模型本身的问题,讨论下去就是纯数学领域,如果模型死活没有正解,基本上是模型有毛病,请重新推公式,真因为你说的这种工具问题,我模型啥都推对了,我也了解问题要怎么去解决,但工具由于这些操蛋的尿性解不出来,几乎是不可能发生的。不过你硬要追求到这么细致的话去看 Mathematica 吧,很多解它会给 ConditionalExpress 啥的,比如含参积分。
    Hlianbobo
        7
    Hlianbobo  
    OP
       2020-08-19 04:01:03 +08:00
    @necomancer 学习了,再次感谢
    dddd1007
        8
    dddd1007  
       2020-08-23 14:20:14 +08:00
    看到两位的讨论收获很多.

    @Hlianbobo 看到你提了一下想了解 “以数学为工具的人在多大程度上可以依靠这些数学软件”, 不知道我能否给你提供一些参考.

    我是在做计算神经学的研究, 需要用一些数学工具来模拟神经系统的活动, 以及给出与生物体外部行为一致的反应. 对我来说可能在理解论文的时候会借助 Mathematica 来推导数学过程, 但是为了避免你提到的 “沉默错误” (也确实因为我的数学水平实在不高), 实现的时候会更倾向于借助比较成熟的工具, 利用其中的各种前置检查来避免.

    举个例子来说, 我上个月尝试模仿一篇论文, 写一个基于贝叶斯网络的模拟系统. 通常来讲领域内大家常常倾向直接通过一系列 grid 直接乘出 joint distribution 来得到结果, 但按我的习惯我选择了 PyMC3 这个库来实现. 恰好 PyMC3 的检查频繁报错, 让我花了不少时间, 才发现了我的模型当中某个参数一定要设置成原作者的一个非标准的参数才能跑出结果. 但是如果按照领域内大部分人编写程序的方式, 我恐怕是没办法发现这一点的, 从而可能只估计出一个局部最优解或者错误解, 并且无法发现原作者的参数设置的特殊性.

    所以我的经验是在使用涉及到数学工具时, 尽量使用完备成熟的, 抽象水平更高的工具, 让自己把注意力集中在研究问题上会更好一些. 不知道我的经验是否有参考价值.
    Hlianbobo
        9
    Hlianbobo  
    OP
       2020-08-24 00:09:33 +08:00
    @dddd1007 谢谢回复。我对回复当中的一些意思有点没把握,在此向你请教“ 对我来说可能在理解论文的时候会借助 Mathematica 来推导数学过程, “但是”为了避免你提到的 “沉默错误” (也确实因为我的数学水平实在不高), 实现的时候会更倾向于借助比较成熟的工具, 利用其中的各种前置检查来避免.”———言下之意 Mathematica 还是不够成熟?这个领域我还在摸索,但是看网上的评价 Mathematica 是符号计算领域的第一。为什么在你看来是不够成熟?
    在你举的例子中 PyMC3 是“ 完备成熟的, 抽象水平更高的工具, ”。我应该如何理解抽象水平更高?
    dddd1007
        10
    dddd1007  
       2020-08-24 10:43:02 +08:00
    @Hlianbobo 抱歉我的描述不清楚.

    我所谓的 “成熟的工具” 或者 “抽象程度高”, 都是指某个工具是倾向于完成底层的运算, 还是直接实现某种功能.

    比如同样的贝叶斯计算, 我可以根据正态分布的概率密度函数借助微积分来计算, 也可以直接用 PyMC3 写一个 `alpha = mp.normal()` 创建个抽象的正态分布对象然后通过其他函数来计算我想得到的结果. 对我来说, 后者就是抽象程度更高的工具, 我可以直接在变量的层面操作, 而不用关心底层的计算细节——而且这些工具对底层有很多的前置条件检查, 比起我自己推公式来说更不容易犯错.

    “借助比较成熟的工具” 不是在跟 Mathematica 语言来比较, 我想表达的意思更多是在我使用某个功能的层面. 所以我想表述的含义准确来讲应该是 “PyMC3 比起 Mathematica 的符号计算功能, 对于解决我研究中的问题要更有针对性”, 实际上 Mathematica 里面应该也有贝叶斯计算的工具, 抽象程度应该也很高, 只不过对我来说代码没办法迁移, 也不容易放到实验室的计算环境下去跑, 所以我才选择了 Python.
    hanqing0521
        11
    hanqing0521  
       2021-10-15 14:53:18 +08:00
    sympy 中有 rubi 模块,但是几乎不可用!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   925 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 19:45 · PVG 03:45 · LAX 12:45 · JFK 15:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.