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

sympy常用函数与错误笔记

文章目录

  • 前言
  • 一、sympy基本函数介绍
    • 变量定义
      • 1. sp.Symbol("x") 或 sp.symbols("m n")
      • 2. sp.Function("y")
      • 3. func(x).diff(x, n)
    • 定义方程与求解符号
      • 1. sp.Eq(lhs, rhs)
      • 2. 求解函数(*代表了常用且重要,其他部分作为拓展,可以有需要的时候再查询使用)
      • 3. func.subs(a, b) 或者 func.subs({a: b})
      • 4. func.evalf(subs, n)
  • 二、 常见错误(持续更新)
    • TypeError: cannot create mpf from x
    • TypeError: 'Equality' object is not subscriptable
  • 三、计算模板


前言

本文将针对常用的函数进行用途分析与介绍,对代码过程中可能会遇到的报错进行分析,并给出实例帮助理解代码。文章较长,可以针对感兴趣的部分进行跳转


一、sympy基本函数介绍

变量定义

1. sp.Symbol(“x”) 或 sp.symbols(“m n”)

这是定义变量,如f(x)中的x就是使用Symbol定义的
使用Symbol只能定义一个变量, 想要一次性定义多个变量,需要使用symbols,不同的变量之间用空格间隔

2. sp.Function(“y”)

定义函数,相当于f(x)中的f,这时候程序没法判断它是谁的函数,需要显式的定义指定函数的变量,如f(x)

3. func(x).diff(x, n)

定义函数关于x的n阶导数
在求解过程中尽量都采用diff方法,而非使用Derivative()函数

定义方程与求解符号

1. sp.Eq(lhs, rhs)

lhs, rhs 分别代表了等式左边与等式右边公式
例如y = x就需要表示为sp.Eq(y(x), x)
tip: 如果不是y(x),在求解这个等式的时候会报错哦,一定要记得定义它是谁的函数

2. 求解函数(*代表了常用且重要,其他部分作为拓展,可以有需要的时候再查询使用)

