Simpy简介:python仿真模拟库-02/5

news2024/11/13 20:29:27

一、说明

        关于python下的仿真库,本篇为第二部分,是更进一步的物理模型讲解,由于这部分内容强依赖于第一部分的符号介绍,因此,有以下建议:

         此文为第二部分,若看第一部分。建议查看本系列的第一部分。

二、SymPy — 简化(Simplification)

 

        SymPy 擅长通过其多样化的简化函数来简化数学表达式。在 SymPy 中,您会发现通用的 Simply() 函数,专用于实现表达式最直接的表示。

        简化Simplification:simple() 函数位于 sympy.simplify 模块中,旨在使用启发式方法增强输入表达式的简单性。一个例子通过简化表达式 sin²(x) + cos²(x) 来演示其用法。

from sympy import * 
x=Symbol('x')
expr=sin(x)**2 + cos(x)**2 
simplify(expr)
Output:
1

三、 展开Expand

        Expand() 是 SymPy 中最常见的简化函数之一,用于展开多项式表达式。例如 -

a,b=symbols('a b') 
expand((a+b)**2)

expand((a+b)*(a-b))

        Expand() 函数通常会增加表达式的大小,尽管它在应用时偶尔会减小表达式的大小。一般来说,调用expand()可能会导致更大的表达式,但也有例外,它会简化它们。

expand((x + 1)*(x - 2) - (x - 1)*x)
Output:
-2

四、因式分解

        该函数接受多项式并将其分解为有理数领域内的不可约分量。

x,y,z=symbols('x y z') 
expr=(x**2*z + 4*x*y*z + 4*y**2*z) 
factor(expr)

factor(x**2+2*x+1)

        Factor() 函数是 Expand() 的逆函数,并保证不可约因子。Factor_list() 提供因子的结构化输出。

expr=(x**2*z + 4*x*y*z + 4*y**2*z) 
factor_list(expr)
Output:
(1, [(z, 1), (x + 2*y, 2)])

五、收集collect

        该函数根据表达式列表收集表达式的加法分量,并考虑有理指数幂。

expr=x*y + x - 3 + 2*x**2 - z*x**2 + x**3 
expr

六、取消

        cancel() 函数的目的是将任何有理函数转换为常规格式 p/q,其中 p 和 q 都是没有共享因子的展开多项式表达式。此外,p 和 q 的前导系数是整数,缺少小数部分。

expr1=x**2+2*x+1 
expr2=x+1 
cancel(expr1/expr2)
Output:
x+1
expr = 1/x + (3*x/2 - 2)/(x - 4) 
expr

cancel(expr)

七、trigsimp(三角恒等式)

        该函数的目的是简化三角恒等式。值得一提的是,反三角函数的命名约定包括在函数名称中添加“a”作为前缀。例如,反余弦表示为“acos()”。

from sympy import trigsimp, sin, cos 
from sympy.abc import x, y
expr = 2*sin(x)**2 + 2*cos(x)**2 
trigsimp(expr)
Output:
2

        trigsimp 函数使用启发式方法来应用最合适的三角恒等式。

八、指数项简化

该函数通过组合具有相似底数和指数的幂来简化给定的表达式。

expr=x**y*x**z*y**z 
expr

powsimp(expr)

        您可以通过两种方式控制 powsimp() 的操作方式:仅合并底数或仅合并指数。默认的“全部”模式结合了底数和指数。将“force”设置为 True 会合并基础而不考虑假设。

powsimp(expr, combine='base', force=True)

九、梳子Combsimp

        您可以使用 SymPy 的 Combsimp() 函数简化涉及阶乘和二项式的组合表达式。此外,SymPy 还提供了专用的 Factorial() 函数来处理阶乘。

expr=factorial(x)/factorial(x - 3) 
expr

为了简化上面的组合表达式,我们使用 Combsimp() 函数,如下所示 -

combsimp(expr)

十、对数组合

该函数采用对数并使用以下规则组合它们 -

  • log(x) + log(y) == log(x*y) 如果两者均为正数
  • a*log(x) == log(x**a) 如果 x 为正且 a 为实数
logcombine(a*log(x) + log(y) - log(z))

当此功能中启用“force”参数时,除非对数量存在现有假设,否则它将假设上述条件有效。

logcombine(a*log(x) + log(y) - log(z), force=True)

十一、SymPy — 导数

        函数的导数表示其变量之一的变化速度。这对应于确定特定点处切线的斜率。在 SymPy 中,您可以使用“diff()”函数计算带有变量的数学表达式的微分。

diff(expr, variable)
from sympy import diff, sin, exp 
from sympy.abc import x,y 
expr=x*sin(x*x)+1 >>> expr

