Python在高等数学和线性代数中的应用

这篇具有很好参考价值的文章主要介绍了Python在高等数学和线性代数中的应用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Python数学实验与建模学习

目录

1. SymPy工具库

1.1 符号运算基础

1.2 用SymPy做符号函数画图

 2. 高等数学的符号解

2.1 极限

2.2 导数 

2.3 级数求和 

2.4 泰勒展开 

2.5 不定积分和定积分 

2.6 代数方程 

2.7 微分方程 

3. 高等数学问题的数值解

3.1 一重积分

3.1.1 梯形计算

3.1.2 辛普森计算

3.2 多重积分

3.3 非线性方程数值解

3.3.1 二分法求根

3.3.2 牛顿迭代法求根

3.3.3 scipy工具库求解

 3.4 极值点的数值解

3.4.1 一元函数

3.4.2 多元函数

4. 线性代数的符号解和数值解

4.1 线性方程组

4.2 齐次线性方程组 nullspace

4.3 非齐次线性方程

4.4 特征值与特征向量

4.5 可逆矩阵与对角阵


1. SymPy工具库

1.1 符号运算基础

使用SymPy库进行符号计算,首先要建立符号变量及符号表达式。符号变量可以通过库中的symbols()创建。创建多个变量时以空格分隔。也可以将m0:3传入符号函数,生成如m0,m1,m2的符号序列,定义符号变量。

在符号计算中,可以使用evalf()或者n()的方法来获得任何对象的浮点近似值。subs()方法代入值示例如下:

from sympy import *
x,y,z=symbols('x  y  z')
m0,m1,m2,m3=symbols('m0:4')  #创建多个符号变量
x=sin(1)
print("x=",x); 
print("x=",x.evalf())
print("x=",x.n(16))  #显示小数点后16位数字
print("pi的两种显示格式:{},{}".format(pi,pi.evalf(3)))  #这里不能使用n()函数
expr1=y*sin(y**2)  #创建第一个符号表达式
expr2=y**2+sin(y)*cos(y)+sin(z)  #创建第二个符号表达式
print("expr1=",expr1)
print("y=5时,expr1=",expr1.subs(y,5))  #代入一个符号变量的值
print("y=2,z=3时,expr2=",expr2.subs({y:2,z:3}))  #代入y=2,z=3
print("y=2,z=3时,expr2=",expr2.subs({y:2,z:3}).n())  #以浮点数显示计算结果

together和apart方法使用示例如下:

from sympy import *
x1,x2,x3,x4=symbols('m1:5'); x=symbols('x')
print(x1/x2+x3/x4)
print(together(x1/x2+x3/x4))#展开
print((2*x**2+3*x+4)/(x+1))
print(simplify((2*x**2+3*x+4)/(x+1)))  #化简没有效果
print(apart((2*x**2+3*x+4)/(x+1)))

 1.2 用SymPy做符号函数画图

Python在高等数学和线性代数中的应用,数学建模,python

from sympy.plotting import plot
from sympy.abc import x , pi
from sympy.functions import sin,cos

plot((2*sin(x),(x,-6,6)),(cos(x + pi/4),(x,-5,5)))

 Python在高等数学和线性代数中的应用,数学建模,python

Python在高等数学和线性代数中的应用,数学建模,python

from sympy.plotting import plot3d
from sympy.abc import x , pi
from sympy.functions import sin,sqrt

plot3d(sin(sqrt(x**2 + y**2)),(x,-10,10),(y,-10,10),xlabel = '$x$',ylabel = '$y$')

 Python在高等数学和线性代数中的应用,数学建模,python

Python在高等数学和线性代数中的应用,数学建模,python

from sympy import plot_implicit as pt,Eq
from sympy.abc import x,y
pt(Eq((x-1)**2 + (y-2)**3,4),(x,-6,6),(y,-4,4),xlabel = '$x$',ylabel = '$y$')

Python在高等数学和线性代数中的应用,数学建模,python

2. 高等数学的符号解

2.1 极限

Python在高等数学和线性代数中的应用,数学建模,python

