Python数学建模-2.8SymPy库

SymPy库是一个强大的符号计算库,它为Python提供了符号数学计算的能力,它提供了大量的数学符号操作的函数和类,可以帮助用户进行各种复杂的数学计算,如代数、微积分、离散数学、量子力学等。与NumPy等库主要关注数值计算不同,SymPy专注于数学表达式的符号运算。这使得SymPy在处理代数、微积分、离散数学以及物理学的许多领域中的问题时非常有用。

1.SymPy库的主要特点

  1. 符号表达式:SymPy允许用户使用符号变量代替具体的数值进行计算。这使得用户可以构建和操作复杂的数学表达式,而无需立即进行数值评估。

  2. 代数运算:SymPy提供了丰富的代数运算功能,包括符号表达式的加法、减法、乘法、除法、幂运算、对数运算等。此外,它还可以进行因式分解、展开、简化等代数操作。

  3. 微积分:SymPy可以处理微积分问题,包括求导、积分以及微分方程的求解。用户可以通过简单的函数调用,对符号表达式进行求导或积分运算。

  4. 离散数学:SymPy还提供了处理离散数学问题的功能,如求解差分方程、处理组合数学和概率论中的表达式等。

  5. 矩阵运算:SymPy提供了矩阵运算的功能,包括矩阵的创建、转置、求逆、行列式计算、特征值和特征向量的求解等。

  6. 与其他库的集成:SymPy可以与Python中的其他数学库(如NumPy、SciPy)进行无缝集成,从而提供更加全面和强大的数学计算能力。

使用SymPy库时,用户通常需要首先定义符号变量,然后构建符号表达式,最后调用相应的函数进行运算。例如,可以使用symbols函数定义符号变量,使用Eq类创建等式,然后使用solve函数求解方程。同样地,可以使用diff函数进行求导运算,使用integrate函数进行积分运算等。

2.基本用法

首先,我们需要导入SymPy库:

from sympy import symbols, Eq, solve, diff, integrate, simplify

定义符号变量

使用symbols函数可以定义符号变量:

x, y = symbols('x y')

构建符号表达式

定义符号变量后,我们可以构建符号表达式:

expr = x**2 + 2*x*y + y**2

方程求解

使用Eq类可以创建等式,然后使用solve函数来求解方程:

equation = Eq(x**2 + y**2, 1)  # 定义方程 x^2 + y^2 = 1  
solutions = solve(equation.subs(y, 1), x)  # 将y替换为1,然后解方程  
print(solutions)  # 输出方程解

 输出结果:

[0]

求导

使用diff函数可以对符号表达式进行求导:

 

derivative = diff(x**2, x)  # 对x^2关于x求导  
print(derivative)  # 输出导数结果

输出结果:

2*x

积分

使用integrate函数可以对符号表达式进行积分:

integral = integrate(x**2, x)  # 对x^2关于x进行积分  
print(integral)  # 输出积分结果

输出结果

 x**3/3

表达式化简

使用simplify函数可以对复杂的符号表达式进行化简:

expr_complex = x**2 + 2*x*y + y**2  
simplified_expr = simplify(expr_complex)  # 化简表达式  
print(simplified_expr)  # 输出化简后的表达式

输出结果:

x**2 + 2*x*y + y**2

矩阵运算

SymPy也支持矩阵运算。可以使用Matrix类来创建矩阵,并进行各种矩阵运算:

from sympy import Matrix  
  
# 创建一个2x2矩阵  
matrix_A = Matrix([[1, 2], [3, 4]])  
  
# 计算矩阵的行列式  
determinant = matrix_A.det()  
print(determinant)  
  
# 计算矩阵的逆  
inverse_matrix = matrix_A.inv()  
print(inverse_matrix)

输出结果:

-2
Matrix([[-2, 1], [3/2, -1/2]])

交换变量值

虽然SymPy本身并没有直接提供交换变量值的函数,但你可以通过简单的赋值操作来实现:

from sympy import symbols, Eq, solve, diff, integrate, simplify

a, b = symbols('a b')
a_value = 10
b_value = 20

# 交换变量值
a, b = b, a

print(a)  # 输出20
print(b)  # 输出10

输出结果:

b
a
这些只是SymPy库功能的一部分,实际上SymPy提供了许多其他功能,如求解微分方程、处理几何对象、进行多项式运算等。


3.实例操作

例1:求方程组的符号解。

