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

一、说明

        在过去的两篇文章中,我们了解了 simpy 的基础知识、声明变量和处理表达式。值得注意的例子包括评估导数和积分。现在,让我们继续使用函数。

二、SymPy — 函数类

        SymPy 包包含 sympy.core.function 模块中的 Function 类。该类作为各种数学函数的基础,也充当未定义函数类的构造函数。

以下类别的函数继承自 Function 类 -

  • 复数函数
  • 三角函数
  • 整数函数
  • 组合函数
  • 其他杂项功能

三、复数函数

        这组函数在sympy.functions.elementary.complexes模块中定义。

  • re -- 该函数返回表达式的实部  
from sympy import * 
re(5+3*I)
Output:
5
re(I)
Output:
0
  • Im  --表达式的虚部
im(5+3*I)
Output:
3
im(I)
Output:
1
  • sign --表达式的符号

        他的函数返回表达式的复数符号。

        对于真实的表达,符号将是 -

  • 1 如果表达式为正
  • 如果表达式等于 0,则为 0
  • 如果表达式为负数,则为 -1

        如果表达式是虚数,则返回的符号为 -

  • I 如果 im(表达式) 为正
  • -I 如果 im(表达式) 为负数
sign(1.55), sign(-1), sign(S.Zero)
Output:
(1, -1, 0)
sign (-3*I), sign(I*2)
Output:
(-I, I)
  • Abs

        该函数计算复数的大小,测量复平面上从原点 (0,0) 到点 (a, b) 的距离。它是 abs() 函数的扩展,允许符号输入。

Abs(2+3*I)
Output:
√13
  • conjugate --  共轭

        该函数返回复数的共轭。为了找到复共轭,我们改变虚部的符号。

conjugate(4+7*I)
Output:
4 - 7i

四、三角函数(Trigonometric functions

        SymPy 提供三角函数的定义,如正弦、余弦、正切及其反函数(asin、acos、atan),以计算以弧度表示的角度值。

sin(pi/2), cos(pi/4), tan(pi/6)
Output:
(1, sqrt(2)/2, sqrt(3)/3)
asin(1), acos(sqrt(2)/2), atan(sqrt(3)/3)
Output:
(pi/2, pi/4, pi/6)

五、整数函数

这是一组函数,旨在对整数执行各种操作。

  •         天花板Ceiling

        这是一个单变量函数,提供大于或等于其输入的最小整数值。处理复数时,向上运算分别应用于实部和虚部。

ceiling(pi), ceiling(Rational(20,3)), ceiling(2.6+3.3*I)
Output:
(4, 7, 3 + 4*I)

        地面floor

此函数提供小于或等于输入参数的最大整数的整数值。处理复数时,此函数独立确定实部和虚部的下限值。

floor(pi), floor(Rational(100,6)), floor(6.3-5.9*I)
Output:
(3, 16, 6 - 6*I)

        压裂frac

        该函数表示 x 的小数部分。

frac(3.99), frac(Rational(10,3)), frac(10)
Output:
(0.990000000000000, 1/3, 0)

六、组合函数

        组合学处理与有限或离散系统中的选择、排列和操作元素相关的数学问题。

        阶乘

        阶乘在组合数学中起着至关重要的作用,它决定了 n 个对象的排列。记为𝑥!并用作非负整数阶乘的实现。对于负整数,阶乘结果为复无穷大。

x=Symbol('x') 
factorial(x)
Output:
x!
factorial(5)
Output:
120
factorial(-1)
Output:
∞∽

七、二项式binomial

        该函数表示我们可以从 n 个元素的集合中选择 k 个元素的方式数。

x,y=symbols('x y') 
binomial(x,y)
Output:
(x/y)
binomial(4,2)
Output:
6
Rows of Pascal's triangle can be generated with the binomial function.
for i in range(5): print ([binomial(i,j) for j in range(i+1)])
Output:
[1]
[  1, 1  ] 
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]

斐波那契

        斐波那契数列以 F0=0 和 F1=1 开始,后续的每一项都通过添加前面的两项来确定 (Fn=Fn−1+Fn−2)。

[fibonacci(x) for x in range(10)]
Output:
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

tribonacci
        Tribonacci 数形成一个整数序列,从 F0=0、F1=1、F2=1 开始,后续的每一项都是前面三项的和 (Fn=Fn-1+Fn-2+Fn-3) 。

