当前位置: 首页 > news >正文

python sympy库

sympy库是python的符号运算库,是电脑辅助简单数学函数计算的好工具。本文简单记录了一下有关sympy的方法。建议使用jupyter notebook,这样输出的函数很好看。


文章目录

  • sympy基础
    • 安装
    • 自变量(Symbols)
    • 函数表达式(Expr)
    • 变量替换与赋值
    • 精确求值
    • 微分
    • 积分
    • Taylor展开
      • 一元展开
      • 多元展开
      • 查看展开项
    • 极限
    • 解方程
    • 画图

sympy基础

安装

pip install sympy

自变量(Symbols)

通过symbols方法将字符串声明为数学函数的变量,这些变量往往是函数的自变量。

import sympy
# 声明单个变量
x = sympy.symbols('x')# 声明多个变量(以下方法皆可)
x,y = sympy.symbols(['x','y'])
x,y = sympy.symbols("x,y")
x,y = sympy.symbols("x y")

函数表达式(Expr)

函数表达式通过变量的运算构造具体函数,或者通过Function函数构造抽象函数。

f = sympy.sqrt(3*x*y) +x*sympy.sin(y) +y**2 +x**3  # 具体函数
u = sympy.Function('u')  # 抽象函数

变量替换与赋值

expr.subs()可以实现变量替换,替换成数字实现赋值。

g1 = f.subs(x,y) # 将f表达式中的x换成y,并将替换的结果,赋给g
g2 = f.subs({x:2*x, y:2*y}) #多次替换,字典
g3 = f.subs({x:1,y:2})

精确求值

expr.evalf(n)可以求一个表达式的保留n位有效数字的精确值

g3 = f.subs({x:1,y:2})
print(g.evalf(4))  # 8.359

微分

sympy可以实现自动求微分,方法如下

h1 = sympy.diff(f,x)   # f对x求微分
h1 = f.diff(x)   # 同上
h2 = sympy.diff(f,x,2,y,1)  # f对x求2次微分,对y求1次微分

积分

sympy可以实现自动求不定积分和定积分,区别在于是否传入积分上下限

l1 = sympy.integrate(f,x)    # 不定积分
l2 = sympy.integrate(f,(x,1,3))  #定积分

Taylor展开

一元展开

sympy可以实现泰勒展开,具体函数抽象函数都可以。但是不能对多元函数同时泰勒展开。

taylor1 = sympy.series(f,x,0,4)  # f对x在0处泰勒展开到4阶
taylor2 = sympy.series(f,x,0,4).removeO  # f对x在0处泰勒展开到4阶,去除皮亚诺余项
taylor3 = sympy.series(u(x),x,0,4)  # 抽象函数u对x在0处泰勒展开到4阶

多元展开

多元泰勒展开可以使用以下方法
参考链接:https://www.thinbug.com/q/23803320

def Taylor_polynomial_sympy(function_expression, variable_list, evaluation_point, degree):"""Mathematical formulation reference:https://math.libretexts.org/Bookshelves/Calculus/Supplemental_Modules_(Calculus)/Multivariable_Calculus/3%3A_Topics_in_Partial_Derivatives/Taylor__Polynomials_of_Functions_of_Two_Variables:param function_expression: Sympy expression of the function:param variable_list: list. All variables to be approximated (to be "Taylorized"):param evaluation_point: list. Coordinates, where the function will be expressed:param degree: int. Total degree of the Taylor polynomial:return: Returns a Sympy expression of the Taylor series up to a given degree, of a given multivariate expression, approximated as a multivariate polynomial evaluated at the evaluation_point"""from sympy import factorial, Matrix, prodimport itertoolsn_var = len(variable_list)point_coordinates = [(i, j) for i, j in (zip(variable_list, evaluation_point))]  # list of tuples with variables and their evaluation_point coordinates, to later perform substitutionderiv_orders = list(itertools.product(range(degree + 1), repeat=n_var))  # list with exponentials of the partial derivativesderiv_orders = [deriv_orders[i] for i in range(len(deriv_orders)) if sum(deriv_orders[i]) <= degree]  # Discarding some higher-order termsn_terms = len(deriv_orders)deriv_orders_as_input = [list(sum(list(zip(variable_list, deriv_orders[i])), ())) for i in range(n_terms)]  # Individual degree of each partial derivative, of each termpolynomial = 0for i in range(n_terms):partial_derivatives_at_point = function_expression.diff(*deriv_orders_as_input[i]).subs(point_coordinates)  # e.g. df/(dx*dy**2)denominator = prod([factorial(j) for j in deriv_orders[i]])  # e.g. (1! * 2!)distances_powered = prod([(Matrix(variable_list) - Matrix(evaluation_point))[j] ** deriv_orders[i][j] for j in range(n_var)])  # e.g. (x-x0)*(y-y0)**2polynomial += partial_derivatives_at_point / denominator * distances_poweredreturn polynomialTaylor_polynomial_sympy(u(x,y),[x,y],[0,0],2)  #函数u对(x,y)在(0,0)处泰勒展开