求极限用limit()

from sympy import *
x = symbols('x')
print(limit(sin(x)/x,x,0))#求出1
print(limit((1 + 1/x)**x,x,oo))#求出e

2.2 导数 

Python在高等数学和线性代数中的应用,数学建模,python 

 求导数用diff()

from sympy import *
x,y = symbols('x y')
z = sin(x) + x**2 * exp(y)
#二阶偏导数
print(diff(z,x,2))#求出2*exp(y) - sin(x)
#一阶偏导数
print(diff(z,y))#求出x**2*exp(y)

2.3 级数求和 

Python在高等数学和线性代数中的应用,数学建模,python

factor可以把计算结果因式分解,级数求和用summation

from sympy import*
k,n=symbols ('k n')
print(summation(k**2, (k, 1,n)))#n**3/3 + n**2/2 + n/6
print(factor(summation(k**2, (k, 1,n))))#n*(n + 1)*(2*n + 1)/6
print(summation(1/k**2,(k,1,oo)))#pi**2/6

2.4 泰勒展开 

 Python在高等数学和线性代数中的应用,数学建模,python

"""级数展开:series(函数表达式, x0, n),使用.removeO()去除皮亚诺余项,remove后面的o大写"""
from sympy import*
from sympy.plotting import*
x=symbols('x'); 
y=sin(x)
for k in range(3,8,2): 
    print(y.series(x,0,k))
plot(y,series(y, x, 0, 3).removeO(),series(y, x, 0, 5).removeO(),series(y, x, 0, 7).removeO(),(x,0,2),xlabel = '$x$',ylabel = '$y$')

2.5 不定积分和定积分 

Python在高等数学和线性代数中的应用,数学建模,python

不定积分用integrate 

from sympy import integrate,symbols,pi,oo,sin
x=symbols ('x')
print(integrate(sin(2*x),(x,0,pi)))#0
print(integrate(sin(x)/x,(x,0,oo)))#pi/2

2.6 代数方程 

Python在高等数学和线性代数中的应用,数学建模,python 

求方程使用solve

from sympy import*
x,y=symbols('x y')
print(solve(x**3-1,x))
print(solve((x-2)**2*(x-1)**3,x))
print(roots((x-2)**2*(x-1)**3,x))#roots得到根重数的情况

Python在高等数学和线性代数中的应用,数学建模,python 

from sympy import*
x,y=symbols('x y')
print(solve([x**2 + y**2 -1,x - y],[x,y]))#[(-sqrt(2)/2, -sqrt(2)/2), (sqrt(2)/2, sqrt(2)/2)]

Python在高等数学和线性代数中的应用,数学建模,python

from sympy import *
x=symbols('x'); y=2*x**3-5*x**2+x
x0=solve(diff(y,x),x)   #求驻点
print("驻点的精确解为",x0)
print("驻点的浮点数表示为:",[x0[i].n() for i in range(len(x0))])  #列表中的符号数无法整体转换为浮点数
y0=[y.subs(x,0),y.subs(x,1),y.subs(x,x0[0]).n()] #代入区间端点和一个驻点的值
print("三个点的函数值分别为:",y0)

2.7 微分方程 

sympy库提供desolve求常微分方程的符号解,在声明时可以使用Function()函数。

Python在高等数学和线性代数中的应用,数学建模,python

from sympy import *
x=symbols('x'); 
y=symbols('y',cls=Function)#y = Function('y')
eq1=diff(y(x),x,2)-5*diff(y(x),x)+6*y(x)
eq2=diff(y(x),x,2)-5*diff(y(x),x)+6*y(x)-x*exp(2*x)
print("齐次方程的解为:",dsolve(eq1,y(x)))
print("非齐次方程的解为:",dsolve(eq2,y(x)))

Python在高等数学和线性代数中的应用,数学建模,python