tribonacci(5, Symbol('x'))
Output:
x^8+3x^5+3x^2
[tribonacci(x) for x in range(10)]
Output:
[0, 1, 1, 2, 4, 7, 13, 24, 44, 81]

八、杂项功能

        以下是一些常用功能的汇总:

  1. Min:此函数提供列表中的最小值。它被命名为“Min”是为了防止与内置函数“min”发生冲突。
  2. Max:当您需要列表中的最大值时,“Max”函数可以满足您的需求,旨在避免与内置“max”函数发生冲突。
  3. root:“root”函数用于获取给定数字 x 的 n 次方根。
  4. sqrt:如果您对数字的主平方根感兴趣,可以使用“sqrt”函数。
  5. cbrt:“cbrt”函数计算数字的主立方根,这是 x++Rational(1,3) 的便捷快捷方式。

        现在,让我们看一些示例,说明这些杂项函数的用法及其相应的结果。

Min(pi,E)
Output:
e
Max(5, Rational(11,2))
Output:
11/2
root(7,Rational(1,2))
Output:
49
sqrt(2)
Output:
√2
cbrt(1000)
Output:
10

九、SymPy — 四元数

        在数学领域,四元数系统是比复数更广泛的框架。在每个四元数实体中,存在四个标量变量,包含一个真实维度和三个虚构维度。

        四元数由以下表达式表示:

q = a + bi + cj + dk

        在此表达式中,“a”、“b”、“c”和“d”都是实数值,而“i”、“j”和“k”表示四元数单位。值得注意的是,这些单位满足以下关系:i² = j² = k² = ijk。

        四元数类可以在 sympy.algebras.quaternion 模块中找到。

from sympy.algebras.quaternion import Quaternion 
q=Quaternion(2,3,1,4) 
q
Output:
2+3i+1j+4k

        四元数用于纯数学,也用于应用数学、计算机图形学、计算机视觉等。

from sympy import * 
x=Symbol('x') 
q1=Quaternion(x**2, x**3, x)
q1
Output:
x^2+x^3i+xj+0k

        四元数对象也可以有虚数系数

q2=Quaternion(2,(3+2*I), x**2, 3.5*I) 
q2
Output:
2+(3+2i)i+x2j+3.5ik

十、添加 add()

        Quaternion 类中提供的此方法执行两个 Quaternion 对象的加法。

q1=Quaternion(1,2,3,4) 
q2=Quaternion(4,3,2,1) 
q1.add(q2)
Output:
5+5i+5j+5k

可以在四元数对象中添加数字或符号。

q1+2
Output:
3+2i+3j+4k
q1+x
Output:
(x+1)+2i+3j+4k

十一、乘法mul()

        此方法执行两个四元数对象的乘法。

q1=Quaternion(1,2,1,2) 
q2=Quaternion(2,4,3,1) 
q1.mul(q2)
Output:
(−11)+3i+11j+7k

十二、逆inverse()

        此方法返回四元数对象的逆。

q1.inverse()
Output:
1/10+(−1/5)i+(−1/10)j+(−1/5)k

十三、pow()

        此方法返回四元数对象的幂。

q1.pow(2)
Output:
(−8)+4i+2j+4k

十四、指数exp()

        此方法计算四元数对象的指数,即 eq

q=Quaternion(1,2,4,3) 
q.exp()

十五、SymPy — 求解器 Solvers

        由于Python的符号=和==作为赋值运算符和相等运算符具有特定含义,因此它们不适合表达符号方程。为了创建符号方程,SymPy 提供了 Eq() 函数作为专用工具。

from sympy import * 
x,y=symbols('x y') 
Eq(x,y)
Output:
x = y
Since x=y is possible if and only if x-y=0, above equation can be written as −
Eq(x-y,0)
Output:
x − y = 0

        SymPy 中的求解器模块提供了 soveset() 函数,其原型如下 -

solveset(equation, variable, domain)

        默认情况下,域为 S.Complexes。使用solvet()函数,我们可以求解代数方程如下 -

solveset(Eq(x**2-9,0), x)
Output:
{−3, 3}
solveset(Eq(x**2-3*x, -2),x)
Output:
{1,2}

        Solveset 的输出是解的有限集。如果没有解决方案,则返回 EmptySet

solveset(exp(x),x)
Output:
∅