查看展开项

taylor1.coeff(x)  # 查看taylor1中x项(x-x0项)的系数。 

极限

sympy可以实现求极限,注意极限方向

lim1 = sympy.limit(f, x, sympy.oo)  # 趋于无穷
lim2 = sympy.limit(f, x, 0)  # 趋于0,默认值 dir='+',也就是趋于+0
lim3 = sympy.limit(f, x, 0, dir="-")  # 趋于0,默认值调整为dir='-',也就是趋于-0

解方程

sympy可以实现解方程,方法是令Expr=0,所以在解方程时,要先构造一个等于0的左端项。返回结果是一个列表,每一项是一个解。如果是方程组,解列表每一项是一个元组,元组对应位置是对应自变量的值。

func = f-3
sympy.solve(func,x)  # 返回f=3时x的值
sympy.solve([x**2+y**2-1, x+y-1],[x,y])  #x^2+y^2=1;x+y=1

画图

sympy可以实现绘制函数图像,要先安装matplotlib库。

pip install matplotlib

sympy可以绘制一元函数、二元函数、隐函数的图像,方法如下

from sympy.plotting import plot,plot3d,plot_implicit 
from sympy import Eq  # 构造隐函数时使用# 绘制一元函数图像
plot(x**2,x)  # 绘制以x为自变量的函数图像
plot(x**2,(x,-3,4))  # 绘制以x为自变量的函数图像,绘制区间限制在[-3,4]上
plot(x,x**2,x**3,(x,0,4))  # 绘制多个图像 # 绘制二元函数图像,呈现3D图
plot3d(x**2*y,(x,-10,10),(y,-10,10))# 绘制隐函数图像
plot_implicit(Eq(x**2+y**4,1),(x,-2,2),(y,-2,2))

相关文章:

python sympy库

sympy库是python的符号运算库&#xff0c;是电脑辅助简单数学函数计算的好工具。本文简单记录了一下有关sympy的方法。建议使用jupyter notebook&#xff0c;这样输出的函数很好看。 文章目录sympy基础安装自变量&#xff08;Symbols&#xff09;函数表达式&#xff08;Expr&am…...

达梦数据库统计信息的导出导入

一、统计信息对象统计信息描述了对象数据的分布特征。统计信息是优化器的代价计算的依据&#xff0c;可以帮助优化器较精确地估算成本&#xff0c;对执行计划的选择起着至关重要的作用。统计信息的收集频率是一把双刃剑&#xff0c;频率太低导致统计信息滞后&#xff0c;频率太…...

信息系统基本知识(六)

大纲 信息系统与信息化信息系统开发方法常规信息系统集成技术软件工程新一代信息技术信息系统安全技术信息化发展与应用信息系统服务管理信息系统服务规划企业首席信息管及其责任 1.7 信息化发展与应用 我国在“十三五”规划纲要中&#xff0c;将培育人工智能、移动智能终端…...

<C++>智能指针

