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

news2024/11/20 1:43:11

一、说明

        在过去的两篇文章中,我们了解了 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.coloradmin.cn/o/1375450.html

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

相关文章

软件测试|如何在 Python 中比较两个列表

简介 在Python中,比较两个列表是一个常见的任务,可以帮助你找出两个列表之间的差异、共同元素或其他关系。本文将详细介绍如何在Python中比较两个列表的不同方法,包括使用循环、集合操作和列表推导式等。 方法1:使用循环比较列表…

2024年美赛数学建模思路 - 复盘:光照强度计算的优化模型

文章目录 0 赛题思路1 问题要求2 假设约定3 符号约定4 建立模型5 模型求解6 实现代码 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 问题要求 现在已知一个教室长为15米,宽为12米&…

快速上手:Tomact集群配置(图文并茂)

目录 博客前言: 一.前期准备工作 1 .Tomcat集群架构图 2. 准备工具 二.配置集群 1.tomact配置 1.1首先解压一个tomact 1.2 解压后再准备2个tomcat 1.3修改第二个的端口号 ​编辑 1.4修改默认页面 ​编辑1.5启动8080的tomact 2.nginx 安装配置 2.1.安装…

Java诊断利器Arthas

https://arthas.aliyun.com/doc/https://arthas.aliyun.com/doc/ 原理 利用java.lang.instrument(容器类) 做动态 Instrumentation(执行容器) 是 JDK5 的新特性。使用 Instrumentation,开发者可以构建一个独立于应用程序的代理程序(Agent)&…

rsync远程同步实现异地备份

1.rsync 的概念 rsync(Remote Sync,远程同步) 是一个开源的快速备份工具,可以在不同主机之间镜像同步整个目录树,支持增量备份,并保持链接和权限,且采用优化的同步算法,传输前执行压…

CSS 选择器全攻略:从入门到精通(下)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

数字化发展助力青少年阅读回归“慢节奏”

近日,《2024年学前及中小学生寒假分年级阅读推荐书目》发布,正尝试引领青少年阅读在短视频时代回归“慢节奏”。该推荐书目针对每个学龄孩子的学习特点、认知特点、心理特点进行推荐,旨在培养孩子的深度思考能力。 在数字化时代,…

深度解析Java中的ReadWriteLock:高效处理并发读写操作

第1章:引言 大家好,我是小黑,今天咱们聊聊读写锁。当多个线程同时对同一数据进行读写操作时,如果没有合理的管理,那数据就乱套了。就好比小黑在写日记,突然来了一帮朋友,大家都想往日记本上写点…

居中面试问题

前端常问居中面试问题 css文本居中 文本水平居中 <div class"father"><div class"child"><div> <div>子类元素为行内元素&#xff0c;则给父类元素定义text-align:center 如果子元素是块元素&#xff0c;则给子元素定义margin&…

统计学-R语言-2.2

文章目录 前言导入.RData文件方式1方式2方式3 导入程序包总结 前言 本篇文章是将上篇得软件安装完&#xff0c;对其部分功能进行介绍。 导入.RData文件 在我们日常练习时会有.RData文件导入&#xff0c;并对其进行分析&#xff0c;下面是两种方导入.RData文件。 方式1 直接…

Vue3 + TS + Element-Plus —— 项目系统中封装表格+搜索表单 十分钟写五个UI不在是问题

前期回顾 纯前端 —— 200行JS代码、实现导出Excel、支持DIY样式&#xff0c;纵横合并-CSDN博客https://blog.csdn.net/m0_57904695/article/details/135537511?spm1001.2014.3001.5501 目录 一、&#x1f6e0;️ newTable.vue 封装Table 二、&#x1f6a9; newForm.vue …

zabbix-proxy代理安装及其他监控方式

zabbix-proxy代理安装及其他监控方式 安装zabbix-proxyserver端配置zabbix-proxy配置被监控的agent安装中问题解决监控网络设备JMX和IPMI监控方式 zabbix-proxy的安装&#xff0c;至少需要准备三台机器&#xff0c;一台安装服务端&#xff0c;一台安装agent端&#xff0c;这里就…

Java注释解析

ava 中的注释有单行注释 //、多行注释 /* */ 和文档注释 /** */ 三种&#xff0c;其中文档注释可以通过 javadoc 命令生成 API 文档。以下是一个 Java 注解的示例代码&#xff1a; 上述代码中&#xff0c;interface 关键字用于定义注解&#xff0c;接着定义了一个名为 Descrip…

git 的安装

git 的安装 在我们开始使用 Git 前&#xff0c;需要将它安装在我们的电脑上。即便已经安装&#xff0c;最好将它升级到最新的版本。 我们可以通过软件包或者其它安装程序来安装&#xff0c;或者下载源码编译安装。 本文只介绍通过在 windows 上安装软件包的方式&#xff0c;其…

格雷希尔G65系列快速接头满足汽车减震器的气压、油压测试要求

当汽车经过不平路面时&#xff0c;汽车减震器可以抑制弹簧吸震后因反弹带来的震荡和来自路面的冲击&#xff0c;为乘客带来平稳舒适的行车体验。减震器在出厂之前&#xff0c;需要模拟汽车的真实行驶环境&#xff0c;在模拟当中需要对它们进行气压和油压的轮番测试。 客户的测试…

【案例】HOOPS平台帮助Proplanner为客户解决数十年的数据管理难题

行业&#xff1a;制造业公司&#xff1a;Proplanner软件&#xff1a;Assembly Planner软件开发工具包&#xff1a;HOOPS Native Platform挑战&#xff1a; 为生产复杂组件的公司引入行业领先产品的新功能。帮助客户轻松导入可视化CAD模型&#xff0c;同时提取底层数据。在工艺…

禁用code server docker容器中的工作区信任提示

VSCode 添加受限模式&#xff0c;主要是防止自动运行代码的&#xff0c;比如在vscode配置的task和launch参数是可以运行自定义代码的。如果用VScode打开未知的工程文件就有可能直接运行恶意代码。 但是当我们的实验基础模板文件可控的情况下&#xff0c;要想禁用code server do…

你为什么还在用Promise.all?

请停止在JavaScript中使用Promise.all() 什么是JavaScript中的Promise 如果您偶然发现这篇文章,那么您可能已经熟悉了promise。 但是,对于那些JavaScript新手来说,让我们来详细说明一下。 从本质上讲,Promise对象表示异步操作的最终完成或失败。 有趣的是,当创建promise时,其值…

书生·浦语第三次作业

我最近在参加书生浦语大模型实战营&#xff0c;这是第三次作业打卡&#xff01; 如果你也想两周玩转大模型微调&#xff0c;部署与测评全链路。报名链接&#xff1a;invite 书生浦语大模型实战营报名 邀请码可以填026014 一、基础作业&#xff1a;复现课程知识库助手搭建过程…

Vercel配置自定义域名

首先你需要有一个域名 1.点击部署的项目设置 2.找到Domains 3.输入自己的域名 点击添加之后按要求去域名服务商添加解析即可 4.显示下面内容就设置完成了&#xff0c;