from sympy import *
x = symbols('x')
y = Function('y')
eq1 = diff(y(x),x,2) - 5*diff(y(x),x) + 6*y(x)
eq2 = diff(y(x),x,x) - 5*diff(y(x),x) + 6*y(x) - x*exp(2*x)
print(dsolve(eq1,y(x),ics={y(0):1,diff(y(x),x).subs(x,0):0}))
print(dsolve(eq2,y(x),ics={y(0):1,y(2):0}))

3. 高等数学问题的数值解

大多数实际问题无法用符号解,只能求数值解,即近似值。

3.1 一重积分

一重积分可以用梯形公式、辛普森公式或者sympy库的quad直接求解

3.1.1 梯形计算

Python在高等数学和线性代数中的应用,数学建模,python

def trapezoid(f,n,a,b):    #定义梯形公式的函数
    xi=np.linspace(a,b,n); h=(b-a)/(n-1)
    return h*(np.sum(f(xi))-(f(a)+f(b))/2)

3.1.2 辛普森计算

Python在高等数学和线性代数中的应用,数学建模,python

def simpson(f,n,a,b):     #定义辛普森公式的函数
    xi, h=np.linspace(a,b,2*n+1), (b-a)/(2.0*n)
    xe=[f(xi[i]) for i in range(len(xi)) if i%2==0]
    xo=[f(xi[i]) for i in range(len(xi)) if i%2!=0]
    return h*(2*np.sum(xe)+4*np.sum(xo)-f(a)-f(b))/3.0

 3.2 多重积分

多重积分使用dblquad和tplquad直接求解数值解。

Python在高等数学和线性代数中的应用,数学建模,python

import numpy as np
from scipy.integrate import dblquad

f1=lambda y, x: x*y**2  #第一个被积函数
print("I1:",dblquad(f1, 0, 2, 0, 1))

f2=lambda y, x: np.exp(-x**2/2)*np.sin(x**2+y)
bd=lambda x: np.sqrt(1-x**2)
print("I2:",dblquad(f2, -1, 1, lambda x: -bd(x), bd))

Python在高等数学和线性代数中的应用,数学建模,python

import numpy as np
from scipy.integrate import tplquad
f=lambda z, y, x: z*np.sqrt(x**2+y**2+1)
ybd=lambda x: np.sqrt(2*x-x**2)
print("I=",tplquad(f, 0, 2, lambda x: -ybd(x),ybd, 0, 6))

 【注】必须按照积分次序来书写匿名函数的自变量顺序

3.3 非线性方程数值解

3.3.1 二分法求根


def binary_search(f, eps, a, b):  #二分法函数
    c=(a+b)/2
    while np.abs(f(c))>eps:
        if f(a)*f(c)<0: b=c
        else: a=c
        c=(a+b)/2
    return c

3.3.2 牛顿迭代法求根

def newton_iter(f, eps, x0, dx=1E-8):  #牛顿迭代法函数
    def diff(f, dx=dx):   #求数值导数函数
        return lambda x: (f(x+dx)-f(x-dx))/(2*dx)
    df=diff(f,dx)
    x1=x0-f(x0)/df(x0)
    while np.abs(x1-x0)>=eps:
        x1, x0=x1-f(x1)/df(x1), x1
    return x1

3.3.3 scipy工具库求解

Python在高等数学和线性代数中的应用,数学建模,python

import numpy as np
from scipy.optimize import fsolve

def binary_search(f, eps, a, b):  #二分法函数
    c=(a+b)/2
    while np.abs(f(c))>eps:
        if f(a)*f(c)<0: b=c
        else: a=c
        c=(a+b)/2
    return c

def newton_iter(f, eps, x0, dx=1E-8):  #牛顿迭代法函数
    def diff(f, dx=dx):   #求数值导数函数
        return lambda x: (f(x+dx)-f(x-dx))/(2*dx)
    df=diff(f,dx)
    x1=x0-f(x0)/df(x0)
    while np.abs(x1-x0)>=eps:
        x1, x0=x1-f(x1)/df(x1), x1
    return x1

f=lambda x: x**3+1.1*x**2+0.9*x-1.4
print("二分法求得的根为:", binary_search(f,1E-6,0,1))
print("牛顿迭代法求得的根为:",newton_iter(f,1E-6,0))
print("直接调用SciPy求得的根为:",fsolve(f,0))

 Python在高等数学和线性代数中的应用,数学建模,python

