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

如何在 sage 或 mathematics 中写代码才能得到分段解,避免沉默错误?

  •  
  •   Hlianbobo · 2020-10-09 10:50:48 +08:00 · 1261 次点击
    这是一个创建于 1510 天前的主题,其中的信息可能已经有所发展或是发生改变。
    例如我们要求 sqrt(2+2*cosx)的不定积分 和 0-2pi 的数值积分

    关键步骤时到了 sqrt(4*(cos(x/2))^2) 开平方后 要变成 abs(2*(cos(x/2))如果我们要求这个绝对值的不定积分 或 0 到 2pi 的数值积分。假设我们在考试。
    那么不定积分应该写成:x 属于 0-pi:4sin(θ/2)
    x 属于 pi-2pi: -4sin(θ/2)

    数值积分当然应该在不同区间代入不同解析解求解。
    达到以上标准才能得分。

    可是当我用 sage 直接求 sqrt(2+2*cosx)的不定积分,只得到了 2 个解中的一个,即 4sin(θ/2) 。当然计算 0 到 2pi 的数值积分自然会得到错误答案 0 。

    考虑到分段解在数学中非常常见。如果让软件自动给出分段解?(所谓自动的意思就时让软件自动划段,而不是人工去划段再分别计算结果) 从而避免出现沉默错误?注:该问的的讨论不局限于 sage,给出 mathematics 的代码也可以。主要是想得到一个思路,所以代码最好有注释




    另外用 sage 求解 sqrt(2-2*cosx) 的不定积分。直接给出错误答案 https://sagecell.sagemath.org/?z=eJyrsC1LLNJQr1DX5MpJLEmt0MjMK0lNL0rM0dAw0jXSSs4v1qjQ1Iwz0DPVAdIAW0IN5Q==&lang=sage&interacts=eJyLjgUAARUAuQ==

    只有将计算步骤推进到 2*sin(x/2) 求不定积分。才能得到正确答案。不知道应该怎样写代码才能从第一步开始计算就能得到正确答案?
    2 条回复    2020-10-11 21:00:31 +08:00
    necomancer
        1
    necomancer  
       2020-10-11 19:38:06 +08:00   ❤️ 1
    x=var('x')
    integral((2+2*cos(x))^0.5,x,0,2*pi, algorithm="giac")
    Hlianbobo
        2
    Hlianbobo  
    OP
       2020-10-11 21:00:31 +08:00
    @necomancer 谢谢你高质量的回复。数值积分确实可以得到正确结果。但是我试了一下不定积分。在保留“algorithm="giac" 的情况下。sage 直接停止思考,没有给出任何解析解。我在百度搜了一下 sage giac 。没有找到任何有价值的信息。想不出应该怎么举一反三解决解析解不完整的办法。

    另外我发现诸如解方程也存在数值解不完整的情况。我试了在其中加上 algorithm="giac",sage 直接报错了。这一点甚之不如 geogebra 。同样的返程 geogebra 绘出图包括了区间内所有的数值解。https://sagecell.sagemath.org/?z=eJyrsC1LLNJQr1DX5ErLzEuJL8rPL9HQTc4v1jDUN9Kq0NQCMSs0FbQVQPzizDyYOIgJFocosLU10DHQMdEqyNRJzEnPL8osyci1VUrPTExW0gQA1wcdgQ==&lang=sage&interacts=eJyLjgUAARUAuQ==
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5521 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 09:10 · PVG 17:10 · LAX 01:10 · JFK 04:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.