我怎样才能说服 Sympy 对 1961 年 MIT 本科生微积分问题进行同样的简化?

2023-12-25

该计划为詹姆斯·R·斯莱格尔麻省理工学院的论文解决新生微积分中符号积分问题的启发式程序,符号自动积分器(SAINT)因成为第一个实用的“专家系统”符号积分器而闻名,并且能够解决麻省理工学院本科微积分测试中的所有问题(迂腐地,错过了一些问题,但它可以解决它们;详细信息请参见此处在这个精彩的 YouTube 视频中 https://www.youtube.com/watch?v=PNKj529yY5c)

他的论文可以在这里免费获得:https://dspace.mit.edu/handle/1721.1/11997 https://dspace.mit.edu/handle/1721.1/11997

我很高兴尝试 Sympy 来解决这个问题,因为它看起来很平易近人,而且是一个相当困难的简化,我碰巧已经有了答案..但是,Sympy 并没有将积分简化为像 1961 年程序那样好的(主观?)简化(尽管它确实返回了相同的结果!)


问题与猜测

我怎样才能说服 Sympy 简化为相同的方程?
为什么它没有得到同样的、看似更简单的结果呢?

也许它选择第一个可能的结果,或者tan**3是决心变得更糟吗?如果是这样,为什么它不简化 SAINT 的输出?)

当它找到一些匹配时,也许它会启动一个不同的分支呋常规 https://stackoverflow.com/a/30565252/4541045?

考试题3c

Sympy 简化

from sympy import *
x = symbols("x", real=True)  # should this be assumed?
expr_inner = (x**4) / ((1 - x**2)**Rational(5,2))
expr_integral = integrate((expr_inner), x)
print(simplify(expr_integral))

(x**4*asin(x) + 4*x**3*sqrt(1 - x**2)/3 - 2*x**2*asin(x) - x*sqrt(1 - x**2) + asin(x))/(x**4 - 2*x**2 + 1)

平等证明

from sympy import *
x = symbols("x", real=True)  # should this be assumed?
expr_saint = asin(x) + Rational(1,3)*tan(asin(x))**3 - tan(asin(x))
expr_sympy = (x**4*asin(x) + 4*x**3*sqrt(1 - x**2)/3 - 2*x**2*asin(x) - x*sqrt(1 - x**2) + asin(x))/(x**4 - 2*x**2 + 1)
expr_saint.equals(expr_sympy)  # alternatively simplify(expr_saint - expr_sympy) https://stackoverflow.com/a/37115190/

True

方程显示


主要部分是分解出来的asin(x)并将其与分数分开。之后,sympy 可以证明两个表达式相等:

from sympy import *
from IPython.display import Math, display
x = symbols("x", real=True)  # should this be assumed?
expr_saint = asin(x) + Rational(1,3)*tan(asin(x))**3 - tan(asin(x))
expr_sympy = (x**4*asin(x) + 4*x**3*sqrt(1 - x**2)/3 - 2*x**2*asin(x) - x*sqrt(1 - x**2) + asin(x))/(x**4 - 2*x**2 + 1)

r=[]
r.append(latex(expr_sympy))
expr_sympy = expr_sympy.collect(asin(x))
r.append(latex(expr_sympy))
expr_sympy = apart(expr_sympy,asin(x))
r.append(latex(expr_sympy))

display(Math(" \\Longrightarrow ".join(r)))

display(simplify(expr_saint - expr_sympy))