from numpy import sin
from scipy.optimize import fsolve
f=lambda x: [5*x[1]+3, 4*x[0]**2-2*sin(x[1]*x[2]), x[1]*x[2]-1.5]
print("result=",fsolve(f, [1.0, 1.0, 1.0]))


#方法二
from numpy import sin
from scipy.optimize import fsolve
def Pfun(x):
    x1,x2,x3=x.tolist()  #x转换成列表
    return 5*x2+3, 4*x1**2-2*sin(x2*x3), x2*x3-1.5
print("result=",fsolve(Pfun, [1.0, 1.0, 1.0]))

 3.4 极值点的数值解

3.4.1 一元函数

(1)在区间上求解极小点用fminbound

Python在高等数学和线性代数中的应用,数学建模,python

from numpy import exp,cos
from scipy.optimize import fminbound
f=lambda x: exp(x)*cos(2*x)
x0=fminbound(f,0,3)
print("极小点为:{},极小值为:{}".format(x0,f(x0)))

(2)求在某个点附近的极小值点用fmin

Python在高等数学和线性代数中的应用,数学建模,python

from numpy import exp,cos
from scipy.optimize import fmin
f=lambda x: exp(x)*cos(2*x)
x0=fmin(f,0)
print("极小点为:{},极小值为:{}".format(x0,f(x0)))

3.4.2 多元函数

多元函数求解极小值点用minimize

Python在高等数学和线性代数中的应用,数学建模,python

from scipy.optimize import minimize
f=lambda x: 100*(x[1]-x[0]**2)**2+(1-x[0])**2; 
x0=minimize(f,[2.0, 2.0])
print("极小点为:{},极小值为:{}".format(x0.x,x0.fun))

4. 线性代数的符号解和数值解

Python在高等数学和线性代数中的应用,数学建模,python

 4.1 线性方程组

Python在高等数学和线性代数中的应用,数学建模,python

import sympy as sp
A = sp.Matrix([[2,1,-5,1],[1,-3,0,-6],[0,2,-1,2],[1,4,-7,6]])
B = sp.Matrix([8,6,-2,2])
B.transpose()
print(A.rank())#秩
print(A.inv()*B)#惟一解

4.2 齐次线性方程组 nullspace

Python在高等数学和线性代数中的应用,数学建模,python

import sympy as sp
A=sp.Matrix([[1, -5, 2, -3], [5, 3, 6, -1], [2, 4, 2, 1]])
print(A.nullspace())#基础解系

4.3 非齐次线性方程

Python在高等数学和线性代数中的应用,数学建模,python

import sympy as sp
A=sp.Matrix([[1, 1, -3, -1],[3, -1, -3, 4], [1, 5, -9, -8]])
b=sp.Matrix([1, 4, 0]); 
b.transpose()
C=A.row_join(b)  #构造增广矩阵
print("增广阵的行最简形为:\n",C.rref())

4.4 特征值与特征向量

 eigenvals ()求特征值,eigenvects ()求特征向量

4.5 可逆矩阵与对角阵

使用diagonalize()求解,is_diagonalizable ()用来判断矩阵是否可以对角化文章来源地址https://www.toymoban.com/news/detail-824126.html

