python编程求极限_Sympy笔记一

from IPython.display import display

from sympy import *

前置知识

理解这份笔记的内容需,读者需要具备基础的python知识并且对函数,微积分和矩阵有一定的基础。

辅助函数

由于后面的笔记中, 我们会大量将一个Sympy object和应用某个函数之后,调用某个方法之后, 或是和执行计算之后的结果比较。 为了减少代码的重复,我编写了helper.py帮忙做这事。

from helper import comparator_factory

func_comparator = comparator_factory('应用函数{}前:','使用后:')

comparator_factory返回的comparator是一个函数, 他否则使用的语法是comparator(target, func, *args, *kwargs)。 target是待处理的Sympy对象, func是希望应用的Sympy函数,args,kwargs是传给func的额外位置参数和关键字参数。

from helper import comparator_method_factory

method_comparator = comparator_method_factory('Before calling {}:','After:')

comparator_method_factory返回的使用的语法是comparator(target, method_name, *args, *kwargs)。 target是待处理的Sympy对象, method_name是希望调用的方法的名字,args,kwargs是传给调用方法的额外位置参数和关键字参数。

from helper import comparator_eval_factory

eval_comparator = comparator_eval_factory('计算前:','计算后')

comparator_eval_factory返回的comparator使用的语法是comparator(uneval)。 uneval是未执行计算的Sympy object。

符号计算是什么?

Sympy能以符号形式进行数学计算。数学表达式中未经计算的变量可以以符号的形式存在。我们看下面的例子。首先,我们用python的内置函数计算开方,我们可能会这么做。

from math import sqrt

sqrt(8)

2.8284271247461903

这个结果并不能精确的表达$\sqrt{8}$而且我们也很难从这一大串float数值推出原来的表达式是什么。这就是为什么我们需要符号计算。在像Sympy这样的符号计算系统中,不能准确表达的开发运算会保留未经计算的符号形态。

from sympy import sqrt

sqrt(8)

2*sqrt(2)

更好的显示效果

上面的例子中,结果很棒。但是在Jupyter中的显示效果看起来并不怎么样。如果我们要更好的显示效果,可以调用sympy.init_printing()方法

from sympy import init_printing

init_printing()

sqrt(8)

$2 \sqrt{2}$

看上去棒极了!!

对变量进行符号计算

Sympy能够对包含符号变量的表达式进行计算。下面是个例子。

from sympy import symbols

x, y = symbols('x y')

expr = x + 2*y

expr

$x + 2 y$

Sympy能自动应用一些明显的化简。 所以下面的例子里,我们得到的结果是$y$而不是$x+2y-x-y$

expr-x-y

$$y$$

如果没有像Sympy这样的符号计算系统的帮助,我们是实现不了这样的效果的。因为大部分情况下,编程语言都没法去处理一个没有赋上具体值的变量。

Sympy的效果演示

为了满足你的好奇心,下面挑了一小部分例子,演示Sympy在符号计算的威力。 先创建一写符号变量。

x, t, z, nu = symbols('x t z nu')

求微分

计算$\sin{(x)}e^x$的微分

s = Derivative(sin(x)*exp(x),x)

eval_comparator(s)

计算前:

$$\frac{d}{d x}\left(e^{x} \sin{\left (x \right )}\right)$$

计算后

$$e^{x} \sin{\left (x \right )} + e^{x} \cos{\left (x \right )}$$

求积分

计算$\int(e^x\sin{(x)} + e^x\cos{(x)})\,dx$

s = Integral(exp(x)*sin(x) + exp(x)*cos(x))

eval_comparator(s)

计算前:

$$\int e^{x} \sin{\left (x \right )} + e^{x} \cos{\left (x \right )}\, dx$$

计算后

$$e^{x} \sin{\left (x \right )}$$

计算$\int_{-\infty}^\infty \sin{(x^2)}\,dx$

s = Integral(sin(x**2),(x,-oo,oo))

eval_comparator(s)

计算前:

$$\int_{-\infty}^{\infty} \sin{\left (x^{2} \right )}\, dx$$

计算后

$$\frac{\sqrt{2} \sqrt{\pi}}{2}$$

计算$\lim_{x\to 0}\frac{\sin{(x)}}{x}$

求极限

s = Limit(sin(x)/x, x, 0)

eval_comparator(s)

计算前:

$$\lim_{x \to 0^+}\left(\frac{1}{x} \sin{\left (x \right )}\right)$$

计算后

$$1$$

求解 $x^2 - 2 = 0$

求解等式

s = Eq(x**2 - 2, 0)

func_comparator(s, solve, x)

应用函数solve()前:

$$x^{2} - 2 &

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值