diff(expr,x)

diff(exp(x**2),x)

要计算多重导数,只需重复每个微分步骤的变量或通过在变量后指定数值来指示所需的顺序。

diff(x**4,x,3)
Output:
24x
for i in range(1,4): print (diff(x**4,x,i))
Output:
4*x**3
12*x**2
24*x

        也可以调用表达式的 diff() 方法。它的工作原理与 diff() 函数类似。

expr=x*sin(x*x)+1 
expr.diff(x)

        SymPy 中的 Derivative 类允许您创建未计算的导数,与 diff() 函数共享相同的语法。要获得该导数的实际结果,您可以应用 doit 方法。

from sympy import Derivative 
d=Derivative(expr) 
d

d.doit()

十二、SymPy — 集成

        在 SymPy 包中,您将找到积分模块,该模块设计用于计算数学表达式的定积分和不定积分。当在表达式后面提供变量时,integrate() 方法可以计算原始积分或不定积分。

integrate(f, x)

        要计算定积分,请按如下方式传递参数 -

(integration_variable, lower_limit, upper_limit)
from sympy import * 
x,y = symbols('x y') 
expr=x**2 + x + 1 
integrate(expr, x)

expr=sin(x)*tan(x) 
expr 
integrate(expr,x)

expr=exp(-x**2) 
integrate(expr,(x,0,oo) )

        您可以使用 Integral 对象创建未计算的积分,该对象可以通过调用 doit() 方法进行计算。

expr = Integral(log(x)**2, x) 
expr

expr.doit()

十三、积分变换

SymPy 支持各种类型的积分变换,如下所示 -

  • 拉普拉斯变换
  • 傅里叶变换
  • 正弦变换
  • 余弦变换
  • 汉克尔变换

提到的函数位于 sympy.integrals.transforms 模块内。提供的示例说明了傅立叶变换和拉普拉斯变换的计算。

实施例1

from sympy import fourier_transform, exp 
from sympy.abc import x, k 
expr=exp(-x**2) 
fourier_transform(expr, x, k)

在 python shell 中执行上述命令时,将生成以下输出 -

sqrt(pi)*exp(-pi**2*k**2)

这相当于 -

实施例2

from sympy.integrals import laplace_transform 
from sympy.abc import t, s, a 
laplace_transform(t**a, t, s)

在 python shell 中执行上述命令时,将生成以下输出 -

(s**(-a)*gamma(a + 1)/s, 0, re(a) > -1)

十四、SymPy — 矩阵

        在数学领域,矩阵是元素的结构化排列,可以包含数字、符号或数学表达式。矩阵运算的概念涉及对这些矩阵结构执行各种数学运算,所有这些运算都遵循特定的数学准则。

        矩阵的一个值得注意的应用在于线性变换领域,这是许多科学学科中的一个重要概念,特别是在基于矩阵的方法学广泛应用的物理领域。

        在 SymPy 包中,有一个用于处理矩阵的专用模块。该模块介绍了 Matrix 类,它是一个基本组件,可用作矩阵的表示并促进矩阵的操作。

from sympy.matrices import Matrix
from sympy.matrices import Matrix 
m=Matrix([[1,2,3],[2,3,1]]) 
m

        矩阵是从适当大小的列表对象创建的。您还可以通过将列表项分布在指定数量的行和列中来获取矩阵。

M=Matrix(2,3,[10,40,30,2,6,9]) 
M

矩阵是一个可变对象。矩阵模块还提供了 ImmutableMatrix 类来获取不可变矩阵。

十五、基本操控

Matrix 对象的shape属性返回其大小。

M.shape
Output:
(2,3)

row() 和 col() 方法分别返回指定数量的行或列。

M.row(0)
Output:
[10 40 30]
M.col(1)

使用 Python 的切片运算符来获取属于行或列的一项或多项。

M.row(1)[1:3]

Output:
[6, 9]

Matrix 类具有 row_del() 和 col_del() 方法,可从给定矩阵中删除指定的行/列 -

M=Matrix(2,3,[10,40,30,2,6,9]) 
M.col_del(1) 
M

您可以使用以下命令将样式应用于输出 -

M.row_del(0) 
M

Output:
[2  6  9]

类似地,row_insert() 和 col_insert() 方法在指定的行或列索引处添加行或列

M1=Matrix([[10,30]]) 
M=M.row_insert(0,M1)
M

十六、算术运算

        定义常用运算符 +、— 和 * 来执行加法、减法和乘法。

M1=Matrix([[1,2,3],[3,2,1]]) 
M2=Matrix([[4,5,6],[6,5,4]]) 
M1+M2