\left\{\begin{matrix} _{x1^2+x2^2=1,} & & \\ {x1}= {x2.}& & \end{matrix}\right.

解:

方法1:

import sympy as sp
sp.var('x1,x2')
s=sp.solve([x1**2+x2**2-1,x1-x2],[x1,x2])
print(s)

输出结果:

[(-sqrt(2)/2, -sqrt(2)/2), (sqrt(2)/2, sqrt(2)/2)]

方法2:

import sympy as sp
x = sp.var('x:2')  #定义符号数组
s = sp.solve([x[0]**2+x[1]**2-1,x[0]-x[1]], x)
print(s)

输出结果:

[(-sqrt(2)/2, -sqrt(2)/2), (sqrt(2)/2, sqrt(2)/2)]

例2:求下列矩阵的特征值和特征向量的符号解:

\begin{bmatrix} 0 & 0 & 0& 1\\ 0& 0& 1& 0\\ 0 & 1 &0 &0 \\ 1 &0 &0 &0 \end{bmatrix}

解:

import numpy as np
import sympy as sp
a = np.identity(4)  #单位矩阵的另一种写法
b = np.rot90(a)
c = sp.Matrix(b)
print('特征值为:', c.eigenvals())
print('特征向量为:\n', c.eigenvects())

 输出结果:

特征值为: {-1.00000000000000: 2, 1.00000000000000: 2}
特征向量为:
 [(-1.00000000000000, 1, [Matrix([
[                 0],
[-0.707106781186548],
[ 0.707106781186548],
[                 0]])]), (1.00000000000000, 1, [Matrix([
[                 0],
[-0.707106781186548],
[-0.707106781186548],
[                 0]])]), (-1.00000000000000, 1, [Matrix([
[ 0.707106781186548],
[                 0],
[                 0],
[-0.707106781186548]])]), (1.00000000000000, 1, [Matrix([
[-0.707106781186548],
[                 0],
[                 0],
[-0.707106781186548]])])]

个人认为用SymPy没有Numpy好用,可以回见2.4内容

import numpy as np
a = np.eye(4)
b = np.rot90(a)
c, d = np.linalg.eig(b)
print('特征值为:', c)
print('特征向量为:\n', d)


#或者
import numpy as np

# 定义一个矩阵
A = np.array([[0, 0,0,1], [0,0,1,0],[0,1,0,0],[1,0,0,0]])

# 使用numpy.linalg.eig求特征值和特征向量
eigenvalues, eigenvectors = np.linalg.eig(A)

print("特征值:")
print(eigenvalues)

print("特征向量:")
print(eigenvectors)

输出结果:

特征值为: [ 1. -1.  1. -1.]
特征向量为:
 [[ 0.70710678  0.70710678  0.          0.        ]
 [ 0.          0.          0.70710678 -0.70710678]
 [ 0.          0.          0.70710678  0.70710678]
 [ 0.70710678 -0.70710678  0.          0.        ]]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/471112.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

GAMES101 学习3

Lecture 13 ~ 16 Shadow mapping 一种图像空间算法生成阴影时不需要知道场景中的几何信息会产生走样现象 最重要的思想:如果有的点不在阴影里你又能看到这个点,那么说明摄像机可以看到这个点,光源也可以看到这个点 经典的Shadow mapping …

【管理咨询宝藏54】资产管理公司战略规划报告

本报告首发于公号“管理咨询宝藏”,如需阅读完整版报告内容,请查阅公号“管理咨询宝藏”。 【管理咨询宝藏54】资产管理公司战略规划报告 【格式】PPT,可自由编辑 【关键词】战略规划、商业分析、管理咨询 【核心观点】 - 随着本地和国外资…

最新Java面试题3【2024初级】

下载链接:博主已将以上这些面试题整理成了一个面试手册,是PDF版的 互联网大厂面试题 1:阿里巴巴Java面试题 2:阿里云Java面试题-实习生岗 3:腾讯Java面试题-高级 4:字节跳动Java面试题 5:字…

计算机毕业设计-基于python的旅游信息爬取以及数据分析

概要 随着计算机网络技术的发展,近年来,新的编程语言层出不穷,python语言就是近些年来最为火爆的一门语言,python语言,相对于其他高级语言而言,python有着更加便捷实用的模块以及库,具有语法简单…

diffusion model(十四): prompt-to-prompt 深度剖析

infopaperPrompt-to-Prompt Image Editing with Cross Attention Controlgithubhttps://github.com/google/prompt-to-promptOrg:Google Research个人复现https://github.com/myhz0606/diffusion_learning个人博客主页http://myhz0606.com/article/p2p 1 前言 基于扩散模型&a…

LightGBM:更好更快地用于工业实践集成学习算法

AI预测相关目录 AI预测流程,包括ETL、算法策略、算法模型、模型评估、可视化等相关内容 最好有基础的python算法预测经验 EEMD策略及踩坑VMD-CNN-LSTM时序预测对双向LSTM等模型添加自注意力机制K折叠交叉验证optuna超参数优化框架多任务学习-模型融合策略Transform…

教务管理系统(java+mysql+jdbc+Druid+三层架构)

1、项目要求 1.1数据库表描述 设计一个教务管理系统,要求如下: 系统涉及的表有 account表(账号表) teacher表(教师表) student表(学生表) course表 (课程表) score表(成…

2022年安徽省职业院校技能大赛 (高职组)“云计算”赛项样卷

#需要资源或有问题的,可私博主!!! #需要资源或有问题的,可私博主!!! #需要资源或有问题的,可私博主!!! 第一场次:私有云(5…

Redis高阶使用消息队列分布式锁排行榜等

一、前言 在大多数传统的web系统中,使用Redis一般都是作为缓存使用,在大数据查询时作为缓解性能的一种解决方案。博主的的系统中使用Redis也主要使用到缓存的作用,还有做了注册中心,分布式事务。其他的强大的功能,没有…

【HMM】Hidden Markov Model

文章目录 1 HMM 的概念1.1 引入1.1.1 Markov property1.1.2 Markov chain1.1.3 一阶离散马尔可夫模型 1.2 HMM 的定义1.3 观测序列的生成过程1.4 HMM 的 3 个基本问题 2 三个基本问题的解法2.1 概率计算算法2.1.1 直接计算法2.1.2 向前算法2.1.3 向后算法2.1.4 一些概率与期望值…

localhost与127.0.0.1的区别 竟然还有人不知道?

localhost和127.0.0.1有什么区别?   很多用户都有接触过回送地址127.0.0.1用来测试一些数据,localhost在严格意义上来说是一个本地的服务器,编程用户或许更了解localhost的存在意义。   大多数使用localhost的编程工作者,实际…

java.lang.NoSuchFieldError: ASSIGN_ID

一、写在前面 很多时候我们都会遇到这个异常,我的场景是与mybatis有关,若看客不是此类情形,仅做参考即可。 二、异常提示 Caused by: java.lang.NoSuchFieldError: ASSIGN_IDat com.baomidou.mybatisplus.core.config.GlobalConfig$DbConf…

基于cifar-10的图像分类

一、 背景 CIFAR-10 数据集由 10 类中的 60000 张 32x32 彩色图像组成,每类 6000 张图像。有 50000 张训练图像和 10000 张测试图像。数据集分为五个训练批次和一个测试批次,每个批次有 10000 张图像。测试批次包含来自每个类的 1000 个随机选择的图像。…

国创证券|新手建议不要买哪些股票?新手股票避雷!

出资者在进行股票生意之前,对股票的选择也是一种很重要的环节,特别是对于新手出资者来说,很简单踩雷。那么新手主张不要买哪些股票?下面就由国创证券为我们分析: 新手主张不要买哪些股票? 1、业绩差的股票…

[LeetCode][LCR170]交易逆序对的总数

题目 LCR 170. 交易逆序对的总数 在股票交易中,如果前一天的股价高于后一天的股价,则可以认为存在一个「交易逆序对」。请设计一个程序,输入一段时间内的股票交易记录 record,返回其中存在的「交易逆序对」总数。 示例 1&#xf…

ABAQUS应用05——将开发好的Python封装起来供后续开发调用

闲话不多说,把写好的py文档放置在这里调用即可。 放置进来以后,会自动形成同名的pyc文件。有意思的是,此时将py文件和pyc文件删掉都不会影响建模,但是关掉ABAQUS再打开就会找不到。不过我想如果保留pyc文件的话应该不成问题。当…

AI - 机器学习GBDT算法

目录 GBDT 提升树 梯度提升树 GBDT算法实战案例 XGBoost 😆😆😆感谢大家的观看😆😆 GBDT 梯度提升决策树(Gradient Boosting Decision Tree),是一种集成学习的算法&…

web前端之多种方式实现switch滑块功能、动态设置css变量、after伪元素、选择器、has伪类

MENU 效果图htmlcsshtmlcssJS 效果图 htmlcss html <div class"s"><input type"checkbox" id"si" class"si"><label for"si" class"sl"></label> </div>style * {margin: 0;pad…

vue-admin-template极简的 vue admin 管理后台的动态路由实现方法

项目源码地址&#xff1a;GitHub - PanJiaChen/vue-admin-template: a vue2.0 minimal admin template 注意&#xff1a;项目中的路由均写在 src\router\index.js 中&#xff0c;其中默认包含 constantRoutes 数组&#xff0c;这是固定路由&#xff0c;无论用户是什么角色&…

基于PostgreSQL的无代码数据库Teable

什么是 Teable &#xff1f; Teable 是一个基于 Postgres 构建的超快速、实时、专业、开发人员友好的无代码数据库。它使用简单的、类似电子表格的界面来创建复杂的企业级数据库应用程序。通过无代码解锁高效的应用程序开发&#xff0c;摆脱数据安全性和可扩展性的障碍。 下面&…
最新文章