使用Python求解复杂的数学问题

今天白天写了很长时间的高数题,然后晚上就想着看一下自己从图书馆借来的《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))

有空接着补充。

你可能感兴趣的:(Python,数学)