Output:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我怎样才能说服 Sympy 对 1961 年 MIT 本科生微积分问题进行同样的简化? 的相关文章

  • sympy CSE:避免 pow/powf

    当 Sympy 生成 C 代码时 有没有办法对表达式中的 pow 或 powf 出现强制执行 CSE 优化 例如 这段代码片段 c s symbols c s myexpr c 6 1800 c 5 100 0 00833333333333
  • 有什么方法可以在 sympy 中进行整数除法吗?

    我有一个很长的表达式 我认为可以简化 我想sympy将是最好的方法 不幸的是 这个公式依赖于几个整数除法 我找不到任何方法来表示这些sympy gt gt gt x Symbol x gt gt gt x 1 2 x 2 1 2 显然不是我
  • 计算机代数软件,用于最小化一组多项式中的运算次数

    我有多项式系统 相当简单的多项式表达式 但相当长 优化我的手牌 表达式按集合分组 在给定的集合中 多个变量中有共同的术语 我想知道是否有一个计算机代数系统 例如 Mathematica Matlab 或 sympy 可以优化多个具有常用项的
  • SymPy 中的非顺序替换

    我正在尝试使用 SymPy 1 同时替换表达式中的多个术语 我尝试使用字典作为参数的 subs 函数 2 但发现它是按顺序替换的 In a subs a b b c Out c 问题是第一次替换产生的术语可以被第二次替换所替换 但它不应该
  • 有没有办法在 SymPy 中处理常量函数参数?

    我正在生成符号函数并使用 SymPy 来简化它们 现在我想要一种方法来 简化 表示尚未拟合的函数中的常量参数的符号 例如 如果我生成一个多项式 我可能会生成一个像这样的字符串 C x x C x C x C SymPy 会变成 C x 2
  • 打印替换表达式而不进行数值计算

    是否可以打印替代 SymPy 表达式而不进行计算 我想打印替换的表达和结果 e g x Symbol x expr x 2 pprint expr this prints expression result expr subs x 2 pr
  • Python Sympy 求解返回列表与字典

    我正在使用 sympy 及其求解函数 但我注意到它有时返回列表中的字典 但在其他情况下仅返回字典 没有列表 from sympy import x y symbols x y q 16 x 0 5 y 0 5 solve diff q x
  • Sympy:化简平方根

    Sympy 似乎无法简化涉及变量平方的平方根的表达式 In 28 a x 2 In 29 b a 1 2 In 30 b Out 30 0 5 2 x In 31 b simplify Out 31 0 5 2 x 我无法将此与其他变体一起
  • 在 SymPy 中,为什么我的解决方案(nonlinsolve)返回错误的答案?

    我有一个由 3 个方程组成的系统 我想找到以下交线或零斜线的解dx dy from sympy import x y z symbols x y z dx x x 3 3 z y dy y 2 0 1 z dz 0 xy nullcline
  • 在 Python 中求解 x 的高度非线性方程

    我正在尝试求解以下 dB 方程 为简单起见 我在问题标题中将 dB 表示为 x 方程中的所有其他项都是已知的 我尝试使用 SymPy 象征性地求解 dB 但我不断收到超时错误 我也尝试过使用fminbound from scipy opti
  • 将平方和立方项转换为乘法

    我正在尝试使用 sympy 中的 ccode 将来自 sage 的大表达式转换为有效的 C 代码 然而 我的表达式有很多平方和立方项 由于 pow x 2 比 x x 慢得多 因此我尝试在转换之前在表达式中扩展这些术语 基于this htt
  • Sympy autowrap (cython):为 sympy.Max、sympy.Heaviside 定义“助手”

    我有一个 sympy Matrix 称为 J sym 我想自动包装它 最好使用 cython 后端 相应的符号存储在列表list args中 然而 我遇到的问题是显然不支持某些 sympy 函数 在我的例子中特别是 sympy Max 和
  • python sympy 中没有指数的解决方案

    当我运行这个程序时 我最终没有得到解决方案 但应该有一个解决方案 我相信 知道我做错了什么吗 如果你从 e2 方程中去掉 Q 它似乎可以正常工作 usr bin python from sympy import a b w r symbol
  • 如何在直线上分解长方程?

    我正在尝试在新行中添加一个方程 问题是方程对于该行来说太长了 我需要手动打破它 否则 它只会重叠到右列或右边缘 并且看起来很难看 有没有一种方法可以让 LaTeX 帮我打破方程 看起来不错 我附上我的乳胶代码 begin align f n
  • 如何在 Sympy 中将 `sin(x)^2` 重写为 cos(2*x) 形式

    在 Mathematica 等其他 CAS 中很容易获得这样的重写 TrigReduce Sin x 2 1 2 1 Cos 2 x 然而 在 Sympy 中 trigsimp所有方法测试返回sin x 2 trigsimp sin x s
  • 在 numpy 网格网格上评估 sympylambdaify 的结果

    我想在 numpy mggrid 上评估 sympy lambdify 的输出 我尝试了以下方法 import sympy as sp import numpy as np theta v sp symbols theta v coeff
  • 在 sympy 绘图中,如何获得具有固定纵横比的绘图?

    如果我用这个片段画一个圆 from sympy import x y symbols x y p1 plot implicit Eq x 2 y 2 1 aspect ratio 1 1 我会得到一个像这样的图形窗口 现在长宽比不是我所期望
  • 从值数组中计算 sympy 表达式

    我正在尝试 sympy 但遇到了一个无法解决的问题 使用 scipy 我可以编写一个表达式并计算 x 值数组 如下所示 import scipy xvals scipy arange 100 100 0 1 f lambda x x 2 f
  • 获取单个方程的脚本

    在文本文件中输入 a 2 8 b 3 9 c 4 8 d 5 9 e a b f c d g 0 6 h 1 7 i e g j f h output i j 期望的输出 输出 2 8 3 9 0 6 4 8 5 9 1 7 如果输入文件名
  • 稀疏矩阵超定线性方程组c/c++库

    我需要一个库来解决 Ax b 系统 其中 A 是一个非对称稀疏矩阵 每行有 8 个条目 而且可能很大 我认为实现双共轭梯度的库应该没问题 但我找不到一个有效的库 我尝试过 iml 但 iml sparselib 包中缺少一些标头 有小费吗

随机推荐