十六、线性方程

        我们必须使用 linsolve() 函数来求解线性方程。

例如,方程如下 -

xy=4

x+y=1

from sympy import * 
x,y=symbols('x y') 
linsolve([Eq(x-y,4),Eq( x + y ,1) ], (x, y))
Output:
{(5/2,−3/2)}

        linsolve() 函数还可以求解以矩阵形式表示的线性方程。

a,b=symbols('a b') 
a=Matrix([[1,-1],[1,1]]) 
b=Matrix([4,1]) 
linsolve([a,b], (x,y))
Output:
{(5/2,−3/2)}

十六、非线性方程

        为此,我们使用 nonlinsolve() 函数。这个例子的方程 -

a2+a=0 ab=0

a,b=symbols('a b') 
nonlinsolve([a**2 + a, a - b], [a, b])
Output:
{(−1,−1),(0,0)}

十七、微分方程

        首先,通过将 cls=Function 传递给符号函数来创建一个未定义的函数。要求解微分方程,请使用 dsolve。

x=Symbol('x') 
f=symbols('f', cls=Function) 
f(x)
Output:
f(x)
Here f(x) is an unevaluated function. Its derivative is as follows −
f(x).diff(x)
Output:
d/dxf(x)
We first create Eq object corresponding to following differential equation
eqn=Eq(f(x).diff(x)-f(x), sin(x)) 
eqn
Output:
−f(x)+d/dxf(x)=sin(x)
dsolve(eqn, f(x))

        所以就是这样。这些函数是重要的构建块,构成模拟复杂数学情况的重要组成部分。

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

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

相关文章

构建labelstudio镜像的时候,报错node:18,如何解决

解决方案: vi Dockerfile # syntaxdocker/dockerfile:1.3 FROM --platformlinux/amd64 node:18.16-bullseye-slim AS frontend-builder18改成 18.16-bullseye-slim

【漏洞复现】锐捷EG易网关login.php命令注入漏洞

Nx01 产品简介 锐捷EG易网关是一款综合网关,由锐捷网络完全自主研发。它集成了先进的软硬件体系架构,配备了DPI深入分析引擎、行为分析/管理引擎,可以在保证网络出口高效转发的条件下,提供专业的流控功能、出色的URL过滤以及本地化…

【2024系统架构设计】 系统架构设计师第二版-通信系统架构设计理论与实践

目录 一 通信系统网络架构 二 网络构建的关键技术 三 网络构建和设计方法 四 案例分析 注:本节内容可作为知识储备,做一个基本的了解即可。

Linux-命名管道

文章目录 前言一、命名管道接口函数介绍二、使用步骤 前言 上章内容,我们介绍与使用了管道。上章内容所讲的,是通过pipe接口函数让操作系统给我们申请匿名管道进行进程间通信。 并且这种进程间通信一般只适用于父子进程之间,那么对于两个没有…

原来这些小众知识库软件这么好用,挖到宝了

在企业管理中,知识库的作用越来越被重视。它不仅可以提高工作流程的效率,还可以最大限度地利用企业中的知识资源。然而,在众多的知识库工具中选择一款合适的并非易事。不用担心,今天我要为大家揭晓一些小众却非常好用的知识库软件…

微信小程序实战-02翻页时钟-2

微信小程序实战系列 《微信小程序实战-01翻页时钟-1》 文章目录 微信小程序实战系列前言计时功能实现clock.wxmlclock.wxssclock.js 运行效果总结 前言 接着《微信小程序实战-01翻页时钟-1》,继续完成“6个页面的静态渲染和计时”功能。 计时功能实现 clock.wxm…

Linux前后端项目部署

目录 1.jdk&tomcat安装 配置并且测试jdk安装 修改tomcat 配置文件 登入tomcat 发布 安装mysql 导入sql数据 发布项目war包 redis安装 nginx安装 配置nginx域名映射 部署前端项目 centos 7的服务安装 安装jdk 安装tomcat 安装Mysql 安装redis 安装nginx 前后…

【Unity】Timer计时器属性及使用

可以代替协程完成延时操作 可以不用Update进行计时 GitHub开源计时插件 网址:https://github.com/akbiggs/UnityTimer/tree/master 导入:URL:https://github.com/akbiggs/UnityTimer.git 基本功能: 创建计时器: Time…

