如何以编程方式在SageMath上执行近似

时间:2017-07-24 18:50:35

标签: symbolic-math sage

从示例开始,请考虑以下表达式

sage: EX=h/(h-z)
sage: EX

  h  
─────
h - z

假设我想要逼近h>>z。这将产生EX ~ 1的结果。那么,我如何在SageMath上实现这个结果呢?

现在我所能做的只是停下来,并手动重写像

这样的东西
# If h>>z
sage: EX_approx=1

有没有办法可以在代码中自动/编程修改这些表达式?请记住,这个简单的例子只是一个示例,我希望能够为任何等式做到这一点。

我尝试过像

这样的事情
EX(h>>z)
EX.assume(h>>z)
limit(EX, (h-z)=h)

适用于某些情况的是

limit(EX, z=0)

但这绝对不是一回事,它不适合这样的情况:

sage: EX2=integrate(z^2*exp(EX), z)
sage: EX2

                                  ⌠                          
                            h     ⎮                   h      
                          ─────   ⎮                 ─────    
  ⎛   2        2      3⎞  h - z   ⎮  ⎛   4    3  ⎞  h - z    
  ⎝3⋅h ⋅z + h⋅z  - 2⋅z ⎠⋅ℯ        ⎮ -⎝3⋅h  - h ⋅z⎠⋅ℯ         
- ───────────────────────────── - ⎮ ────────────────────── dz
                6                 ⎮    ⎛ 2            2⎞     
                                  ⎮  6⋅⎝h  - 2⋅h⋅z + z ⎠     
                                  ⌡                          
sage: limit(EX2, z=0)
1/2*h^3*e - 1/6*h^3*limit(integrate(z*e^(h/(h - z))/(h^2 - 2*h*z + z^2), z), z, 0)

1 个答案:

答案 0 :(得分:0)

a" small"的某些顺序的近似值参数可以使用taylor方法获得:

integrate(z^2*exp(EX).taylor(z, 0, 3), z)

返回

1/180*(60*h^3*z^3*e + 45*h^2*z^4*e + 54*h*z^5*e + 65*z^6*e)/h^3