用Python代替MATLAB进行科学计算(一)
本期带来的是,我们平时在运算过程中,遇到的求导,积分,解方程组等科学计算如何在Python中进行解决
首先我们需要有提前安装库sympy,安装的话也就是
pip install sympy
接下来就是直接上代码展示:
展示公式的输出
#! conda env
# -*- coding:utf-8 -*-
# Time:2020/4/10 5:15 下午
# Author : nishizzma
# File : output.py
from sympy import pprint,Symbol,exp,sqrt
from sympy import init_printing
init_printing(use_unicode=True)
x = Symbol('x')
a = sqrt(2)
pprint(a)
print("-----------------")
c = (exp(x) ** 2)/2
pprint(c)
print(c)
简单运算
#! conda env
# -*- coding:utf-8 -*-
# Time:2020/4/10 5:10 下午
# Author : nishizzma
# File : test_1.py
import sympy,math
#简单对有理数进行运算
r1 = sympy.Rational(1/10)
r2 = sympy.Rational(1/10)
r3 = sympy.Rational(1/10)
val = (1/10+1/10+1/10) * 3
print(val)
val2 = (r1 + r2+ r3) * 3
print(val2.evalf())
#求对数
sympy.log(sympy.E)
sympy.log(sympy.E**3)
#以10为底求对数
sympy.log(1000,10)
#求n次方根
sympy.sqrt(4) #求平方根
sympy.root(8,3)
#求k次方
a = 2 ** 3
b = 16 ** (0.5)
#求阶乘
sympy.factorial(4)
#求三角函数
sympy.sin(sympy.pi)
#表示表达式的方法
x = sympy.Symbol('x')
fx = 2*x + 1
c = fx.evalf(subs={x:2})
print(c)
#支持多元表达
x,y = sympy.symbols('x y')
f = 2 * x + y
#以字典的形式传入多个变量的值
f.evalf(subs={x:1,y:2})
#如果只传入一个值,则输出原来的表达式
f.evalf(subs={x:1})
解方程组:
#! conda env
# -*- coding:utf-8 -*-
# Time:2020/4/10 5:47 下午
# Author : nishizzma
# File : test_3.py
"""
解方程组
"""
import sympy
x = sympy.Symbol('x')
#解简单方程
#解 x - 1 = 0
sympy.solve(x-1,x)
#解方程 x^2 - 1 = 0
sympy.solve(x ** 2 - 1,x)
#在这种情况下,我们还可以将函数式赋给一个变量
f = x + 1
sympy.solve(f,x)
#解多元方程组
x,y = sympy.symbols('x y')
sympy.solve([[x+y-1,x-y-3],[x,y]])
#计算求和式,求和1-100,然后在*2
n = sympy.Symbol('n')
sympy.summation(2*n,(n,1,100))
#对于包含求和式子的方程进行求解
x = sympy.Symbol('x')
i = sympy.Symbol('i',integer=True)
f = sympy.summation(x,(i,1,5)) + 10 * x - 15
sympy.solve(f,x)
求解极限
#! conda env
# -*- coding:utf-8 -*-
# Time:2020/4/10 6:02 下午
# Author : nishizzma
# File : test_4.py
"""
极限求解
"""
import sympy
x = sympy.Symbol('x')
f1 = sympy.sin(x)/x
#当x->0时的结果
sympy.limit(f1,x,0)
f2 = (1+x)**(1/x)
sympy.limit(f2,x,0)
f3 = (1+1/x)**x
sympy.limit(f3,x,float('inf'))
求导,求定积分:
#! conda env
# -*- coding:utf-8 -*-
# Time:2020/4/10 6:47 下午
# Author : nishizzma
# File : test_5.py
"""
求导,求定积分
"""
import sympy
#求导
x = sympy.Symbol('x')
f = x**2 + 2*x + 1
sympy.diff(f,x)
#求定积分,对2x在0-1上进行求导
f = 2 * x
sympy.integrate(f,(x,0,1))
#计算多重积分
t,x = sympy.symbols('t x')
f = 2 * t
g = sympy.integrate(f,(t,0,x))
sympy.integrate(g,(x,0,3))
#求解不定积分
x = sympy.Symbol('x')
f = sympy.E ** x + 2*x
sympy.integrate(f,x)