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

sagemath 是否真的好用?还是隐藏了大坑?

  •  
  •   Hlianbobo · 2020-08-17 22:43:48 +08:00 · 5099 次点击
    这是一个创建于 1548 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近用 sympy 求解不定积分碰壁有人推荐用 sagemath 。我去知乎,和百度搜了一圈。很多都说 sage 在符号运算方面比肩 mathematica 。开源免费。而且现在已经到 9.0 版本了。

    于是产生了问题 1: 这么好的一个软件,且开源免费。内网上评价也多积极正面。而且已经到了 9.0 版本,说明历史不短了。但是为什么国内没有流行起来。形成这种印象的原因是:在知乎搜索 “python 积分” 出来的大部分都介绍 sympy 的方法。(我知道一个是库,一个是软件。但是 sagemath 毕竟是以 python 做语言,且 sympy 而是需要 pip 安装。所以从学习使用成本上是可以放在一起比较的)。在知乎搜索“sagemath mathematica ” 出来的内容评论和点赞都很少。在知乎直接搜索“sagemat”话题,问题,评论点赞都不多。豆瓣和京东上也只找到了一本中文书。这么好用又免费的软件没理由这样啊。是不是有什么不知道的坑?求老师指教。

    我看了 sage 的介绍:W.Stein 在设计 Sage 时意识到了有不同的语言(包括有 C 、C++、Fortran 和 Python )编写的大量现成的大型开源数学软件可用。因此,Sage (用 Python 和 Cython 实现的)将所有专用的数学软件集成到一个通用的接口而不是从头开发。 还有些网上文章说 sympy 也是 sage 的一个子集。

    于是产生了问题 2: 他的软件质量如何控制。众多开源软件很多功能都是重合的,比如很多开源库都可以解不定积分。但是能力参差不齐。且这些开源库本身向下兼容规则不一致(有些升级到新版本,原来基于老版本写的代码就不能用了。),升级频率也不同。sage 作为一款软件如何协调这些问题,比如我在软件中求解不定积分,他们他是调用 sympy,还是调用其他支持符号计算的库?我用 python 在 sage 中写代码,要不是时刻考虑语法应该兼容哪个库的哪个版本?

    10 条回复    2020-08-23 06:26:55 +08:00
    thedrwu
        1
    thedrwu  
       2020-08-17 23:20:46 +08:00 via Android
    十年前在 cebit 展上跟 sage 的开发者聊过。并没感觉有多好用。那时大概还没有 sympy,估计用的是 maxima 。

    然而符号运算 Mathematica 不折腾,除非想自己写个 cas,或者完善其他开源项目。
    Hlianbobo
        2
    Hlianbobo  
    OP
       2020-08-17 23:26:37 +08:00
    @thedrwu 那么时至今日,Sage 究竟好不好用?
    thedrwu
        3
    thedrwu  
       2020-08-17 23:39:49 +08:00 via Android
    @Hlianbobo 你可以试了告诉我们哦。
    Hlianbobo
        4
    Hlianbobo  
    OP
       2020-08-17 23:47:52 +08:00
    @thedrwu 我没用过,所以在这里发帖请教
    qbqbqbqb
        5
    qbqbqbqb  
       2020-08-18 18:22:43 +08:00
    个人认为 SageMath 不流行的原因是它之前一直不支持 Windows,以前 Windows 用户想用它的话还得专门安装一个虚拟机( Sage 官网提供的 Sage Appliance 就是相应的虚拟机镜像)。这种类 Mathematica 的主打符号计算的科学计算软件(有别于超算上跑的数值计算类软件)一般的受众都是桌面 PC 用户,工作流程主要是在类 NoteBook 的 GUI 环境里自然书写公式(有别于数值计算软件一般都是纯编写代码然后提交到服务器 /超算上跑),相应的工作环境也一般是 Windows 系统。不难理解为什么用的人少。
    试想,你满心欢喜地找到一个“Mathematica 替代品”,想要装到自己的电脑上试一试,结果打开官网就是“不支持 Windows”,你还会去用它吗?有多少人会为了一个可替代软件专门装一个不熟悉的 Linux 系统?

    当然现在 SageMath 有 Windows 原生版本了,尝试它的时间成本降低了不少。
    qbqbqbqb
        6
    qbqbqbqb  
       2020-08-18 18:34:10 +08:00
    问题 2 对于 Sage 来说应该问题不大。Sage 在 Python interpreter 的基础上叠加了一套自己的 interpreter,有自己的一套语法(比如包括 Python 在内的一般编程语言里 "^"是异或运算,次方运算要用'**',但是 Sage 里为了贴合数学工作者的习惯把'^'改成了次方运算,用 Sage 的时候不必考虑 Python 的原本用法)。

    也就是说,只要工作内容不涉及底层 Hack 或者引入 Sage 体系之外的第三方库,可以完全只用 Sage 的自带语法而不必考虑 Python 的语法问题。另外,Sage 软件包是将自身依赖的第三方包全部打包进去的,与系统里安装的普通版 Python 脱钩,所以也不必考虑“更新不同步”的问题。
    Hlianbobo
        7
    Hlianbobo  
    OP
       2020-08-18 21:39:05 +08:00
    @qbqbqbqb 谢谢你的详细解答。是我对 sage 有了更多了解。感觉你用软件做符号计算有一定的时间了。两个问题冒昧的向你请教一下:

    1 、http://www.mathchina.com/bbs/data/attachment/forum/202008/18/032241expfzxor1jzx514r.jpg 这道题。用 sage 去解,给出答案: http://www.mathchina.com/bbs/data/attachment/forum/202008/18/032331e03ydyy3taeacyyz.jpg
    但是这个答案并不完整。完整的答案是: http://www.mathchina.com/bbs/data/attachment/forum/202008/18/121446vgjl8jg06y3lk53m.gif
    包含定义域才有有意。且定义域不同函数前面的正负号也不同
    以上问题的 sage 代码如下:
    sage: x = var('x')
    sage: latex(integral(sqrt(1-cos(2*x)), x))
    我不知道是因为我代码不完善导致给出的解没有包含定义域范围?还是数学软件在进行符号运算时就不可能给出定义域区间以及不同区间所对应的不同表达式。

    2 、最近在看微积分。特别看到了“应用三角函数公式的积分” “关千三角函数的幕的积分” 讲解也都看得懂。但是我知道如果不做题,看到类似问题肯定傻眼。
    我学微积分,是为学习概率和统计打基础。不是为了考试。当然其他地方如果需要也希望能将微积分知识“用”起来。但是针对求解积分这样的运算知识。是刷题用人脑掌握比较划算?还是可以通过学习 mathematica 或 sage 这种软件来变相掌握比较划算呢?哪种学习投入产出比比较高?另外,即便大家都会乘法口诀。但是遇到批量计算乘法,单价还是到 excel 当中去拖拽公式吧。所以学习数学软件是否可以代替人工的运算练习?(仅限于运算,对于微积分的本质还是要理解和掌握的。) 。 是否会为后续数学知识学习埋下大坑?
    Corua
        8
    Corua  
       2020-08-19 01:58:38 +08:00 via Android
    @qbqbqbqb 实际上依然不是用的 win 底层,还是 cygwin 跑起来的(所以我在 wsl 里装了 sage

    sage 体量太大了,英文文档太厚,还是 cli 。大部分用户只会用到一小部分功能在自己研究范围内用,在国内还是缺乏好的使用环境,能找到的只有两份多年前的中文 tutorial 文档,子目录下的编程接口实例也只有英文。
    matlab 之类图形界面更方便,但目前不给国内大学授权了也不敢用了。说要造自己的车,可能还是来回搬开源轮子。不过照这样几年后 sage 的国内使用环境应该能好起来。
    目前来看论编程还是不如原生 python 找轮子方便,还有前人铺路,中文环境友好。
    但只要善于搜索,生啃文档还是好上手的。有许多算法可以直接拿来用。
    Hlianbobo
        9
    Hlianbobo  
    OP
       2020-08-19 03:57:51 +08:00
    @Corua sage 在国外应用怎么样呢?毕竟国外的版权成本不容忽视。python 上有什么轮子符号运算能和 sage 或 MMA 看齐的?我试过 sympy,不太好用
    thedrwu
        10
    thedrwu  
       2020-08-23 06:26:55 +08:00
    由最近的一个回帖想到应回来追一下更新。

    @Hlianbobo #7

    关于 1,建议试一试 Mathematica 。其它能符号运算的软件,包括 Maple,跟它都不是一个级别的。
    关于这个积分,见图
    https://share.mailbox.org/ajax/share/05f60e410363c9405e8cb25363c947fc84c46bdcf04a0694/1/8/MzQ/MzQvNzA


    关于 2,弄明白黎慢积分 /Lebesgue 积分的原理是一回事,计算的技巧又是另一回事。后者都是前人几经改进给出的每种 pattern 最优雅的解法。考试只会用到其中最普遍的技巧,有志于从事工程或者科学的学生必需掌握,用来培养直觉。其它偏僻的技巧各有各的特殊之处,就像是中小学的奥数题一样,权当游戏(况且有些积分需要利用更高级的数学工具才能解)。实际工程应用中除了一些简单的,没那么多闲工夫手算,或查表或 Mathematica 。如果查不出,数值或者近似简化解决了。


    关于 python,若不是因为 numeric/numpy 和围绕着它发展出来的生态吸引了许多用户,这个语言在科学应用上并没有多特殊,没有必要执着。概率和统计现成的封装还不如 R 。Sage 如果没有非常亮的点,吸引到足够多用户令它保持活力是比较困难的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1039 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 19:49 · PVG 03:49 · LAX 11:49 · JFK 14:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.