函数名称用途主要参数说明示例
solve解普通方程的解析解f(方程或方程组)
symbols(求解的变量)
多个变量或方程需要用 [] 框起来
通用函数,用于解一元或多元代数方程或方程组。solve(x**2 - 4, x) # 相当于求解 x 2 − 4 = 0 x^2 - 4 = 0 x24=0
# [ -2, 2 ]
nsolve解普通方程数值解f
x(待求解变量)
x0(初始猜测值,与结果有关)
用于求方程的数值解,需要输入初始猜测值,并寻找该猜测值附近的数值解。通常返回一个近似解,也可使用 .evalf() 方法进行数值化。nsolve(sin(x) - 0.5, 0)
# 因为是从0为初始值,求解 s i n ( x ) = 0.5 sin(x) = 0.5 sin(x)=0.5 最近的答案,所以应该是 π 6 \frac{\pi}{6} 6π约等于0.5236
# 返回的结果是数值解
dsolve解微分方程eq(方程)
func(求解的函数,如 f(x)
ics(初始条件,可选)
用于求解一阶或高阶常微分方程的解析解,支持线性和非线性方程。传入 ics,可以直接算出微分方程中的常数。x = symbols(‘x’)
f = Function(‘f’)(x)
ode = Eq(diff(f, x), f) # 求解最常规的微分方程 f ′ ( x ) = f ( x ) f'(x) = f(x) f(x)=f(x)
dsolve(ode, f) # [Eq( f ( x ) , C 1 ∗ e x f(x), C1* e^x f(x),C1ex)]
pdsolve解偏微分方程 (复杂一些时无法直接求解)eq
func
专门用于求解偏微分方程的解析解,通常需要配合分离变量法。当直接输入的偏微分方程过于复杂时,先进行变量分离再尝试求解# 一般使用方法类似 dsolve,但处理偏微分方程时
# pdsolve(eq, func)
linsolve解线性方程组 (符号解)system
symbols
适合求解线性方程组,返回向量形式的解。x, y = symbols(‘x y’)
system = [x + y - 2, x - y - 0]
linsolve(system, [x, y]) # 求解一个简单的线性方程组,记住system里的式子右侧都是0
# { (1, 1) }
nonlinsolve解非线性方程组 (符号解)system
symbols
用于求解非线性方程组,返回集合形式的符号解。x, y = symbols(‘x y’)
system = [ x 2 + y − 4 x^2 + y - 4 x2+y4, x − y 2 + 1 x - y^2 + 1 xy2+1]
nonlinsolve(system, [x, y])
solve_poly_system解多项式方程组 (多变量,符号解)system
symbols
用于解特定的多项式方程组。# 用法与 solve 类似,但主要针对多项式方程
# solve_poly_system([Eq(…)], [x, y])
solve_univariate_inequality解一元不等式ineq(不等式)
symbol(变量)
用于求解一元不等式,返回区间形式或逻辑表达式。x = Symbol(‘x’, real=True)
ineq = (x**2 < 4)
solve_univariate_inequality(ineq, x) # -2 < x < 2
reduce_inequalities简化或求解不等式组inequalities
symbols
简化复杂的不等式组,返回符号形式的解集。x = symbols(‘x’, real=True)
reduce_inequalities([[x > 1, x < 3]], [x]) # 1 < x < 3

3. func.subs(a, b) 或者 func.subs({a: b})

subs输入一个字典或者两个参数,可以将变量换成指定的值,如上式中的a替换为了b
例如:
对于微分方程中输出的结果中有C1,在已知某个初始值(如 y ( 0 ) = 1 2 y(0) = \frac{1}{2} y(0)=21)的情况下,对结果
r e s = E q ( y ( x ) = C 1 e − x + e x 2 ) res = Eq(y{\left(x \right)} = C_{1} e^{- x} + \frac{e^{x}}{2}) res=Eq(y(x)=C1ex+2ex)进行常数的求解

C1 = sp.Symbol("C1")  # 必须先定义C1是一个变量,才能作为nsolve中的实参进行求解
res = res.subs({y(x): 1/2, x: 0})  # 必须先替换y(x),再替换x
C = sp.nsolve(res, C1, 0)  # 这样就可以解得常数值

4. func.evalf(subs, n)

evalf是一个方法,是基于结果上的方法,可以计算某个表达式的具体值,也可以对nsolve的结果进行位数调整或者
例如:

(1 / a).evalf(subs={a: 2}, n=4)
# 结果为0.5000

二、 常见错误(持续更新)

TypeError: cannot create mpf from x

nsolve(f, x, x0), 这通常与nsolve中没有初始值有关,设置一个初始值就好了

TypeError: ‘Equality’ object is not subscriptable

因为dsolve解的的结果是一个列表,使用dsolve[0]获取的equality是不可用索引的
只能通过lhs和rhs分别获得等式左右两边的式子

三、计算模板

  1. 设置变量, 利用symbols和Function设定变量与函数
  2. 利用sp.Eq设置等式
  3. 使用对应的solve函数进行求解(如有初值注意初值条件带入)
  4. (可选)使用subs对求解的结果进行值代入,再使用nsolve对某些常量进行求解

例子 d y d x + y ( x ) = e x \frac{d y}{d x} + y{\left(x \right)} = e^{x} dxdy+y(x)=ex

# 1. 进行变量设置
y = sp.Function('y')
x = sp.symbols('x')
y_ = y(x).diff(x)  # 直接使用这个为一阶导数
# 2. 设置方程 
eq = sp.Eq(y_ + y(x), sp.exp(x))
# 3. 求解方程,因为是微分方程所以用dsolve
res = sp.dsolve(eq, y(x))
sp.pprint(res)# 4. 如果有初值
res = sp.dsolve(eq, y(x), ics={y(0):1}) # 使用ics(初始条件)可以直接求解常量
# 或对结果使用sub后利用nsolve求解

相关文章:

sympy常用函数与错误笔记

文章目录 前言一、sympy基本函数介绍变量定义1. sp.Symbol("x") 或 sp.symbols("m n")2. sp.Function("y")3. func(x).diff(x, n) 定义方程与求解符号1. sp.Eq(lhs, rhs)2. 求解函数&#xff08;*代表了常用且重要&#xff0c;其他部分作为拓展&…...

47_Lua文件IO操作

文件I/O(Input/Output)操作在Lua中用于与外部文件进行交互,包括读取文件中的数据和将数据写入文件。Lua提供了两种模式来进行文件操作:简单模式和完全模式。下面将详细介绍这两种模式的基本使用。 1.简单模式 1.1 简单模式介绍 简单模式提供了基本的文件操作功能,它主要…...

nginx-lua模块处理流程

一. 简述&#xff1a; nginx的模块化设计使得每一个http模块可以只专注于完成一个独立的&#xff0c;简单的功能。一个请求的完整处理过程可以由多个http模块共同协作完成&#xff0c;这种设计具有简单性&#xff0c;测试性&#xff0c;扩展性&#xff0c;灵活性。关于nginx 的…...

【大数据】机器学习-----最开始的引路

以下是关于机器学习的一些基本信息&#xff0c;包括基本术语、假设空间、归纳偏好、发展历程、应用现状和代码示例&#xff1a; 一、基本术语 样本&#xff08;Sample&#xff09;&#xff1a; 也称为实例&#xff08;Instance&#xff09;或数据点&#xff08;Data Point&…...

【前端】自学基础算法 -- 21.图的广度优先搜索

图的广度优先搜索 简介 图的广度优先搜索&#xff0c;沿着图的宽度遍历图的节点&#xff0c;先访问离起始节点最近的节点&#xff0c;然后逐渐向外扩展。 基本步骤&#xff1a; 选择一个起始节点作为当前节点。将当前节点加入队列。当队列不为空时&#xff0c;重复以下步骤…...

ChatGPT与Claude AI:两大生成式对话模型的比较分析

自ChatGPT推出以来&#xff0c;这款强大的AI聊天机器人迅速吸引了全球的关注。其出色的对话能力和多样化的应用场景&#xff0c;成为许多人初次体验基于大规模语言模型的潜力。然而&#xff0c;在这个快速发展的领域中&#xff0c;另一款AI也在悄然崭露头角&#xff0c;那就是由…...

前端开发:盒子模型、块元素

1.border边框 *{box-sizing:border-box; } //使所有边框不再撑大盒子模型 粗细 : border-width 样式 : border-style, 默认没边框 . solid 实线边框 dashed 虚线边框 dotted 点线边框 颜色 : border-color div { width : 200px ; height : 200px ; border : …...

升级 CentOS 7.x 系统内核到 4.4 版本

问题描述 在 CentOS 7.x 系统中&#xff0c;默认内核版本是 3.10.x&#xff0c;这个版本可能会带来一些与 Docker 和 Kubernetes 兼容性的问题&#xff0c;导致系统性能不稳定或功能异常。为了提高系统的稳定性和兼容性&#xff0c;建议升级到更高版本的内核&#xff0c;例如 …...

播放音频文件同步音频文本

播放音频同步音频文本 对应单个文本高亮显示 使用audio音频文件对应音频文本资源 音频文本内容&#xff08;Json&#xff09; [{"end": 4875,"index": 0,"speaker": 0,"start": 30,"text": "70号二啊,","tex…...

springboot使用Easy Excel导出列表数据为Excel

springboot使用Easy Excel导出列表数据为Excel Easy Excel官网&#xff1a;https://easyexcel.opensource.alibaba.com/docs/current/quickstart/write 主要记录一下引入时候的pom&#xff0c;直接引入会依赖冲突 解决方法&#xff1a; <!-- 引入Easy Excel的依赖 -->&l…...

day07_Spark SQL

文章目录 day07_Spark SQL课程笔记一、今日课程内容二、Spark SQL函数定义&#xff08;掌握&#xff09;1、窗口函数2、自定义函数背景2.1 回顾函数分类标准:SQL最开始是_内置函数&自定义函数_两种 2.2 自定义函数背景 3、Spark原生自定义UDF函数3.1 自定义函数流程&#x…...

高性能现代PHP全栈框架 Spiral

概述 Spiral Framework 诞生于现实世界的软件开发项目是一个现代 PHP 框架&#xff0c;旨在为更快、更清洁、更卓越的软件开发提供动力。 特性 高性能 由于其设计以及复杂精密的应用服务器&#xff0c;Spiral Framework框架在不影响代码质量以及与常用库的兼容性的情况下&a…...

LeetCode - #182 Swift 实现找出重复的电子邮件

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…...

《解锁鸿蒙Next系统人工智能语音助手开发的关键步骤》

在当今数字化时代&#xff0c;鸿蒙Next系统与人工智能的融合为开发者带来了前所未有的机遇&#xff0c;开发一款人工智能语音助手应用更是备受关注。以下是在鸿蒙Next系统上开发人工智能语音助手应用的关键步骤&#xff1a; 环境搭建与权限申请 安装开发工具&#xff1a;首先需…...

【Linux网络编程】数据链路层 | MAC帧 | ARP协议

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站 &#x1f308;个人主页&#xff1a; 南桥几晴秋 &#x1f308;C专栏&#xff1a; 南桥谈C &#x1f308;C语言专栏&#xff1a; C语言学习系…...

《自动驾驶与机器人中的SLAM技术》ch7:基于 ESKF 的松耦合 LIO 系统

目录 基于 ESKF 的松耦合 LIO 系统 1 坐标系说明 2 松耦合 LIO 系统的运动和观测方程 3 松耦合 LIO 系统的数据准备 3.1 CloudConvert 类 3.2 MessageSync 类 4 松耦合 LIO 系统的主要流程 4.1 IMU 静止初始化 4.2 ESKF 之 运动过程——使用 IMU 预测 4.3 使用 IMU 预测位姿进…...

基于spingbott+html+Thymeleaf的24小时智能服务器监控平台设计与实现

博主介绍&#xff1a;硕士研究生&#xff0c;专注于信息化技术领域开发与管理&#xff0c;会使用java、标准c/c等开发语言&#xff0c;以及毕业项目实战✌ 从事基于java BS架构、CS架构、c/c 编程工作近16年&#xff0c;拥有近12年的管理工作经验&#xff0c;拥有较丰富的技术架…...

全栈面试(一)Basic/微服务

文章目录 项目地址一、Basic InterviewQuestions1. tell me about yourself?2. tell me about a time when you had to solve a complex code problem?3. tell me a situation that you persuade someone at work?4. tell me a about a confict with a teammate and how you…...

python安装完成后可以进行的后续步骤和注意事项

安装Python3完成后&#xff0c;你可以开始使用它进行编程和开发。以下是一些安装完成后可以进行的后续步骤和注意事项&#xff1a; 验证安装 检查Python版本&#xff1a; 打开“终端”应用程序。输入python3 --version&#xff0c;应该显示安装的Python3版本号。 检查pip版本…...

[Qt] 窗口 | 菜单栏MenuBar

目录 QMainWindow 概述 一、菜单栏 1、创建菜单栏 2、在菜单栏中添加菜单 3、创建菜单项 4、在菜单项之间添加分割线 5、添加快捷键 6、添加子菜单 7、添加图标 综合示例 QMainWindow 概述 Qt 窗口是通过 QMainWindow 类来实现的。 QMainWindow 是一个为用户 提供主…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

GitFlow 工作模式(详解)

今天再学项目的过程中遇到使用gitflow模式管理代码&#xff0c;因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存&#xff0c;无论是github还是gittee&#xff0c;都是一种基于git去保存代码的形式&#xff0c;这样保存代码…...