M1-M2

        矩阵乘法可以在第一个矩阵中的列数与第二个矩阵中的行数匹配的条件下发生。此外,结果将具有与第一个矩阵相同的行数和与第二个矩阵相同的列数。

M1=Matrix([[1,2,3],[3,2,1]]) 
M2=Matrix([[4,5],[6,6],[5,4]]) 
M1*M2

十七、矩阵构造函数

        SymPy 提供各种专门的矩阵类,例如单位矩阵和全零或全填充的矩阵。这些类分别用名称“eye”、“zeros”和“ones”表示。具体来说,单位矩阵是一个方阵,其中沿对角线的所有元素都等于 1,而所有其他元素都设置为 0。

from sympy.matrices import eye
eye(3)

        在对角矩阵中,对角线上的元素根据提供的参数进行初始化。

from sympy.matrices import diag 
diag(1,2,3)

        零矩阵中的所有元素都初始化为 0。

from sympy.matrices import zeros 
zeros(2,3)

        同样,ones 是所有元素都设置为 1 的矩阵。

from sympy.matrices import ones
ones(2,3)

        到目前为止,一切都很好。我们已经看到使用该库的各种简化,数学工具箱绝对是好的。在接下来的部分中,我们将了解如何定义和使用本质上构成模拟构建块的函数。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

盲盒小程序搭建,功能优势分析

盲盒作为一种潮玩商品,吸引了大量的年轻人,受众群体非常高,在市场上的发展快速。盲盒拥有独特的优势,给消费者提供了新奇的购物体验,能够让人们在购物中体验到盲盒的不确定性所带来的惊喜感和快乐。 盲盒小程序的出现…

Echarts——使用graphic组件在一个option内同时设置两个饼图的背景图

使用echarts的graphic原生图形元素组件&#xff0c;为两个饼图设置对应背景。 <template><div id"app"><div class"charts" ref"charts"></div></div> </template><script> import * as echarts from…

计算机毕业设计 | SpringBoot+vue农产品商城 买菜购物网站(附源码)

1&#xff0c;绪论 1.1 项目背景 随着社会发展&#xff0c;网上购物已经成为我们日常生活的一部分。但是&#xff0c;至今为止大部分电商平台都是从人们日常生活出发&#xff0c;出售都是一些日常用品比如&#xff1a;食物、服装等等&#xff0c;并未发现一个专注于菜品的电商…

GEC6818传感器模块(烟雾+GY39+RFID)——使用文字取模的方式实现数据显示

GEC6818传感器模块(烟雾GY39RFID)——使用文字取模的方式实现数据显示 完整的工程大家可以在我的gitee上进行下载 下载地址&#xff1a;GEC6818智能语音家居系统 文章目录 GEC6818传感器模块(烟雾GY39RFID)——使用文字取模的方式实现数据显示一、 文字取模实现数据显示1. disp…

NPS 内网穿透安装

NPS 内网穿透安装 NPS分为服务端和客户端&#xff0c;对应的不同操作系统软件可以在GitHub RELEASES自行选择下载。 服务端搭建 由于个人非企业级使用&#xff0c;为了方便直接使用docker安装 1.docker运行 (注意需要提前下载conf文件&#xff0c;或者将镜像中文件copy出来…

多线程模板应用实现(实践学习笔记)

出处&#xff1a;B站码出名企路 个人笔记&#xff1a;因为是跟着b站的教学视频以及文档初步学习&#xff0c;可能存在诸多的理解有误&#xff0c;对大家仅供借鉴&#xff0c;参考&#xff0c;然后是B站up阳哥的视频&#xff0c;我是跟着他学。大家有兴趣的可以到b站搜索。加油…

C/C++ 联合体

目录 联合体概述 联合体的内存分配 联合体大小计算 联合体概述 联合与结构非常的相似&#xff0c;主要区别就在于联合这两个字。 联合的特征&#xff1a;联合体所包含的成员变量使用的是同一块空间。 联合体定义 //联合类型的声明 union Un {char c;int i; }; //联合变量…

isaacgym(legged_gym)学习 (二)—— 设置环境地形

isaacgym(legged_gym)学习 &#xff08;二&#xff09;—— 设置环境地形 文章目录 isaacgym(legged_gym)学习 &#xff08;二&#xff09;—— 设置环境地形前言一、了解isaacgym中地形如何构成的二、自定义修改1.代码2.查看script/play.py 总结 前言 如何设置isaacgym中的环…

【操作系统篇】正在持续写入的日志如何清理?

