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 x2−4=0 # [ -2, 2 ] |
nsolve | 解普通方程数值解 | fx(待求解变量)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),C1∗ex)] |
pdsolve | 解偏微分方程 (复杂一些时无法直接求解) | eqfunc | 专门用于求解偏微分方程的解析解,通常需要配合分离变量法。当直接输入的偏微分方程过于复杂时,先进行变量分离再尝试求解。 | # 一般使用方法类似 dsolve,但处理偏微分方程时 # pdsolve(eq, func) |
linsolve | 解线性方程组 (符号解) | systemsymbols | 适合求解线性方程组,返回向量形式的解。 | x, y = symbols(‘x y’) system = [x + y - 2, x - y - 0] linsolve(system, [x, y]) # 求解一个简单的线性方程组,记住system里的式子右侧都是0 # { (1, 1) } |
nonlinsolve | 解非线性方程组 (符号解) | systemsymbols | 用于求解非线性方程组,返回集合形式的符号解。 | x, y = symbols(‘x y’) system = [ x 2 + y − 4 x^2 + y - 4 x2+y−4, x − y 2 + 1 x - y^2 + 1 x−y2+1] nonlinsolve(system, [x, y]) |
solve_poly_system | 解多项式方程组 (多变量,符号解) | systemsymbols | 用于解特定的多项式方程组。 | # 用法与 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 | 简化或求解不等式组 | inequalitiessymbols | 简化复杂的不等式组,返回符号形式的解集。 | 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)=C1e−x+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分别获得等式左右两边的式子
三、计算模板
- 设置变量, 利用symbols和Function设定变量与函数
- 利用sp.Eq设置等式
- 使用对应的solve函数进行求解(如有初值注意初值条件带入)
- (可选)使用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. 求解函数(*代表了常用且重要,其他部分作为拓展&…...
47_Lua文件IO操作
文件I/O(Input/Output)操作在Lua中用于与外部文件进行交互,包括读取文件中的数据和将数据写入文件。Lua提供了两种模式来进行文件操作:简单模式和完全模式。下面将详细介绍这两种模式的基本使用。 1.简单模式 1.1 简单模式介绍 简单模式提供了基本的文件操作功能,它主要…...
nginx-lua模块处理流程
一. 简述: nginx的模块化设计使得每一个http模块可以只专注于完成一个独立的,简单的功能。一个请求的完整处理过程可以由多个http模块共同协作完成,这种设计具有简单性,测试性,扩展性,灵活性。关于nginx 的…...
【大数据】机器学习-----最开始的引路
以下是关于机器学习的一些基本信息,包括基本术语、假设空间、归纳偏好、发展历程、应用现状和代码示例: 一、基本术语 样本(Sample): 也称为实例(Instance)或数据点(Data Point&…...
【前端】自学基础算法 -- 21.图的广度优先搜索
图的广度优先搜索 简介 图的广度优先搜索,沿着图的宽度遍历图的节点,先访问离起始节点最近的节点,然后逐渐向外扩展。 基本步骤: 选择一个起始节点作为当前节点。将当前节点加入队列。当队列不为空时,重复以下步骤…...
ChatGPT与Claude AI:两大生成式对话模型的比较分析
自ChatGPT推出以来,这款强大的AI聊天机器人迅速吸引了全球的关注。其出色的对话能力和多样化的应用场景,成为许多人初次体验基于大规模语言模型的潜力。然而,在这个快速发展的领域中,另一款AI也在悄然崭露头角,那就是由…...
前端开发:盒子模型、块元素
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 系统中,默认内核版本是 3.10.x,这个版本可能会带来一些与 Docker 和 Kubernetes 兼容性的问题,导致系统性能不稳定或功能异常。为了提高系统的稳定性和兼容性,建议升级到更高版本的内核,例如 …...
播放音频文件同步音频文本
播放音频同步音频文本 对应单个文本高亮显示 使用audio音频文件对应音频文本资源 音频文本内容(Json) [{"end": 4875,"index": 0,"speaker": 0,"start": 30,"text": "70号二啊,","tex…...
springboot使用Easy Excel导出列表数据为Excel
springboot使用Easy Excel导出列表数据为Excel Easy Excel官网:https://easyexcel.opensource.alibaba.com/docs/current/quickstart/write 主要记录一下引入时候的pom,直接引入会依赖冲突 解决方法: <!-- 引入Easy Excel的依赖 -->&l…...
day07_Spark SQL
文章目录 day07_Spark SQL课程笔记一、今日课程内容二、Spark SQL函数定义(掌握)1、窗口函数2、自定义函数背景2.1 回顾函数分类标准:SQL最开始是_内置函数&自定义函数_两种 2.2 自定义函数背景 3、Spark原生自定义UDF函数3.1 自定义函数流程&#x…...
高性能现代PHP全栈框架 Spiral
概述 Spiral Framework 诞生于现实世界的软件开发项目是一个现代 PHP 框架,旨在为更快、更清洁、更卓越的软件开发提供动力。 特性 高性能 由于其设计以及复杂精密的应用服务器,Spiral Framework框架在不影响代码质量以及与常用库的兼容性的情况下&a…...
LeetCode - #182 Swift 实现找出重复的电子邮件
网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…...
《解锁鸿蒙Next系统人工智能语音助手开发的关键步骤》
在当今数字化时代,鸿蒙Next系统与人工智能的融合为开发者带来了前所未有的机遇,开发一款人工智能语音助手应用更是备受关注。以下是在鸿蒙Next系统上开发人工智能语音助手应用的关键步骤: 环境搭建与权限申请 安装开发工具:首先需…...
【Linux网络编程】数据链路层 | MAC帧 | ARP协议
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站 🌈个人主页: 南桥几晴秋 🌈C专栏: 南桥谈C 🌈C语言专栏: 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小时智能服务器监控平台设计与实现
博主介绍:硕士研究生,专注于信息化技术领域开发与管理,会使用java、标准c/c等开发语言,以及毕业项目实战✌ 从事基于java BS架构、CS架构、c/c 编程工作近16年,拥有近12年的管理工作经验,拥有较丰富的技术架…...
全栈面试(一)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完成后,你可以开始使用它进行编程和开发。以下是一些安装完成后可以进行的后续步骤和注意事项: 验证安装 检查Python版本: 打开“终端”应用程序。输入python3 --version,应该显示安装的Python3版本号。 检查pip版本…...
[Qt] 窗口 | 菜单栏MenuBar
目录 QMainWindow 概述 一、菜单栏 1、创建菜单栏 2、在菜单栏中添加菜单 3、创建菜单项 4、在菜单项之间添加分割线 5、添加快捷键 6、添加子菜单 7、添加图标 综合示例 QMainWindow 概述 Qt 窗口是通过 QMainWindow 类来实现的。 QMainWindow 是一个为用户 提供主…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...
短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...
C语言中提供的第三方库之哈希表实现
一. 简介 前面一篇文章简单学习了C语言中第三方库(uthash库)提供对哈希表的操作,文章如下: C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...
Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案
在大数据时代,海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构,在处理大规模数据抓取任务时展现出强大的能力。然而,随着业务规模的不断扩大和数据抓取需求的日益复杂,传统…...
轻量级Docker管理工具Docker Switchboard
简介 什么是 Docker Switchboard ? Docker Switchboard 是一个轻量级的 Web 应用程序,用于管理 Docker 容器。它提供了一个干净、用户友好的界面来启动、停止和监控主机上运行的容器,使其成为本地开发、家庭实验室或小型服务器设置的理想选择…...
