今天白天写了很长时间的高数题,然后晚上就想着看一下自己从图书馆借来的《Python科学计算》那本书,毕竟借来的书总得翻翻看吧。这里主要简单整理一下自己看得高数中常用知识点使用Python来求解的知识点。
求极限:
from sympy import *
x = Symbol('x')
limit(sin(x)/x, x, 0) # 结果为1
limit((1+1/x)**x, x, oo) # 结果为e
使用Symbol创建一个自变量, 然后使用limit函数,第一个参数是需要求极限的函数,第二个参数是自变量,第三个是自变量趋向的值。
求导数与微分:
x = Symbol('x')
y = Symbol('y')
diff(sin(x)+cos(x), x) # -sin(x) + cos(x)
diff(x**2, x, 2) # 2
diff(sin(x*y), x, 2, y, 2) # x**2*y**2*sin(x*y) - 4*x*y*cos(x*y) - 2*sin(x*y)
t = Derivative(x * E**x, x)
t.doit() # x*exp(x) + exp(x)
t = Derivative(x * E**x, x, 3)
t.doit() # (x + 3)*exp(x)
求导与微分,可以定义多个自变量,还可以制定自变量的导数阶数,默认是求一阶导数
求n阶泰勒公式:
from __future__ import division # 让除法能够做浮点除法运算,而不是整除,只保留整数部分
# 对sin(x)展开到十阶麦克劳林公式
series(sin(x), x, 0, 10) # x - x**3/6 + x**5/120 - x**7/5040 + x**9/362880 + O(x**10)
# 对1/(1+x)展开到十阶麦克劳林公式
series(1/(1+x), x, 0, 10) # 1 - x + x**2 - x**3 + x**4 - x**5 + x**6 - x**7 + x**8 - x**9 + O(x**10)
# 对ln(1+x)展开x->5时的十阶泰勒公式
series(ln(1+x), x, 5, 10)
# log(6) - 5/6 - (x - 5)**2/72 + (x - 5)**3/648 - (x - 5)**4/5184 + (x - 5)**5/38880 - (x - 5)**6/279936 + (x - 5)**7/1959552 - (x - 5)**8/13436928 + (x - 5)**9/90699264 + x/6 + O((x - 5)**10, (x, 5))
第一个参数时表达式,第二个参数是自变量,第三个是展开到多少阶数,即多少次方的高阶无穷小
求积分:
Integral(1/(1+x**2), x).doit() # atan(x)
Integral(sin(x)**4, (x, 0, pi/2)).doit() # 华理氏公式,I(4)时, 结果为3*pi/16
Integral(1/(E**x), (x, 0, oo)).doit() # 1
只提供自变量,则计算的为不定积分,若提供了包含3个元素的元组,则计算其定积分
求微分方程:
dsolve(Derivative(f(x), x, 2)-f(x), f(x)) # Eq(f(x), C1*exp(-x) + C2*exp(x))
dsolve(Derivative(f(x), x) - x - 2 * f(x), f(x)) # Eq(f(x), (C1 + (-2*x - 1)*exp(-2*x)/4)*exp(2*x))
有空接着补充。