到了这里,关于Python在高等数学和线性代数中的应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • AI人工智能中的数学基础原理与Python实战: 线性代数基础概述

    随着人工智能技术的不断发展,人工智能已经成为了许多行业的核心技术之一。在人工智能领域中,数学是一个非常重要的基础。线性代数是数学中的一个重要分支,它在人工智能中发挥着至关重要的作用。本文将介绍线性代数的基本概念、算法原理、具体操作步骤以及数学

    2024年04月12日
    浏览(35)
  • 线性代数与线性分析:数学基础与实际应用

    线性代数是数学的一个分支,主要研究的是线性方程组和线性空间。线性方程组是指形式为 ax+by=c 的方程组,其中 a,b,c 是已知数。线性空间是指一个向量空间,其中任何两个向量之间的线性组合都还是该空间中的向量。线性分析则是数学分析的一个分支,主要研究的是函数的

    2024年04月25日
    浏览(25)
  • 高等代数(七)-线性变换03:线性变换的矩阵

    § 3 § 3 §3 线性变换的矩阵 设 V V V 是数域 P P P 上 n n n 维线性空间, ε 1 , ε 2 , ⋯   , ε n varepsilon_{1}, varepsilon_{2}, cdots, varepsilon_{n} ε 1 ​ , ε 2 ​ , ⋯ , ε n ​ 是 V V V 的一组基, 现在我们来建立线性变换与矩阵的关系. 空间 V V V 中任一向量 ξ xi ξ 可以经 ε 1 , ε 2 , ⋯  

    2024年02月20日
    浏览(35)
  • 高等代数--多项式与线性空间

    1.多项式的定义: 形如 f(x)= an*x^n+.......ai*x^i+...a0 ,叫做多项式,其中ai 是系数,x 是未知数,i 叫做 指数。 若an 不为0称f(x)位 n 次多项式,记作 deg f(x) 如果 a0 !=0,且 ai ==0 (i=1.2....n)则称f(x)为零次多项式,f(x)=b;等同于K 中非零元 规定 0 多项式 的次数,d

    2024年02月04日
    浏览(48)
  • 【线性代数及其应用 —— 第一章 线性代数中的线性方程组】-1.线性方程组

    所有笔记请看: 博客学习目录_Howe_xixi的博客-CSDN博客 https://blog.csdn.net/weixin_44362628/article/details/126020573?spm=1001.2014.3001.5502 思维导图如下:  内容笔记如下:

    2024年02月06日
    浏览(45)
  • 高等代数(八)-线性变换07:矩阵的有理标准形

    § 7 矩阵的有理标准形 前一节中证明了复数域上任一矩阵 A boldsymbol{A} A 可相似于一个若尔当形矩阵, 这一节将对任意数域 P P P 来讨论类似的问题. 我们证明 P P P 上任一矩阵必相似于一个有理标准形矩阵. 定义 8 对数域 P P P 上的一个多项式 d ˙ ( λ ˙ ) = λ n ˙ + a 1 λ n − 1 + ⋯

    2024年02月19日
    浏览(35)
  • 线性代数在AI中的应用

    作者:禅与计算机程序设计艺术 人工智能(AI)作为当今技术发展的前沿领域,在近几年中迅速崛起,在各行各业都得到了广泛的应用。这其中,线性代数作为AI算法的基础数学工具,在AI模型的构建、训练和优化中发挥着关键作用。本文将深入探讨线性代数在AI领域的核心应用,帮助读

    2024年04月11日
    浏览(31)
  • 线性代数在游戏开发中的应用

    线性代数是数学中的一个重要分支,它主要研究的是线性方程组和向量空间等概念。在现实生活中,线性代数的应用非常广泛,包括经济、科学、工程等各个领域。游戏开发也不例外,线性代数在游戏中的应用非常广泛,包括游戏物理引擎的实现、游戏AI的智能化、游戏优化

    2024年02月20日
    浏览(33)
  • 线性代数在图论中的应用

    图论是一门研究有限数量的点(节点)和它们之间的关系(边)的学科。图论在计算机科学、数学、物理、生物学和社会科学等领域具有广泛的应用。线性代数则是一门研究向量和矩阵的学科,它在许多领域中都有着重要的应用,包括物理学、生物学、经济学和人工智能等。

    2024年02月03日
    浏览(30)
  • 线性代数在生物信息学中的应用

    生物信息学是一门研究生物学信息的科学,它涉及到生物数据的收集、存储、处理、分析和挖掘。生物信息学的应用范围广泛,包括基因组学、蛋白质结构和功能、生物网络、生物信息数据库等方面。线性代数是一门数学分支,它研究的是向量和矩阵之间的关系和运算。线性

    2024年04月28日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包