1. 智能指针 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<memory> using namespace std;int div() {int a, b;cin >> a >> b;if (b 0)throw invalid_argument("除0错误");return a / b; }void func() {int* p1 new in…...

1.分析vmlinux可执行文件是如何生成的? 2.整理内核编译流程:uImage/zImage/Image/vmlinx之间关系

一、分析vmlinux可执行文件是如何生成的&#xff1f; 1、分析内核的底层 makefile 如下&#xff1a; vmlinux: scripts/link-vmlinux.sh vmlinux_prereq $(vmlinux-deps) FORCE$(call if_changed,link-vmlinux)vmlinux_prereq: $(vmlinux-deps) FORCE发现vmlinux的生成主要依…...

数据结构4——线性表3:线性表的链式结构

基本概念 ​ 链式存储结构用一组物理位置任意的存储单元来存放线性表的数据元素。 ​ 这组存储单元既可以是连续的又可以是不连续的甚至是零散分布在任意位置上的。所以链表中元素的逻辑次序和物理次序不一定相同。而正是因为这一点&#xff0c;所以我们要利用别的方法将这些…...

weblogic 忘记密码重置密码

解决&#xff1a;weblogic 忘记密码 weblogic安装后&#xff0c;很久不用&#xff0c;忘记访问控制台的用户名或者密码&#xff0c;可通过以下步骤来重置用户名密码。 版本&#xff1a;WebLogic Server 11g 说明&#xff1a;%DOMAIN_HOME%&#xff1a;指WebLogic Server 域(…...

安卓开发之动态设置网络访问地址

之前开发程序联测测接口的时候&#xff0c;因为要和不同的后台人员调接口&#xff0c;所以经常要先把程序里的ip地址改成后台人员给我的。每次都要先修改ip地址&#xff0c;之后编译运行一下&#xff0c;才能测试。但要是换了个后台人员&#xff0c;或者同时和2个后台人员测接口…...

深度学习模型训练工作汇报(3.8)

进行数据的初始整理的准备 主要是进行伪序列字典的设置&#xff0c;以及训练数据集的准备。 期间需要的一些问题包括在读取文件信息的时候&#xff0c;需要跳过文件的第一行或者前两行&#xff0c;如果使用循环判断的话&#xff0c;会多进行n次的运算&#xff0c;这是不划算的…...

【ns-3】添加nr(5G-LENA)模块

文章目录前言1. 下载5G-LENA源代码2. 配置并重新构建ns-3项目参考文献前言 本篇以ns-3.37为例介绍如何在ns-3中添加nr&#xff08;5G-LENA&#xff09;模块 [1]。5G-LENA是一个由Mobile Networks group CTTC&#xff08;Centre Tecnolgic de Telecomunicacions de Catalunya&a…...

(枚举)(模拟)(前缀和)(数组模拟哈希)(可二分)1236. 递增三元组

目录 题目链接 一些话 流程 套路 ac代码 题目链接 1236. 递增三元组 - AcWing题库 一些话 int f[N]; memset(f,0,sizeof f)影响不到f[N] 所以尽量不要对f[N]赋值&#xff0c;不要用f[N]操作 流程 //由三重暴力i,j,k因为三重暴力底下是分别用i和j&#xff0c;j和k作比较…...

mysql五种索引类型(实操版本)

为什么使用索引 最近学习了Mysql的索引&#xff0c;索引对于Mysql的高效运行是非常重要的&#xff0c;正确的使用索引可以大大的提高MySql的检索速度。通过索引可以大大的提升查询的速度。不过也会带来一些问题。比如会降低更新表的速度&#xff08;因为不但要把保存数据还要保…...

微服务进阶之 SpringCloud Alibaba

文章目录微服务进阶&#x1f353;SpringCloud 有何劣势&#xff1f;&#x1f353;SpringCloud Alibaba 提供了什么&#xff1f;提示&#xff1a;以下是本篇文章正文内容&#xff0c;SpringCloud 系列学习将会持续更新 微服务进阶 &#x1f353;SpringCloud 有何劣势&#xff1…...

前端性能优化笔记2 第二章 度量

相关 Performance API 都在 window.performance 对象下 performance.now() 方法 精度精确到微妙获取的是把页面打开时间点作为基点的相对时间&#xff0c;不依赖操作系统的时间。 部分浏览器不支持 performance.now() 方法&#xff0c;可以用 Date.now() 模拟 performance.n…...

关于new和delete的一些思考,为什么不能在析构函数中调用delete释放对象的内存空间,new和delete的原理

最近在写代码的时候&#xff0c;觉得每次new出来的对象都需要去delete好麻烦&#xff0c;于是直接把delete写到了析构函数中&#xff0c;在析构函数里面写了句delete this&#xff0c;结果调用析构函数的时候死循环了&#xff0c;不是很理解原因&#xff0c;于是去研究了一下。…...

一场以数字技术深度影响和改造传统实业的新风口,正在开启

当数字经济的浪潮开始上演&#xff0c;一场以数字技术深度影响和改造传统实业的新风口&#xff0c;正在开启。对于诸多在互联网时代看似业已走入死胡同的物种来讲&#xff0c;可以说是打开了新的天窗。对于金融科技来讲&#xff0c;同样如此。以往&#xff0c;谈及金融科技&…...

【LeetCode】13. 罗马数字转整数

题目链接&#xff1a;https://leetcode.cn/problems/roman-to-integer/ &#x1f4d5;题目要求&#xff1a; 罗马数字包含以下七种字符: I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M。 例如&#xff0c; 罗马数字 2 写做 II &#xff0c;即…...

2023/3/8集合之TreeSet HashSet简介 不含代码

TreeSet : 底层是由TreeMap维护的 无序的,不可重的 底层结构 : 红黑树(平衡二叉树) 特点 : 查询效率高,默认升序排序引用场景 : 适合应用在存储多个单个值的数据的集合,去重的,自动升序排序的场景新增方法:新增了一些与比较大小相关的方法 遍历方式 1)foreach 2)iterator 1测试…...

【面试1v1实景模拟】面试中常见的Java关键字详解

笑小枫专属目录老面&#x1f474;&#xff1a;Java中有哪些关键字老面&#x1f474;&#xff1a;简单介绍一下 final 关键字老面&#x1f474;&#xff1a;简单介绍一下 this、super 关键字老面&#x1f474;&#xff1a;简单介绍一下 static 关键字老面&#x1f474;&#xff…...

MySQL8.0.16存储过程比5.7.22性能大幅下降

MySQL8.0.16存储过程比5.7.22性能大幅下降 1、背景 从5.7.22迁移数据库到8.0.16&#xff0c;发现存储过程执行性能大幅下降。原来在5版本上执行只需要3-5秒&#xff0c;到8版本上居然要达到上万秒。 5版本&#xff1a; call Calculation_Week() OK 时间: 3.122s 8版本&#x…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...