sympy-note


################## sympy #########################

x, y, z = symbols('x y z')     # 符号对象, 可限定 real = True , positive = True, complex = True , integer = True ...
f = symbols("f",cls = Function) # 定义f为数字函数

f = sy.Function()   # 定义f为数字函数

######### 表达式变换

sy.exp(sy.I*x).expand(complex=True) # 展开为复数, 可理解为将x当作复数处理     表达式展开 
sy.cos(x).series(x, 0, 10) #  .series(var, point, order)                 泰勒级数展开   
sy.simplify(expr)          # 对数学表达式进行化简                           化简
sy.radsimp(expr)           # 对表达式的分母进行有理化                       分母进行有理化
           它所得到的表达式的分母部分将不含无理数。即将表达式转换为分子除分母的形式。
sy.ratsimp(expr)           # 对表达式的分母进行通分运算                      通分运算 
sy.cancel(expr)           # 对表达式的分子分母进行约分运算                    约分运算
           只能对纯符号的分式表达式进行约分
           不能对函数内部的表达式进行约分,不能对带函数的表达式进行约分
sy.trim(expr)             # 对表达式的分子分母进行约分运算                   约分运算         
           可以对表达式中的任意部分进行约分,并且支持函数表达式的约分运算。
sy.apart(expr)            # 对表达式进行部分分式分解                        部分分式分解
sy.factor(expr)            # 对表达式进行因式分解                           因式分解
sy.together(1/x+1/y)       # 代数式的合并                                 代数式的合并
sy.trigsimp(expr)         # 对表达式中的三角函数进行化简                     三角函数化简 
           有两个可选参数——deep和recursive,默认值都为False。
              当deep参数为True时,将对表达式中所有子表达式进行化简运算
              当recursive参数为True时,将递归使用trigsimp()进行最大限度的化简
sy.expand_trig(expr)      # 展开三角函数                                   三角函数展开 

######### 表达式计算

sy.re() 计算其实部
sy.im() 计算其虚部

sy.integrate(6*x**5, x)                 #不定积分                         解析积分
sy.integrate(x**3, (x, -1, 1))          #定积分
sy.integrate(6*x**5+y, x,y)             #双重不定积分
sy.integrate(x**3+y, (x, -1, 1),(y,1,3) #双重定积分

sy.diff(sy.sin(x), x)                                                    解析微分
sy.diff(sy.sin(2*x), x, 2) # 高阶微分 diff(func, var, n)
diff(sin(x*y),x,2,y,3) # 对表达式进行x的2阶求导,对y进行3阶求导
diff(sin(2*x),x)
sin(2*x).diff(x,1)
t=Derivative(sin(x),x)   Derivative是表示导函数的类,它的第一个参数是需要进行求导的数学函数,第二个参数是求导的自变量,
                         注意:Derivative所得到的是一个导函数,它不会进行求导运算。

sy.limit(sy.sin(x)/x, x, 0)                                              极限

sy.summation(2*i - 1, (i, 1, n))                                        连加求和

expression.subs(x, y)             将算式中的x替换成y                       替换
      (1 + x*y).subs(x, pi)  
expression.subs({x:y,u:v})        使用字典进行多次替换  
expression.subs([(x,y),(u,v)])    使用列表进行多次替换   
      (1 + x*y).subs([(x, pi), (y, 2)])

expr.doit()          执行/计算expr ,如对于微分表达式则直接计算其符号结果    计算表达式符号结果

##########  方程
方程构建:
   任何表达式都可以直接表示值为0的方程,即表达式 expr 也是方程 expr=0
   用sy.Eq构建方程
      eq1 = sy.Eq( 0, u_max*rho_max*(1 - A*rho_max-B*rho_max**2) )  # 一般方程
      
      f = sy.Function("f")
      eq1 = sy.Eq(f(x).diff(x)+f(x)+f(x)**2,0)                      # 微分方程

sy.solve(方程,未知数)   # 方程求解 ,返回值为list                                 方程求解
                    它的第一个参数是表示方程的表达式,其后的参数是表示方程中未知量的符号。
                      sy.solve(eq1,x)
                      sy.solve(sy.sin(x)+x,x) # 即对 sy.sin(x)+x=0 求解

sy.roots(expr)     # 计算单变量方程expr=0的根                                   方程求解
 
sy.dsolve(eq1,f(x))  # 微分方程求解                                            微分方程求解
                      可以对微分方程进行符号求解,它的第一个参数是一个带未知函数的表达式,第二个参数是需要进行求解的未知函数。
                      它在解微分方程中可以传递hint参数,指定微分方程的解法,若设置为“best”则放dsolve()尝试所有的方法并返回最简单的解。

########### 表达式数值计算   
lambdify()                                              将表达式转换为数值运算的函数
       from sympy.utilities.lambdify import lambdify
       func = lambdify(x, big_expression_containing_x,modules = 'numpy') # returns a numpy-ready function
                  lambdify([x],f(x),modules="numpy") 第一个参数为自变量列表
                                                     第二个参数为由自变量组成的表达式
                                                     第三个参数 modules="numpy" 可理解为自变量接受的数据类型
       numpy_array_of_results = func(numpy_arr) 

sy.N()                                                  求值函数
        sy.N(数值版式,精度)  如 sy.N(sy.pi,20)
        
expr.evalf(精度)                                         求值方法
        sy.pi.evalf(n=50)

##################

x = sy.symbols("x")
f = sy.Sum(sy.Indexed('x',i)*sy.cos(i*sy.pi),(i,1,10))                   # 离散量
f
y = np.array([0,0,0,50,-15,-10,-5,-2,-1,0,0,0,0,0,0,0])

from sympy.utilities.lambdify import lambdify
func = lambdify(x, f, 'numpy') # returns a numpy-ready function
numpy_array_of_results = func(y)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值