版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章MWORKS简介全套可编辑PPT课件
第1章MWORKS简介第2章
矩阵、数组、符号运算第3章
编程第4章
绘图第5章
数值计算方法第6章
图形用户界面设计第7章Sysplorer仿真系统本章目标了解科学计算与建模仿真平台的发展背景掌握MWORKS软件体系结构及组成熟悉Syslab的基本功能与应用场景了解Syslab的基础函数库与工具箱能够使用帮助系统进行自主学习知识点总览科学计算平台概述:主流科学计算软件的发展历程与技术特点MWORKS软件体系:四大系统级产品及整体架构组成Syslab基本功能:界面结构、运行方式与核心应用能力基础函数库:TyBase、TyMath、TyPlot等函数库的功能分类符号计算与工具箱:TySymbolicMath及常用数学工具箱功能帮助系统:帮助模式与线上使用手册的使用方法科学计算的定义与发展什么是科学计算?科学计算是指运用计算机处理科学与工程技术中的数学问题,通过数学运算和数值计算方法求解复杂模型的科学问题。数值计算NumericalComputing数据分析DataAnalysis建模仿真Modeling&Simulation发展历程1早期阶段:专注于数值计算环境开发,提供基础的数学运算和矩阵计算功能2Modelica革命:1997年Modelica语言诞生,推动科学计算软件走向可视化建模,支持多领域统一建模仿真3现代发展:从单一科学计算走向信息物理融合,支持数字化与智能化融合科学计算的定义与发展核心特点高精度计算支持复杂数学模型的高精度数值求解可视化建模图形化界面降低建模门槛多领域融合支持机械、电子、控制等多领域协同应用领域航空航天车辆工程船舶设计能源系统计算范式科学计算通常包含三种核心范式——数值计算、数据分析与建模仿真,共同构成现代科学研究的主要计算框架三大商业科学计算软件MATLABMathWorks公司核心功能数值计算、数据分析、算法开发、数据可视化、创建用户界面配套工具Simulink:系统模拟、动态/嵌入式系统开发工具箱拥有众多功能强大的工具箱,满足不同领域应用需求地位:工程领域最广泛使用的科学计算平台MathematicaWolfram公司核心功能强大的数值计算和符号运算能力,被称为计算机代数系统应用领域科学、工程、数学、计算等领域特色符号运算能力业界领先,支持复杂数学公式推导地位:符号计算领域的标杆产品MapleMaplesoft公司核心功能符号运算和数值计算,提供完整的数学计算环境教育应用在教育领域广泛应用,支持数学教学与研究配套产品MapleSim:基于Modelica的多领域物理建模地位:教育与研究领域的重要工具共同特点:三大软件都经历了从科学计算环境到可视化建模环境的发展,现均支持Modelica语言进行多领域统一建模仿真图形参数设置子窗口设置subplot(m,n,p)将窗口拆分为m×n个子窗口,第p个为当前窗口子窗口顺序:先按行从左到右特殊符号支持希腊字母\alphaα\betaβ\gammaγ\thetaθ\piπ\omegaω\sigmaσ\phiφ数学符号\infty∞\int∫\partial∂\rightarrow→图例与注释legend("说明"):添加图例text(x,y,"字符串"):在图中插入说明文字作用:区分多条曲线、突出关键信息开源科学计算语言Python最流行的开源编程语言语言特性解释型、高级、通用编程语言,支持多种编程范型类型系统动态类型系统,自动内存管理(垃圾回收)标准库拥有巨大且广泛的标准库,生态丰富应用领域数据科学、AI、Web开发、自动化等Julia高性能科学计算语言编译方式即时编译(JIT),无需解释器,执行效率高类型系统参数多态类型系统,完全动态语言类型并行计算支持并发、并行和分布式计算外部调用直接调用C和Fortran库,无需粘合代码Scilab开源数值计算软件数据类型以矩阵作为主要数据类型绘图功能具有丰富的绘图功能语法特点语法与MATLAB相近功能领域信号处理、统计分析、图像增强、数值优化开源科学计算语言开源vs商业开源优势免费使用、源代码可见、社区活跃、可定制性强商业优势技术支持完善、文档丰富、工具箱专业、稳定性高选择建议根据项目需求、预算、技术栈综合考虑MWORKS平台介绍同元软控与MWORKSMWORKS是由苏州同元软控信息技术有限公司出品的科学计算与系统建模仿真软件,是国内为数不多具有国际一流技术水平、自主可控的工业软件之一。发展历程研发团队自2001年开始专注Modelica技术研发,历时20多年推出核心产品技术突破2019年开始用Julia开发科学计算环境,2022年推出Syslab核心能力多领域统一建模机械、电子、液压、控制、信息一体化数字化模型表达复杂装备数字化模型标准表达信息物理融合物理系统与信息系统融合支持MBSE使能工具基于模型的系统工程方法落地MWORKS平台介绍重大工程应用探月工程为嫦娥系列任务提供技术支持空间站支持空间站系统设计与仿真国产大飞机C919等型号研制关键工具核能动力核动力系统设计与分析服务行业航空航天能源车辆船舶电子MWORKS产品体系四大系统级产品Sysbuilder系统架构设计环境全面支持SysML规范,提供需求建模、功能分析、架构设计、验证评估等功能Syslab科学计算环境基于Julia语言,提供通用编程、算法开发、数据分析与可视化功能Sysplorer系统建模仿真环境完全支持Modelica,提供物理、框图、状态机等多范式建模Syslink协同建模与数据管理提供协同建模、模型管理、云端仿真和安全保密功能产品架构1应用层航空、航天、能源、车辆等行业应用2平台层Sysbuilder/Syslab/Sysplorer/Syslink3基础层工具箱、模型库、MoHub平台MWORKS产品体系系统扩展工具箱AI与数据科学信号处理与通信雷达系统控制系统设计优化模型库传动系统液压系统电机系统热流系统支持用户扩展MoHub平台工业知识模型互联平台在线建模仿真工科教学功能知识社区应用赋能Syslab安装与功能安装步骤1下载安装包从同元软控官网申请下载Syslab安装包(iso光盘映像文件)2启动安装向导双击安装程序,进入Syslab安装向导界面3选择安装配置同意用户许可协议,选择安装路径(默认:C:\ProgramFiles\MWORKS\Syslab)4关联文件格式勾选.jl文件(Julia源代码)和.jld2文件(Julia数据格式)5完成安装桌面生成快捷方式,开始程序组生成Syslab程序组核心功能基于Julia开发新一代高性能科学计算语言多语言兼容兼容Python和M语言语言互调用支持与Python、C/C++、Fortran、M、R等相互调用应用领域信号处理通信仿真图形图像处理控制系统设计人工智能信息物理融合:Syslab信息域计算分析与Sysplorer物理域建模仿真相融合,支持完整的信息物理融合系统建模仿真Syslab界面与基础函数库界面构成(5大部分)工具栏提供平台快捷操作按钮,包括文件操作、编辑、运行等功能左侧边栏提供不同的功能部件,可单击展开功能面板命令行窗口进行终端交互,输入命令并回显执行结果工作区进行全局变量列表的显示与管理状态栏提示状态信息,显示当前操作状态专业工具箱曲线拟合统计工具优化工具全局优化符号数学更多...五大基础函数库TyBase语言基础基本运算、数组索引、数据类型、控制流TyMath数学函数初等数学、线性代数、随机数、插值、微分方程TyPlot图形函数二维和三维绘图、格式注释、图形对象TyImages图像函数图像读取、写入、显示、修改、滤波器TyGeoGraphics地理图地理数据可视化、地图影像、坐标区加载方式importTyBaseusingTyMath163Syslab帮助系统与使用示例帮助系统帮助模式在Julia提示符julia>后输入?,提示符转变为help?>julia>?help?>sin显示sin函数的帮助信息使用手册单击工具栏"帮助"按钮,打开Syslab使用手册访问同元软控官网,进入"帮助中心"→"Syslab"命令行操作技巧向上键选取已执行过的语句Delete/Backspace删除字符语法高亮输入usingOhMyREPL启用执行代码按回车键执行语句基础计算示例创建变量julia>a=33julia>b=6;c=17;数学运算julia>(a+b)*c-c136julia>sin(a)+cos(b)-2.3926...符号数学julia>usingTySymbolicMathjulia>@variablesxjulia>int(x^3,x)学习建议1多使用帮助系统查询函数用法2通过示例代码学习语法3动手实践,多编写代码本章小结本章围绕MWORKS科学计算平台及Syslab环境
展开,系统介绍了科学计算的基本概念及其在工程技术中的重要作用,帮助读者建立对科学计算软件体系的整体认识。首先,阐述了科学计算的定义与发展背景,说明科学计算是利用计算机对科学与工程问题进行数学建模、数值计算与仿真分析的重要手段,并介绍了主流科学计算软件的发展现状及技术趋势。其次,对MWORKS软件体系结构
进行了总体介绍,重点说明其四大系统级产品及多领域统一建模思想,使读者了解科学计算环境与系统建模环境之间的关系。在此基础上,本章重点介绍了Syslab科学计算环境
的基本功能与界面结构,包括命令行窗口、工作区以及基本运行方式,使读者能够从整体上理解软件的使用流程。随后,详细介绍了Syslab的基础函数库与工具体系,包括语言基础函数库、数学函数库、图形函数库及符号数学工具箱等内容,说明这些函数库在数值计算、数据处理与可视化中的作用。最后,本章介绍了Syslab的帮助系统及学习方法,为后续深入学习软件操作与科学计算应用奠定基础。第2章矩阵、数组、符号运算本章目标掌握在Syslab(Julia模式下)中矩阵、数组与符号运算的核心概念与操作体系。理解Syslab中数组作为通用数据结构的特性,即将标量、向量和矩阵统一视为数组的不同维度形式,并掌握对数组全元素同时进行并发操作的方法。
深入认识符号运算在高等数学及相关科学工程领域的重要性,熟练运用Syslab依托TySymbolicMath工具箱和SymPy函数库所提供的强大符号运算能力。知识点总览矩阵与数组的创建与操作:涵盖矩阵和数组的构建方法,以及与它们相关的一系列基本函数应用。多项式处理:多项式的创建方式及其相关操作运算。常见数值计算函数:介绍数值计算中高频使用的基础函数(具体的系统性数值计算方法安排在第5章介绍)。符号表达式:详细探讨符号表达式的定义机制与求解方法。*微积分与积分变换:重点解析与微积分运算、积分变换相关的特定函数,并通过大量示例展示其实际应用。解符号方程:详细介绍用于求解各类符号方程的相关函数及具体操作流程。1.创建矩阵的方法-直接输入法#需要注意:可以通过Space键断开同行的元素,通过分号键断开矩阵的行.julia>A=[13;57]2×2Matrix{Int64}:1357对于简单矩阵来讲,直接输入法是创建矩阵最直接、简单、有效的一种方法。利用已有矩阵,我们还可以通过直接输入法定义特定元素,创建更大的矩阵。示例:创建矩阵直接输入规则:使用方括号[]建立矩阵。同行元素使用空格分隔,不同行使用分号;或回车符断开。#也可以通过Space键断开同行的元素,通过Enter键断开矩阵的行.julia>A=[1357]2×2Matrix{Int64}:13571.创建矩阵的方法-直接输入法#在命令行窗口中直接输入矩阵A的所有元素.julia>A=[162313;511108;97612;414151]4×4Matrix{Int64}:16231351110897612414151示例:创建Dürer矩阵,又称魔术矩阵,如下#借助magic函数创建一个4×4的魔术矩阵.julia>B=magic(4)4×4Matrix{Int64}:162313511108976124141511.创建矩阵的方法-创建矩阵的函数全零矩阵:zeros函数用于创建全零矩阵,函数具体用法如下表所示。语法描述zeros(m,n)创建一个m×n的全零矩阵zeros(m,n,p,…)创建一个m×n×p×…的全零数组zeros(size(A))创建一个和矩阵A同行数、同列数的全零矩阵#借助zeros函数创建一个1×1的全零矩阵.julia>zero1=zeros(1,1)1×1Matrix{Float64}:0.0#借助zeros函数创建一个2×3的全零矩阵.julia>zero23=zeros(2,3)2×3Matrix{Float64}:0.00.00.00.00.00.0#借助zeros函数创建一个3×5×2的全零数组.julia>zero352=zeros(Int8,3,5,2)3×5×2Array{Int8,3}:[:,:,1]=000000000000000[:,:,2]=0000000000000001.创建矩阵的方法-创建矩阵的函数全1矩阵:ones函数用于创建全1矩阵,函数具体用法如下表所示。语法描述ones(m,n)创建一个m×n的全1矩阵ones(m,n,p,…)创建一个m×n×p×…的全1数组ones(size(A))创建一个和矩阵A同行数、同列数的全1矩阵#借助ones函数创建一个1×1的全1矩阵.julia>one1=ones(Int8,1,1)1×1Matrix{Int8}:1#借助ones函数创建一个2×7的全1矩阵.julia>one27=ones(Int8,2,7)2×7Matrix{Int8}:11111111111111#借助ones函数创建一个3×6×3的全1数组.julia>one363=ones(Int8,3,6,3)3×6×3Array{Int8,3}:[:,:,1]=111111111111111111[:,:,2]=111111111111111111[:,:,3]=1111111111111111111.创建矩阵的方法-创建矩阵的函数随机矩阵:rand函数用于创建随机矩阵,函数具体用法如下表所示。#创建一个5×5的随机矩阵,矩阵元素取值区间为[5,99].julia>B=rand(5:99.0,5,5)5×5Matrix{Float64}:74.054.025.022.022.098.081.021.018.07.089.056.026.059.024.055.074.062.050.038.037.070.012.088.040.0#创建一个包含50个元素的整数数组,元素随机分布在1到100之间.julia>C=Int.(ceil.(100*rand(1,50)))1×50Matrix{Int64}:7326954759788511417…9155907947573466199语法描述rand()创建一个随机数rand(m,n)创建一个m×n的随机矩阵rand(m,n,p)创建一个m×n×p的随机数组rand(size(A))创建一个和矩阵A同行数、同列数的随机矩阵注意:在创建随机矩阵时,输入的m,n,p应该是非负整数,如果输入的是负整数,则将按0处理。1.创建矩阵的方法-创建矩阵的函数正态分布的随机矩阵:rand函数用于创建随机矩阵,函数具体用法如下表所示。#创建一个2×3的正态分布的随机矩阵.julia>randn(2,3)2×3Matrix{Float64}:0.527758-0.711214-1.541010.7864390.693059-1.49932#创建一个2×5×2的正态分布的随机数组.julia>randn(2,5,2)2×5×2Array{Float64,3}:[:,:,1]=-0.439588-1.594290.3896560.6909271.611890.2287531.90016-0.505281-0.40605-0.440335[:,:,2]=0.74998-1.12546-0.103837-0.323970.757251-0.7624171.42322-0.6994460.700677-0.926721注意:在创建正态分布的随机矩阵时,输入的m,n,p应该是非负整数,如果输入的是负整数,则将按0处理。语法描述randn创建一个正态分布的随机数。randn(n)创建一个n×n的正态分布的随机矩阵。randn(m,n)创建一个m×n的正态分布的随机矩阵。randn(m,n,p)创建一个m×n×p的正态分布的随机数组。randn(size(A))创建一个与矩阵A同行数、同列数的正态分布的随机矩阵。2.创建数组的方法-创建数组的函数矩阵离开线性代数就变成了二维数组。矩阵的四则运算是将整个矩阵看成一个操作对象进行的,而数组操作是对单个元素进行的。仅从外表来看,数组和矩阵具有完全相同的外在形式,我们可以借助所有创建矩阵的函数来创建数组。矩阵和数组有一个明显的不同之处,即矩阵是二维的,数组可以超过二维。2.创建数组的方法-矢量生成方法#借助冒号创建一个矢量A=[12345678910].julia>A=collect(1:10)10-elementVector{Int64}:12345678910冒号:冒号不仅可以用于引用、添加、删除数组的元素,还可以用于创建矢量。示例:借助冒号和collect函数创建几个矢量#创建一个矢量,元素从100到20,步长为-9.julia>C=collect(100:-9:20)9-elementVector{Int64}:10091827364554637282.创建数组的方法-矢量生成方法LinRange函数:LinRange函数是用于生成等间距的数值范围的函数,可以用来创建等差数列,函数具体用法如下表所示。#创建一个包含9个元素的矢量,元素为11到99区间内的等差数列.julia>collect(LinRange(11,99,9))9-elementVector{Float64}:11.022.033.044.055.066.077.088.099.0语法描述LinRange(start,stop,n)创建一个包含
n个元素的矢量,这些元素在起始值和终止值之间等间距分布,具体间距由
(stop-start)/(n-1)计算得出,以确保矢量的元素是等间距的。2.创建数组的方法-矢量生成方法logspace函数:logspace函数用于创建对数等差数组,函数具体用法如下表所示。#在10到10^9区间内生成一个包含8个元素的对数等差数组.julia>logspace(1,9,8)8-elementVector{Float64}:10.0138.949549437313751930.697728883249526826.957952797216372759.37203149385.1794746792312125e67.196856730011514e71.0e9语法描述logspace(x1,x2)在10^x1到10^x2区间内生成一个包含50个元素的对数等差数组。logspace(x1,x2,n)在10^x1到10^x2区间内生成一个包含n个元素的对数等差数组。2.创建数组的方法-矢量生成方法基于已有矩阵或数组创建新数组:在某些情况下,已经定义了一些矩阵或数组,如果待创建数组的所有元素或部分元素在已有矩阵或数组中已经存在,则可以借助已有矩阵或数组创建所需的新数组。#基于已有矩阵A,创建一个新数组或矢量,记为B.julia>B=vec(A)#基于已有矩阵A,创建一个新数组或矢量,记为C.julia>C=A[1:4:25]#基于已有矩阵A,创建一个新数组或矢量,记为D,只包含矩阵A的第一列.julia>D=A[:,1]#基于已有矩阵A,创建一个新数组或矢量,记为E,只包含矩阵A的第一列与第二列.julia>E=A[:,[1,2]]#借助已有矩阵A,创建一个新数组或矩阵,记为F,只包含矩阵A的部分特定元素.julia>F=A[[1,3,5],[2,4]]3.矩阵和数组的运算操作本节将对矩阵和数组的运算操作进行介绍,既有简单的初等运算,也有相对复杂的高等运算。下面先介绍一些常数变量、常用符号和常见的操作命令,变量描述π或pi圆周率π的近似值。realmin最小正实数。realmax最大正实数。bitmax最大正整数。im虚数单位。Inf无穷大。NaN非数。eps机器零阈值。ans计算结果的默认数值变量。3.矩阵和数组的运算操作符号描述{}单元素数组创建符号。[]矩阵或数组创建符号。()标注角标参数。''标注字符串。,用于区分下标或矩阵元。;①压缩命令行窗口的运算结果,让其不显示;②断开矩阵行;③断开Syslab中的执行语句,表示上一条语句到此为止。#标注解释内容。:用于创建等差数列。+加法。-减法。.*点乘,数组乘法。*乘法。./数组右除。.\数组左除。/右除。\左除。.^数组乘方。^数乘方,矩阵乘方。'矩阵和数组转置,复数取共轭。…悬挂,代表上一行语句没有输入完。3.矩阵和数组的运算操作变量描述clc()清除命令行窗口。clear()清除工作空间中的变量。clf()清除图形窗口。diary将命令行窗口中的文本记录到日志文件中。Ctrl+D终止Syslab程序(与exit()等效)。Ctrl+L清除命令行窗口。Ctrl+R打开命令历史记录窗口。read()读取一个或多个视频帧。readdir()列出当前文件夹中所有的.jl文件和包含.jl文件的文件夹。println()显示变量或文字的内容。load()将文件变量加载到工作区中。push!(LOAD_PATH,“/path/to/add”)显示搜索目录。exit()终止Syslab程序。which(f,types)定位函数和文件。import导入整个库或库中的模块。using加载整个库或库中的模块,并使其可直接使用。iskeyword确认输入是否为Syslab关键字。ty_format设置命令行窗口输出显示格式。varinfo()列出当前工作区中的变量及其大小和类型。@show显示表达式和结果,返回结果。@time执行表达式的宏,打印执行所需要的时间、分配数及其字节总数。3.矩阵和数组的运算操作调用函数通常使用小括号,而不是中括号或大括号。函数和变量名通常使用小写字母,以遵循Syslab的命名约定。然而,函数参数名中可以包含大写字母,尤其是在某些API或库中。带点的运算符(如.+和.*等)用于进行按元素的运算操作。这些运算符不仅适用于一维数组,还适用于多维数组。由于矩阵被视为二维数组,因此带点的运算符同样适用于矩阵。这意味着,当使用带点的运算符时,是对矩阵或数组的每个元素逐一进行操作,而不是将整个矩阵或数组视为单一的运算单元。注意:3.矩阵和数组的运算操作-四则运算矩阵四则运算:标量、矢量和复数都可以进行四则运算。矩阵四则运算符如表所示。运算符描述+加。-减。*乘。/右除。\左除。^乘方。'转置。()限定运算顺序。转置符号作用到矩阵上,表示对整个矩阵进行转置;作用到复数上,表示对复数进行求共轭。3.矩阵和数组的运算操作-四则运算数组四则运算对数组进行四则运算操作,实际上是对数组元素分别进行操作。数组四则运算符如表所示。
在进行数组四则运算时,如果两个数组都包含多个元素,那么两个数组的元素个数必须相等。上面示例中计算点积和叉积选用的是TySymbolicMath函数库中的函数命令,除此之外还可以选用SymPy函数库中的SymPy.dot和SymPy.cross命令。运算符描述+加。-减。.*乘。./右除。.\左除。.^乘方。()限定运算顺序。dot(A,B)计算两个矢量A和B的点积。cross(A,B)计算两个矢量A和B的叉积。3.矩阵和数组的运算操作-初等数学运算一般读者对初等数学运算的相关知识都非常熟悉,因此这里只给出一些初等数学函数。函数描述abs(x)x的绝对值。angle复数的相角或极角。conj复共轭函数。imag复数的虚部。real复数的实部。sin(x)x的正弦函数,x的单位为弧度。sind(x)x的正弦函数,x的单位为度。sinpi(x)x*pi的正弦函数。asin(x)x的反正弦函数,结果的单位为弧度。asind(x)x的反正弦函数,结果的单位为度。sinh双曲正弦函数。asinh反双曲正弦函数。cos(x)x的余弦函数,x的单位为弧度。acos(x)x的反余弦函数,结果的单位为弧度。3.矩阵和数组的运算操作-初等数学运算续上页:函数描述tan(x)x的正切函数,x的单位为弧度。tand(x)x的正切函数,x的单位为度。atan(x)x的反正切函数,结果的单位为弧度。atand(x)x的反正切函数,结果的单位为度。sqrt(x)x的平方根。log(x)x的自然对数。log10(x)x的常用对数(以10为底)。exp(x)x的指数。sign(x)符号函数。3.矩阵和数组的运算操作-初等数学运算因为在计算过程中经常需要进行四舍五入,所以下面给出一些常用的四舍五入函数。函数描述mod(a,m)除后的余数(取模运算)。rem(a,b)除后的余数。div(A,B,opt)带有舍入选项的整除,opt可选择RoundDown或RoundUp或RoundNearestTiesAway等。ceil(x)向正无穷舍入,如ceil(3.1)=4和ceil(-3.1)=-3。trunc(x)向0舍入,如fix(3.1)=3和fix(-3.1)=-3。floor(x)向负无穷舍入,如floor(3.1)=3和floor(-3.1)=-4。round(x)向最近的小数或整数舍入。3.矩阵和数组的运算操作-矩阵运算函数函数描述det求矩阵的行列式。eig(A)返回矩阵A的特征值和特征向量。eigvals(A)返回矩阵A的特征值。eigvecs(A)返回矩阵A的特征向量。inv(A)求矩阵A的逆矩阵。rank(A)求矩阵A的秩。tr(A)求矩阵A的迹,即主对角线元素之和。svd(A)矩阵A的奇异值分解。[U,S,V]=SVD(X),S为对角矩阵,它们满足X=U*S*V'。gsvd(A)矩阵A的广义奇异值分解。U,V,X,C,S=gsvd(A,B),返回的U和V为酉矩阵,矩阵X及非负对角矩阵C和S满足A=U*C*X′,B=V*S*X′,C′*C+S′*S=I。diag(A)取矩阵的主对角线元素。diag(A,k),其中k可取大于0或小于0的数,但默认值为0。3.矩阵和数组的运算操作-矩阵运算函数示例:首先创建矩阵B:然后求矩阵B的行列式、特征值和特征向量、逆矩阵、秩、迹、奇异值分解、主对角线元素等。#加载TyBase和TyMath两个函数库.julia>usingTyBasejulia>usingTyMath#创建一个5×5的魔术矩阵,记为B.julia>B=magic(5)#计算矩阵B的行列式.julia>det(B)#计算矩阵B的特征值和特征向量,分别存储在D和V中.julia>D=eigvals(B)Julia>V=eigvecs(B)#计算矩阵B的逆矩阵.julia>inv(B)#计算矩阵B的秩.julia>rank(B);#计算矩阵B的迹.julia>tr(B);#求矩阵B的奇异值分解.julia>U,S,V=svd(B)#取矩阵B的主对角线元素.julia>diag(B)3.矩阵和数组的运算操作-矩阵运算函数在一些特定条件下,我们可能需要重新创建已有矩阵,Syslab为用户提供了丰富的操作矩阵函数,如表所示。函数描述rotr90将矩阵顺时针旋转90度,如果带有参数K,则表示将矩阵顺时针旋转K*90度,K=+1,-1,+2,-2,…。rotl90将矩阵逆时针旋转90度,如果带有参数K,则表示将矩阵逆时针旋转K*90度,K=+1,-1,+2,-2,…。函数描述tril取矩阵的下三角部分,省略参数K,默认值为0。一般从主对角线的上K行取矩阵的下三角部分(如果K为负值,则从主对角线的下K行取矩阵的下三角部分)。triu取矩阵上的三角部分,省略参数K,默认值为0。一般从主对角线的上K行取矩阵的上三角部分(如果K为负值,则从主对角线的下K行取矩阵的上三角部分)。flipud将矩阵上下翻转。fliplr将矩阵左右翻转。transpose复共轭转置。4.多项式-多项式表述Syslab通常可以借助包含所有系数的数值矢量来表示符号多项式。矢量、数组和矩阵既可以通过键盘直接输入,也可以通过Syslab中已经定义的函数来实现。#首先创建一个矢量,然后将其所表示的多项式转化为常见形式.#########julia>clc()#清除命令行窗口.julia>clear()#清除工作空间中的变量.#创建一个矢量.julia>A=[2,5,9,6,3,8]6-elementVector{Int64}:259638#将矢量A转化为一个符号多项式.julia>poly2sym(A)8+3x+6(x^2)+9(x^3)+5(x^4)+2(x^5)示例:首先创建一个矢量,然后将其所表示的多项式转化为常见形式。4.多项式-多项式操作Syslab的数学函数库和符号数学工具箱中的多项式函数库为符号多项式提供了很多操作函数,如表所示。表中所列函数有限,读者如果对该类函数感兴趣,可以借助Syslab的帮助系统中的TyMath和TySymbolicMath函数库进一步学习,或者查阅相关资料。函数描述find_roots求解多项式的根(TySymbolicMath)。poly根据特定根给出多项式(TyMath)。conv多项式相乘(TyMath)。deconv多项式相除(TyMath)。polyder多项式微分(TyMath)。polyfit多项式曲线拟合(TyMath)。interp按整数因子增加采样率插值(TySignalProcessing)。polyval多项式求值(TyMath)。factor将多项式因式分解(TySymbolicMath)。函数描述gcd最大公因式(TySymbolicMath)。cont多项式系数的最大公约数(TySymbolicMath)。4.多项式-多项式操作示例:首先定义函数,然后在附近和范围内寻找函数极小值点的x轴坐标,在附近寻找函数值为0的点的x轴坐标(需要使用Optim和Roots)。#首先定义函数f=x^2*sin(x),然后在x=3附近和[-2,2]范围内寻找函数极小值点的x轴坐标,在x=-2附近寻找函数值为0的点的x轴坐标.#########julia>clc()#清除命令行窗口.julia>clear()#清除工作空间中的变量.#加载TyBase、TyMath、TySymbolicMath、TySignalProcessing、SymPy函数库.julia>usingTyBasejulia>usingTyMathjulia>usingTySymbolicMathjulia>usingTySignalProcessingjulia>usingSymPy#定义函数f=x^2*sin(x).julia>@variablesx1-elementVector{Num}:x#对函数f进行绘图,以证明上面的结果是正确的.julia>x=(-2*π):(π/100):(2*π);julia>y=f.(x);julia>usingTyPlotjulia>plot(x,y)#保留在当前图形窗口.julia>hold("on")#定义一个新自变量x1.julia>x1=range(-2π,stop=2π,length=100);#定义一个新因变量y1.julia>y1=zeros(1,length(x1));#绘制x1和y1的曲线,绘图结果如图2.1所示.julia>plot(x1,y1,"--",color="red")hold("off")#释放当前图形窗口.#寻找函数值为0的点对应的x轴坐标.usingRootsxzero=Roots.fzero(f,-4,-1)5.符号表达式的生成-创建符号对象Syslab的符号数学工具箱TySymbolicMath为用户提供了两个函数@syms和@variables,用于创建符号变量和符号数组,它们都可以一次定义多个符号对象。下面对它们的语法格式进行介绍。1.@syms函数@syms函数用于创建符号变量和符号数组。@syms函数的语法格式:@symsx。说明:获取x的参数,如果istree(x)为真,则必须定义。该函数将在TySymbolicMath未来版本中被废弃。注意:当同时加载TySymbolicMath和SymPy函数库时,调用@syms函数会出现提示,需要确定路径,如TySymbolicMath.@syms或SymPy.@syms。2.@variables函数因为易操作,所以@variables和@syms函数的使用率比Sym函数高。例2.21借助@syms函数和@variables函数创建符号数、符号变量、符号方程等符号对象。(使用Sym函数定义符号,需要加载SymPy函数库)符号数与数值数是不同的,符号数是严格准确的,数值数通常都是近似的。5.符号表达式的生成-创建符号对象借助Sym函数可以直接创建符号表达式和符号方程,借助已经定义的符号变量也可以创建符号表达式和符号方程。从操作上看,借助Sym函数直接创建符号表达式和符号方程很简单。这两种方法的不同之处是,借助Sym函数直接创建的符号表达式和符号方程不能与其中所包含的符号变量进行运算,而借助已经定义的符号变量创建的符号表达式和符号方程可以与其中所包含的符号变量进行运算。julia>clear()#清除工作空间中的变量.julia>clc()#清除命令行窗口.#加载TySymbolicMath函数库.julia>usingTySymbolicMath#加载SymPy函数库.julia>usingSymPy#在定义符号表达式fxyz之前,先定义符号变量a、b、c、x、y、z.julia>@variablesabcxyz6-elementVector{Num}:abcxyz#定义符号表达式fxyz.julia>fxyz=a*x^2+b*y*z^3-c*z-c*z+a*(x^2)+b*y*(z^3)#计算符号表达式fxyz和表达式a*(x^2)的差.julia>fxyz-a*x^2-c*z+b*y*(z^3)clear()#清除工作空间中的变量.#定义符号表达式fxyzw.julia>fxyzw=Sym("a*x^2+b*y*z^3-c*z")a*x^2+b*y*z^3-c*z#计算符号表达式fxyzw和表达式a*(x^2)的差.fxyzw-a*x^2ERROR:MethodError:nomethodmatching^(::Nothing,::Int64)符号数与数值数是有一定区别的。5.符号表达式的生成-创建符号对象矩阵是Syslab操作的元素,在讨论符号对象时,首先要创建符号矩阵,然后通过操作矩阵命令完成一些基本运算操作。#首先创建一个符号矩阵,然后对该符号矩阵进行运算操作.#########julia>clc()#清除命令行窗口.julia>clear()#清除工作空间中的变量.#加载TySymbolicMath函数库.julia>usingTySymbolicMath#加载SymPy函数库.julia>usingSymPy#创建一个符号矩阵A.julia>@variablesx1-elementVector{Num}:xjulia>A=[sin(x)cos(x);acos(x)asin(x)]2×2Matrix{Num}:sin(x)cos(x)acos(x)asin(x)#通过transpose、det、inv函数对符号矩阵A进行运算操作.julia>AT=transpose(A)2×2transpose(::Matrix{Num})witheltypeNum:sin(x)acos(x)cos(x)asin(x)julia>Adet=det(A)sin(x)*asin(x)-cos(x)*acos(x)julia>Ainv=inv(A)2×2Matrix{Num}:asin(x)/(sin(x)*asin(x)-cos(x)*acos(x)),(-cos(x))/(sin(x)*asin(x)-cos(x)*acos(x));(-acos(x))/(sin(x)*asin(x)-cos(x)*acos(x)),sin(x)/(sin(x)*asin(x)-cos(x)*acos(x))示例:首先创建一个符号矩阵,然后对该符号矩阵进行运算操作。5.符号表达式的生成-操作符号对象符号对象四则运算:符号对象,尤其是符号多项式,能够进行四则运算,下面给出一些示例。#创建两个符号多项式,并对其进行四则运算.#########julia>clc()#清除命令行窗口.julia>clear()#清除工作空间中的变量.#加载TySymbolicMath函数库.julia>usingTySymbolicMath#加载SymPy函数库.julia>usingSymPy#定义符号变量a、b、c、x、y、zjulia>@variablesabcxyz6-elementVector{Num}:abcxyz#定义两个函数f1和g.julia>f1=a*x^2*y^3+5*b*x*y*z-2*c*z-2c*z+5b*x*y*z+a*(x^2)*(y^3)julia>g=b*x*y*z-3*a*c*z-3a*c*z+b*x*y*z#操作两个函数f1和g.julia>Sumfg=f1+g-2c*z-3a*c*z+6b*x*y*z+a*(x^2)*(y^3)julia>Subfg=f1-g-2c*z+3a*c*z+4b*x*y*z+a*(x^2)*(y^3)julia>Timesfg=f1*g(-2c*z+5b*x*y*z+a*(x^2)*(y^3))*(-3a*c*z+b*x*y*z)julia>Divfg=f1/g(-2c*z+5b*x*y*z+a*(x^2)*(y^3))/(-3a*c*z+b*x*y*z)julia>P2f=f1^2(-2c*z+5b*x*y*z+a*(x^2)*(y^3))^25.符号表达式的生成-操作符号对象符号对象四则运算:符号对象,尤其是符号多项式,能够进行四则运算,下面给出一些示例。#创建两个符号多项式,并对其进行四则运算.#########julia>clc()#清除命令行窗口.julia>clear()#清除工作空间中的变量.#加载TySymbolicMath函数库.julia>usingTySymbolicMath#加载SymPy函数库.julia>usingSymPy#定义符号变量a、b、c、x、y、zjulia>@variablesabcxyz6-elementVector{Num}:abcxyz#定义两个函数f1和g.julia>f1=a*x^2*y^3+5*b*x*y*z-2*c*z-2c*z+5b*x*y*z+a*(x^2)*(y^3)julia>g=b*x*y*z-3*a*c*z-3a*c*z+b*x*y*z#操作两个函数f1和g.julia>Sumfg=f1+g-2c*z-3a*c*z+6b*x*y*z+a*(x^2)*(y^3)julia>Subfg=f1-g-2c*z+3a*c*z+4b*x*y*z+a*(x^2)*(y^3)julia>Timesfg=f1*g(-2c*z+5b*x*y*z+a*(x^2)*(y^3))*(-3a*c*z+b*x*y*z)julia>Divfg=f1/g(-2c*z+5b*x*y*z+a*(x^2)*(y^3))/(-3a*c*z+b*x*y*z)julia>P2f=f1^2(-2c*z+5b*x*y*z+a*(x^2)*(y^3))^25.符号表达式的生成-操作符号对象简化多项式函数:Syslab的函数库还提供了大量简化多项式函数,如表所示。函数描述TySymbolicMath.expand多项式展开。horner嵌套式层乘表达式。factor因式分解。TySymbolicMath.simplify简化不确定符号对象。numden提取有理多项式的分子和分母。substitute代换符号字符串。finverse求反函数。6.微积分微积分在科学与工程技术方面的应用具有非常重要的地位。在一些特殊情况下,微积分的求解非常困难。本节将对微积分函数进行较详细的应用分析,如微分、积分、求和、求极限及泰勒展开等。微积分函数如下页图表所示。6.微积分函数描述get_variables确定符号表达式中的符号变量(TySymbolicMath)。Differential微分和近似求导(TySymbolicMath)。D=Differential(x)(f)表示函数f对x求导。例如:Dx=Differential(x);
Dy=Differential(y);
Dz=Differential(z)。expand_derivatives展示已求导的表达式(TySymbolicMath)。语法:expand_derivatives(0,simplify)。int定积分和不定积分(TySymbolicMath)。语法:F=int(expr),默认积分变量为x;
F=int(expr,var);
F=int(expr,a,b);
F=int(expr,var,a,b)。vpaintegral数值积分(TySymbolicMath)。语法:vpaintegral(f,a,b),从a到b计算被积函数f的数值积分;
vpaintegral(f,x,a,b),变量x从a到b计算被积函数f的数值积分;
vpaintegral(_,key=Value),使用键值参数指定的额外选项完成数值积分。6.微积分函数描述limit求符号表达式的极限(TySymbolicMath)。语法:limit(f,var,a);
limit(f,a);
limit(f);
limit(f,var,a,“left”);
limit(f,var,a,“right”)。symsum级数求和(TySymbolicMath)。语法:F=symsum(f,k,a,b);
F=symsum(f,k)。symprod级数积(TySymbolicMath)。语法:F=symprod(f,k,a,b);
F=symprod(f,k)。sym_seriesPuiseux级数(TySymbolicMath)。语法:sym_series(f,var);
sym_series(f,var,a)。taylor泰勒展开(TySymbolicMath)。语法:taylor(expr,orders)。taylor_series泰勒展开(TySymbolicMath)。语法:T=taylor_series(f);
T=taylor_series(f,var);
T=taylor_series(f,var,a)。7.解符号方程-解代数方程代数方程在数学中具有重要地位,在科学与工程技术方面有较广泛的应用。本节将对解代数方程的常用函数solve进行介绍。#使用solve函数解代数方程的示例.#########julia>clc()#清除命令行窗口.julia>clear()#清除工作空间中的变量.#安装SymPy函数库.julia>usingPkgjulia>Pkg.add("SymPy")#加载SymPy函数库.julia>usingSymPy#定义符号变量a、b、c、x.julia>SymPy.@symsabcx(a,b,c,x)#定义一个符号表达式S.julia>S=a*x^2+b*x+c2a*x+b*x+c#解代数方程a*x^2+b*x+c=0.julia>Roots=solve(S,x)2-elementVector{Sym}:(-b-sqrt(-4*a*c+b^2))/(2*a)(-b+sqrt(-4*a*c+b^2))/(2*a)#将Roots表示为普通的数学形式.julia>forrootinRootsdisplay(root)end_____________/2-b-\/-4*a*c+b---------------------2*a_____________/2-b+\/-4*a*c+b---------------------2*a#将b作为变量,解代数方程a*x^2+b*x+c=0.julia>solve(S,b)1-elementVector{Sym}:-a*x-c/x示例:解代数方程,注意需要安装并加载SymPy函数库。7.解符号方程-解微分方程微分方程在现代科学与工程技术中扮演着比代数方程更重要的角色。在Syslab中加载SymPy函数库,其中dsolve函数用于解微分方程。#使用dsolve函数解微分方程的示例.julia>clc()#清除命令行窗口.julia>clear()#清除工作空间中的变量.#加载SymPy函数库.julia>usingSymPy#解无初始条件的一阶微分方程Dx=1+2*x+x^2.julia>SymPy.@symstx()Julia>Dt=SymPy.Differential(t)SymPy.Differential(t)julia>eqns=(Dt(x(t))~1+2*x(t)+x(t)^2)d2--(x(t))=x(t)+2*x(t)+1dtjulia>SymPy.dsolve(eqns)-C1+t+1x(t)=-----------C1-t#解初始条件为x(0)=9的一阶微分方程Dx=1+2*x+x^2.julia>Result1=SymPy.dsolve(eqns,ics=Dict(x(0)=>9))t+9/10x(t)=--------1/10-t#将x作为自变量,解初始条件为y(0)=0、Dy(0)=5的二阶微分方程D2y=tan(x)-y+x.julia>SymPy.@symsxy()(x,y)julia>Dx=SymPy.Differential(x)SymPy.Differential(x)julia>eqns=(Dx(Dx(y(x)))~tan(x)-y(x)+x)2d---(y(x))=x-y(x)+tan(x)2dxjulia>Y2=SymPy.dsolve(eqns,ics=Dict(y(0)=>0,diff(y(x),x)(0)=>5))/log(sin(x)-1)log(sin(x)+1)I*pi\y(x)=x+|------------------------------------|*cos(x)+5*sin(x)\222/示例:解微分方程。8.积分变换积分变换在信号处理及其他工程领域有着广泛的应用。Syslab的符号函数工具箱TySymbolicMath为积分变换提供了大量积分变换函数,可将在校学生及工程技术人员从烦琐的积分变换计算工作中解脱出来。常见的积分变换函数有fourier、ifourier、laplace、ilaplace、ztrans和iztrans,分别表示Fourier变换、Fourier逆变换、Laplace变换、Laplace逆变换、Z变换和Z逆变换,如表2.19所示。8.积分变换9.实际应用-解多项式在代数中,多项式为伴随矩阵为f(x)称为矩阵A的特征多项式,方程f(x)=0的根就是矩阵A的特征值。因此,可以通过借助Julia求解矩阵的特征值来求解多项式的根。9.实际应用-解多项式示例:解方程julia>clc()#清除命令行窗口.julia>clear()#清除工作空间中的变量.julia>usingSymPy#加载SymPy函数库.#定义一个多项式,将其表示成矢量形式,记为P.julia>P=[5.0,0.0,0.0,0.0,-6.0,3.0,-21.0,0.0,15.0]9-elementVector{Float64}:5.00.00.00.0-6.03.0-21.00.015.0#计算P的伴随矩阵,记为A.julia>A=compan(P)#计算矩阵A的特征值.julia>x=eigen(A).values8-elementVector{ComplexF64}:-1.3239907069744212+0.0im-0.7625867416439723+0.0im-0.5272319941266691-1.219437587487205im-0.5272319941266691+1.219437587487205im0.539953683191315-1.159991111707528im0.539953683191315+1.159991111707528im0.8467995900351574+0.0im1.2143344804539409+0.0im注意:Syslab的TySymbolicMath函数库也提供了解多项式的函数find_roots。9.实际应用-解线性方程组示例:解方程#定义线性方程组的系数矩阵,记为A.julia>A=[56-12;65-2;4-92]3×3Matrix{Int64}:56-1265-24-92#定义等式列矢量,记为B.julia>B=[1,129,17]3-elementVector{Int64}:112917#计算矩阵A的逆矩阵,记为invA.julia>invA=inv(A)3×3Matrix{Float64}:-0.0109890.1318680.0659341-0.02747250.0796703-0.0851648-0.1016480.0947802-0.0151099#解线性方程组.julia>X1=invA*B3-elementVector{Float64}:18.1208791208791178.80219780219780311.868131868131865#通过左除求解结果.julia>X2=A\B3-elementVector{Float64}:18.1208791208791178.80219780219780311.868131868131865#通过右除求解结果.julia>AT=A'3×3adjoint(::Matrix{Int64})witheltypeInt64:56465-9-12-22julia>BT=B'1×3adjoint(::Vector{Int64})witheltypeInt64:112917julia>X3=(BT/AT)'3-elementVector{Float64}:18.1208791208791178.80219780219780311.868131868131865基于线性代数知识可知,可以借助矩阵求逆来解线性方程组
,其解为
。。当然也可以通过solve函数解线性方程组(需要加载SymPy函数库)。9.实际应用-求平行六面体体积示例:求三条边分别为a=(12,0,0)、b=(2,15,0)、c=(2,5,30)的平行六面体体积。julia>clc()#清除命令行窗口.julia>clear()#清除工作空间中的变量.julia>usingSymPy#加载SymPy函数库.#定义三个矢量,记为a、b、c.julia>a=[12,0,0]3-elementVector{Int64}:1200julia>b=[2,15,0]3-elementVector{Int64}:2150julia>c=[2,5,30]3-elementVector{Int64}:2530#计算以a、b、c为三条基础边的平行六面体体积.julia>V=dot(c,cross(a,b))5400在立体几何中,求平行六面体体积的公式为
,其中a、b、c分别为平行六面体的三条边。9.实际应用-特征值和特征向量
许多问题都是特征值问题,如
式中,A为n×n的矩阵;v为n×1的向量;λ为标量。当λ取值为矩阵A的特征值时,方程有解。v的解是对应特征值的特征向量。特征值问题可以表述为
如果v有非零解,那么必有
这个方程为矩阵A的特征方程。关于λ的n阶多项式的解为矩阵A的特征值。本节将介绍有不同根的情况,对于有相同根的情况不予介绍。有相同根的情况,在量子力学中被称为简并态。
9.实际应用-特征值和特征向量
示例:现有系数矩阵A为,相应的特征方程为由此可求得特征值为,对于第一个解,有,由此可得k1为任意常数。同理可求出另一个解为将上面的问题分析过程转化为Syslab可执行语句如下。式中,julia>clc()#清除命令行窗口.julia>clear()#清除工作空间中的变量.julia>usingSymPy#加载SymPy函数库.#定义一个矩阵A.julia>A=[01;-2-3];#计算矩阵A的特征值和特征向量.julia>eigen_result
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 书采购规章制度
- 杭州市政府采购管理制度
- 采购部文档管理制度范本
- 采购投诉处理制度
- 员工手册采购部管理制度
- 新药采购管理制度
- 聚乙烯原料采购制度
- 普通医疗耗材采购制度
- 财务部办公用品采购制度
- 采购换岗制度
- 【课件】美术的曙光-史前与早期文明的美术+课件-2024-2025学年高中美术人教版(2019)必修美术鉴赏
- 4农业现代化背景下2025年智慧农业大数据平台建设成本分析
- 口腔癌前病变
- 2025年高考数学全国一卷试题真题及答案详解(精校打印)
- GB/T 42230-2022钢板卷道路运输捆绑固定要求
- 2025年上海高考数学二轮复习:热点题型6 数列(九大题型)原卷版+解析
- 2024年河北省高考政治试卷(真题+答案)
- 浙江金峨生态建设有限公司介绍企业发展分析报告
- 中学语文课程标准与教材研究 第2版 课件全套 第1-6章 语文课程-语文课程资源
- 《生物信息学课件》课件
- T-CCTAS 34-2022 带肋钢筋轴向冷挤压连接技术规程
评论
0/150
提交评论