深入理解 Hadoop (四)HDFS源码剖析

HDFS 集群启动脚本 start-dfs.sh 分析 启动 HDFS 集群总共会涉及到的角色会有 namenode, datanode, zkfc, journalnode, secondaryName 共五种角色。 JournalNode 核心工作和启动流程源码剖析 // 启动 JournalNode 的核心业务方法 public void start() throws IOException …

OpenHarmony之hdc

OpenHarmony之hdc 简介 hdc(OpenHarmony Device Connector)是 OpenHarmony 为开发人员提供的用于调试的命令行工具,通过该工具可以在Windows/Linux/MacOS等系统上与开发机或者模拟器进行交互。 类似于Android的adb,和adb类似&a…

探索Java中的Map:领略键值对的无限魅力

目录 1、前言 2、介绍Map 2.1 什么是Map 2.2 Map的特点 3、常用的Map实现类 3.1 HashMap 3.2 TreeMap 3.3 LinkedHashMap 3.4 Hashtable 3.5 ConcurrentHashMap 4、操作Map的常用方法 5、Map的应用场景 5.1 缓存 5.2 数据存储 5.3 计数器 6、常见问题解答 6.1…

SEO 分步教程:初学者掌握的 8 个简单基础知识

如果您刚刚开始使用搜索引擎优化 (SEO),那么分步 SEO 教程是有序的。在这一点上,你可能已经听说过一些基本术语,如关键词研究和页面优化。但是,您如何应用迄今为止收集的所有知识呢? 如果您刚刚…

k8s的存储卷

存储卷----数据卷 容器内的目录和宿主机的目录进行挂载 容器在系统上的生命周期是短暂的,delete,k8s用控制创建的pod,delete相当于重启,容器的状态也会回复到初始状态 一旦回到初始状态,所有的后天编辑的文件都会消…

微信公众号——微信公众号实现发送模板消息

准备工作 在调用微信接口获取AccessToken时,需要使用到微信公众号的appid及appsecret,获取方式如下: 1.已有公众号 已有公众号: 有属于自己的公众号账户,登录微信公众平台(https://mp.weixin.qq.com),在…

SWM341系列之SWM34SRET6介绍

SWM341系列的介绍 本文介绍了华芯微特SWM341系列主要性能,和其系列之一的SWM34SRET6-50驱动4.3寸800*480 TFTLCD显示的例程应用。 SWM341系列性能 SWM341是一款基于ARM Cortex-M33的32位微控制器,片上包含精度为 1%以内的 20MHz/40MHz 时钟,最…

起诉业务员飞单需要什么证据?

在商业活动中,业务员飞单是一种常见的违规行为,给企业带来了巨大的经济损失。如果企业怀疑业务员存在飞单行为,需要收集足够的证据来证明其行为,并采取法律手段维护企业的合法权益。那么,起诉业务员飞单需要什么证据呢…

odoo17 | 视图操作按钮

前言 到目前为止,我们主要通过声明字段和视图来构建我们的模块。在上一章中,我们刚刚通过计算字段和onchanges引入了业务逻辑。在任何真实的业务场景中,我们都会希望将一些业务逻辑链接到操作按钮。在我们的房地产示例中,我们希望…

代码随想录算法训练营第一天 | 704. 二分查找、27. 移除元素

代码随想录算法训练营第一天 | 704. 二分查找、27. 移除元素 文章目录 代码随想录算法训练营第一天 | 704. 二分查找、27. 移除元素1 数组理论基础(基于面试)1.1 面试问题针对 Python1.2 面试问题针对 C 2 LeetCode 704.二分查找2.1 二分查找的实现2.2 P…

Buzz 离线音频转字幕工具(完全免费,无需登录)

关于 Buzz Buzz 是一款可以自动识别语音为文本字幕的软件工具,基于 OpenAI 开源的 Whisper 自动语音识别模型,可以批量将音频或者是视频中的内容自动转化为带有时间的字幕,速度非常快,是一款能极大提高效率的生产力小工具。 Bu…

Vue项目在ie浏览器中显示白屏优化提示

在工作中用到Vue开发项目,用户在IE浏览器打开页面,结果显示空白屏。作为开发者当然知道是浏览器版本过低导致语法不支持,但是用户不知情的情况下显示空白屏就很不友好。这时候有必要在页面上做点提示语告诉用户切换浏览器,下面是页…