正在持续写入的日志如何清理? ✔️典型解析✔️ 推荐的日志管理工具✔️如何设置日志轮转工具✔️如何选择适合我的Logrote-NG日志轮转工具✔️如何测试Logrote-NG工具的稳定性✔️分析一个简单的ELK报警✔️这个报警的作用是什么✔️报警机制的优缺点✔️如何减少报警机制的误…

蓝牙运动耳机哪款好用?运动用什么耳机比较好?2024运动耳机推荐

​在众多的耳机类型中&#xff0c;运动耳机因其独特的设计和功能而备受青睐。它们不仅要具备出色的音质&#xff0c;还需要能够适应激烈的运动环境&#xff0c;如防水、防汗、牢固耐用等。今天&#xff0c;我想向大家推荐一些在这些方面表现出色的运动耳机&#xff0c;这些耳机…

Unity 圆角 线段 绘制 LineRender

需求 绘制圆角 核心函数 /// <summary>/// 点ABC 形成的角度必须为90 点c为中间的点/// </summary>/// <param name"a"></param>/// <param name"b"></param>/// <param name"c"></param>/// &…

C++学习笔记——友元及重载运算符

目录 一、友元 1.1声明友元函数 1.2声明友元类 二、运算符重载 2.1重载加号运算符 2.2重载流插入运算符 三、一个简单的银行管理系统 四、 详细的介绍 一、友元 在 C 中&#xff0c;友元是一个函数或类&#xff0c;它可以访问另一个类的私有成员或保护成员。通常情况下…

微服务实战系列之Filter

前言 Filter&#xff0c;又名过滤器&#xff0c;当然不是我们日常中见到的&#xff0c;诸如此类构件&#xff1a; 而应该是微服务中常使用的&#xff0c;诸如此类&#xff08;图片来自官网&#xff0c;点击可查看原图&#xff09;&#xff1a; 一般用于字符编码转换&#xf…

Unity DOTS中的baking(二)Baker的触发

Unity DOTS中的baking&#xff08;二&#xff09;Baker的触发 我们知道&#xff0c;当传入Baker的authoring component的值发生变化时&#xff0c;就会触发baking。不过在有些情况下&#xff0c;component所引用的对象没有变化&#xff0c;而是对象自身内部的一些属性发生了变化…

DNS--windows sever 2012 r2

1 安装dns服务 得到 2 配置正向解析文件 设置正向解析文件的别名 配置(1)主机名 (2)别名&#xff08;3)邮件交换器 最终得到 3 配置反向文件 建立指针 得到 4 验证

【百科物理】-1.弹力和压力

导入 问题&#xff1a; 为什么在蹦床上弹得更高&#xff1f; 现象背后的原理&#xff0c;因为有力。 力&#xff1a;物体(物质)与物体(物质)之间推、拉、挤压的相互作用。力可以改变物体的运动状态&#xff08;比如踢足球&#xff09;&#xff0c;力可以改变物体的形状&#xf…

ProtoBuf一些踩坑记录

一、Protobuf学习基础 学习的资料很多也很全&#xff0c;这里添加几个链接进行Protobuf的基础学习的链接&#xff0c;链接中的案例使用C编辑&#xff1a; 链接&#xff1a;Protobuf介绍及简单使用(上&#xff09;_google_protobuf_version-CSDN博客 Protobuf介绍及简单使用(下&…

行云部署成长之路 -- 慢 SQL 优化之旅 | 京东云技术团队

当项目的SQL查询慢得像蜗牛爬行时&#xff0c;用户的耐心也在一点点被消耗&#xff0c;作为研发&#xff0c;我们可不想看到这样的事。这篇文章将结合行云部署项目的实践经验&#xff0c;带你走进SQL优化的奇妙世界&#xff0c;一起探索如何让那些龟速的查询飞起来&#xff01;…

three.js 学习笔记(学习中1.7更新) |

文章目录 three.js 学习笔记入门基础概念透视相机 第一个three.js应用threejs画布尺寸和布局canvas画布宽高度动态变化 坐标辅助器 THREE.AxesHelper实现动画效果requestAnimationFrame时间相关属性和方法 THREE.Clock类 相机控件 轨道控制器OrbitControls 灯光点光源点光源辅助…

【ArcGIS微课1000例】0087:经纬度格式转换(度分秒转度、度转度分秒)

ArcGIS软件可以很方便的直接实现度分秒转度、度转度分秒。 文章目录 一、转换预览二、工具介绍三、案例解析一、转换预览 借助ArcGIS快速实现度分秒与度及其他格式的坐标转换。例如:度分秒→度 度分秒: 度: 二、工具介绍 转换坐标记法:将一个或两个字段包含的坐标记法从一…