MWORKS从入门到精通

作者: 姜炫利冯新宇宋雪莹
译者:
编辑: 胡俊英

图书目录:

详情

本书共14章,内容主要包括Julia介绍及MWORKS简介、Syslab入门、Julia的基础语法、Julia进阶、科学计算数据可视化、数字信号处理、控制系统、图像处理等多方面的应用实例,每章正文之前有内容提要和本章重点,每章正文之后配有习题,以满足教师教学和学生自学的需要。本书可作为高等院校工业自动化、控制工程、电子信息、机械电子、电气工程、航空航天、仪器仪表、计算机等专业本科生和研究生的教学用书,也可作为相关专业科研人员、工程技术人员的参考书。

图书摘要

版权信息

书名:MWORKS从入门到精通

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。


版  权

编  著  姜炫利   冯新宇 宋雪莹

责任编辑 胡俊英

人民邮电出版社出版发行  北京市丰台区成寿寺路11号

邮编 100164  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

读者服务热线:(010)81055410

反盗版热线:(010)81055315

内 容 提 要

本书面向高等学校理工科专业学生和行业工程技术人员编写,介绍MWORKS程序设计的基本操作。本书首先从宏观上介绍编写Julia程序所需的预备知识和编程环境;然后详细说明Julia中的基础概念,包括基本数据类型、数值运算与基础函数、流程控制、数据可视化与科学计算等内容,重点阐述如何利用流程控制语句、函数、模块合理地组织Julia代码,同时演示MWORKS.Syslab环境下初等数学、数学建模、通信系统、控制系统、数字图像处理等应用实例;最后通过Modelica引入“双摆运动系统”“房屋温度控制系统”“四旋翼无人机轨迹跟踪系统”3个应用案例,使读者了解MWORKS.Sysplorer系统建模与协同仿真的基本方法,带领读者推开MWORKS编程的进阶之门。本书在讲解操作指令时给出了语法介绍、实例分析以及相应的MWORKS仿真程序设计,可满足教师教学和学生自学的需要。

本书各部分内容既相互联系又相互独立,读者可以根据自己的需要选择学习。本书可作为高等学校工业自动化、控制工程、电子信息、机械电子、电气工程、航空航天、仪器仪表、计算机等专业本科阶段和硕士研究生阶段的教学用书,也可作为相关专业科研人员、工程技术人员的参考书。

推 荐 序

本书是一本专为高等学校理工科师生与行业工程技术人员打造的MWORKS学习指南,全书以Julia基础为起点,结合MWORKS.Syslab环境下初等数学、通信系统、控制系统、数字图像处理等应用实例,系统讲解基本数据类型、程序设计等核心内容,演示代码组织与设计方法,还通过Modelica呈现“双摆运动系统”“四旋翼无人机轨迹跟踪系统”等工程案例,介绍MWORKS.Sysplorer系统建模与仿真流程,助力读者实现从掌握基础知识到能解决复杂工程问题的能力跃升,轻松推开MWORKS建模与仿真的专业之门。

——苏州同元软控信息技术有限公司生态运营部部长 鲍丙瑞

前  言

科学计算语言与系统建模已成为高等学校许多专业需掌握的基础知识,且越来越重要。学生在学习和应用科学计算语言与对系统进行建模时常觉得比较吃力。本书的一个重要特征就是具有一系列新奇且充满挑战性的、循序渐进的实际工程问题,在带领学生寻找问题答案的过程中可以潜移默化地培养学生的创造力,使学生充分体会到发现的乐趣。本书从工程实例出发,引入重要的概念和方法,各章的基础知识叙述清晰,实例丰富且有代表性,便于学生全面、科学、准确地掌握MWORKS的主要内容。本书采用“数学模型统一描述,工程研究方法分开”的架构,突出科学计算与系统建模的工程背景,强调理论与实际的有机结合,能使学生取得较好的学习效果。

MWORKS.Syslab是面向科学计算和数据分析的计算环境,基于高性能动态科学计算语言Julia提供交互式编程环境,实现科学计算编程、编译、调试和绘图功能,内置数学运算、符号计算、信号处理和通信等多种应用工具箱,支持用户开展科学计算、数据分析、算法设计,并进一步支持信息物理系统的设计、建模与仿真分析。MWORKS.Sysplorer是基于多领域物理统一建模语言Modelica的面向多领域工业产品的系统建模与仿真验证环境,支持多领域耦合复杂系统建模和仿真。全书共12章,主要内容如下。

第 1 章介绍科学计算环境MWORKS.Syslab,先概述MWORKS(包括MWORKS平台体系和系列工具箱),再阐述科学计算语言Julia的特点及它与其他语言的差异,接着讲解Syslab的安装、界面认识及快速入门操作(如界面基础知识、矩阵和数组的处理等),最后给出同步练习以巩固所学内容。

第2章围绕MWORKS.Sysplorer的系统建模仿真展开,先介绍其功能与应用场景,再说明安装方法及界面的使用,之后介绍基础模型库、机械模型库、电气模型库、流体模型库,随后讲解模块的参数设置与操作、连线处理及仿真设置,最后通过综合实例和同步练习强化应用能力。

第3章讲解Julia语法基础,依次介绍基础命令与快捷键、基本数据类型、矩阵与数组的构造及操作、元组与字典的概念及综合应用,并通过同步练习帮助读者掌握这些语法要点。

第4章聚焦Syslab的数值运算与基础函数,内容涵盖数学运算符的种类、优先级,算术运算符及相关函数,以及其他运算符及相关函数,并通过同步练习加深读者对数值运算的理解。

第5章阐述Syslab的程序设计,从复合表达式、条件表达式(if语句、三元表达式)、短路求值到循环表达式(for循环语句、while循环语句等)、异常处理(throw()函数、try/catch语句、finally关键字),最后配以同步练习,帮助读者全面掌握程序设计要点。

第6章讲解科学计算数据可视化,包括线图、数据分布图、离散数据图、极坐标图、等高线图、曲面图、网格图、向量场等图表的绘制,以及标签与注释、坐标区外观设置等,还通过贪吃蛇小游戏展示数据可视化应用,同步练习则有助于巩固绘图技能。

第7章以Syslab的科学计算实例为主线,依次讲解三角函数、幂函数、对数函数、复数函数、多项式的相关函数、方程组求解、插值与拟合,并提供综合应用实例及同步练习,助力读者提升科学计算实践能力。

第8章探讨Syslab的数学建模,先介绍数学建模的基本概念方法与一般步骤,再结合汉诺塔、最优打包方案、动态规划及多人博弈连续胜出等具体问题进行建模实践,帮助读者掌握数学建模方法。

第9章讲解数字图像处理及可视化分析,涵盖图像处理工具箱、数字图像处理的基本操作、图像的显示与几何变换、图像滤波与图像分割,并设置同步练习,帮助读者熟悉图像处理流程与技巧。

第10章聚焦信号处理及滤波器设计,依次介绍信号处理工具箱、信号分析与可视化、信号生成与预处理、数字滤波器设计等内容,同步练习可加强读者对信号处理知识的运用能力。

第 11 章讲解控制系统基础及PID控制器设计,先介绍MWORKS中控制系统常用工具箱,再阐述动态系统的基本模型,最后详细说明PID控制器的设计与应用,并安排同步练习,让读者学以致用。

第12章介绍MWORKS综合应用案例,包括双摆运动系统、房屋温度控制系统、四旋翼无人机轨迹跟踪系统等,综合运用前面所学知识进行建模、仿真与控制,并通过同步练习进一步提升读者的综合应用能力。

本书注重教学研究,强调工程背景,理论紧密结合实际,从基本概念、基本分析方法入手,结合实例,以MWORKS为主线,科学计算语言与系统建模并进,图文并茂,利用直观的物理概念讲解以及一系列MWORKS仿真结果使读者充分理解系统参数与性能指标之间的内在联系,由浅入深地引导读者全面理解和掌握科学计算语言与系统建模的分析与设计方法。

本书由冯新宇、姜炫利、宋雪莹编著。第1章与第2章由宋雪莹执笔,第3章与第12章由冯新宇执笔,第4章至第11章由姜炫利执笔。在此,谨向对编者的编写工作给予积极支持和大力帮助的人们表示诚挚的感谢!由于编者水平有限,书中难免有不足之处,殷切希望广大师生、专家学者、控制工程师提出批评和宝贵的意见。

编者

2025年4月

第1章 科学计算环境MWORKS.Syslab

MWORKS是由苏州同元软控信息技术有限公司自主研发的高性能科学计算与系统建模仿真环境,面向工程研发与科学研究领域,提供从算法开发、多学科系统建模、动态仿真到数据分析的全流程工具链。其核心目标是帮助高校学生、科研人员和工程师高效解决复杂系统的设计、优化与验证问题,同时满足国产化替代与信息安全需求。

MWORKS.Syslab是新一代科学计算环境,基于新一代高性能科学计算语言Julia,为业内提供较为高效的数值计算能力,同时兼容Python和M语言,支持与Python、C/C++、Fortran、M、R等编程语言的相互调用。凭借其丰富的专业工具箱,该环境可用于数学计算、图形图像处理、全局优化与数理统计、通信与信号处理、控制系统设计等研究领域,实现对MATLAB/Simulink从基础平台到工具箱的整体功能覆盖与创新发展。

1.1 MWORKS概述

在新一轮科技革命的背景下,系统建模仿真、基于模型的系统工程(Model-Based Systems Engineering,MBSE)、信息物理系统(Cyber-Physical Systems,CPS)、数字孪生、数字化工程等新型技术不断涌现,以美国和我国装备数字化工程的发布为标志,装备研制从信息化时代步入数字化时代,并呈现数字化与智能化相融合的特点。现代装备都是信息物理系统,由信号、通信、控制、计算等信息域与机械、流体、电气、热等物理域组成,信息物理系统设计建模与仿真计算是装备数字化的核心。MWORKS正是面向数字化与智能化融合推出的新一代、自主可控的科学计算与系统建模仿真平台。作为新一代装备数智化平台底座,它全面支持信息物理系统的设计、建模、仿真、计算、验证及运维。

1.1.1 MWORKS平台体系

科学计算与系统建模仿真平台MWORKS主要由四大系统级产品、系列工具箱和模型库,以及工业知识模型互联平台MoHub组成,如图1-1所示。

1.系统架构设计环境Sysbuilder(全称为MWORKS.Sysbuilder)

Sysbuilder是面向复杂工程系统的系统架构设计软件,以用户需求为导向,按照自顶向下的系统研制流程,以图形化、结构化、面向对象方式覆盖系统的需求导入、架构建模、逻辑仿真、分析评估,通过与Sysplorer的紧密集成,支持用户在系统设计的早期开展方案论证并实现基于模型的多领域系统综合分析和验证。

图1-1

2.科学计算环境Syslab(全称为MWORKS.Syslab)

Syslab是面向科学计算和数据分析的计算环境,基于高性能动态科学计算语言Julia提供交互式编程环境,具有科学计算编程、编译、调试和绘图功能,内置数学运算、符号计算、信号处理和通信等多种应用工具箱,支持用户开展科学计算、数据分析、算法设计,并进一步支持信息物理系统的设计、建模与仿真分析。

3.系统建模仿真环境Sysplorer(全称为MWORKS.Sysplorer)

Sysplorer是大回路闭环及数字孪生的支撑平台,是面向多领域工业产品的系统级综合设计与仿真验证平台,完全支持多领域统一系统建模语言Modelica,遵循现实中拓扑结构的层次化建模方式,可支撑MBSE应用,提供方便易用的系统仿真建模、完备的编译分析、强大的仿真求解、丰富的扩展接口,支持用户开展产品多领域模型开发、虚拟集成、多层级方案仿真验证、方案分析优化,并进一步为产品数字孪生模型的构建与应用提供关键支撑。

4.协同设计仿真环境Syslink(全称为MWORKS.Syslink)

Syslink是面向协同设计与模型管理的基础平台,是基于模型的系统工程环境中的模型、数据及相关工作协同管理解决方案,将传统面向文件的协同转变为面向模型的协同,为工程师屏蔽了通用版本管理工具的复杂配置和操作,提供多人协同建模、模型技术状态管理、云端建模仿真和安全保密管理功能,为系统研制提供基于模型的协同环境。Syslink打破了单位与地域障碍,支持团队用户开展协同建模和产品模型的技术状态控制,以及跨层级的协同仿真,为各行业的数字化转型全面赋能。

1.1.2 MWORKS系列工具箱

Toolbox是基于MWORKS开放API体系开发的系列工具箱,提供AI与数据科学、信号与通信、控制系统、设计优化、半物理仿真、模型集成与联合仿真、机械多体、接口工具等多个类别的工具箱,可满足多样化的数字设计、分析、仿真及优化需求。Toolbox包括3种形态:函数库、模型库和应用程序。

1.函数库(Functions)

函数库提供基础数学和绘图等方面的基础功能函数,内置曲线拟合、符号数学、优化与全局优化等高质优选函数库,支持用户自行扩展;支持教学、科研、通信、芯片、控制等行业用户开展教学科研、数据分析、算法设计和产品分析。

2.模型库(Models)

模型库涉及传动、液压、电机、热流等多个典型专业,覆盖航空航天、车辆、能源、船舶等多个重点行业,支持用户自行扩展;提供的基础模型可大幅降低复杂产品模型开发门槛与模型开发人员的学习成本。

3.应用程序(App)

应用程序提供基于函数库和模型库构建的线性系统分析、控制系统设计、系统辨识、滤波器设计、模型线性化、频率响应估算、模型试验、敏感度分析、参数估计响应优化与置信度评估、实时代码生成、嵌入式代码生成、定点设计等交互式应用程序,支持用户自行扩展;图形化的设计有且于快速实现特定功能,而无须从零开始编写代码。

1.2 科学计算语言概述

科学计算语言是利用计算机完成科学计算的程序开发语言。研究者通常通过求解数学模型获得研究问题的解,对于一些复杂的数学问题(尤其是涉及微分方程的解析与求解),手动推导可能面临极大的困难,甚至在理论上被证明是不可行的,此时就可以利用科学计算语言来完成。目前,科学计算语言可以分为商用科学计算语言和开发式科学计算语言。以MATLAB为代表的商用科学计算语言具有强大的科学运算功能,但是它们并不是免费的,在许多研究中,开放式科学计算语言更受研究者关注。

开放式科学计算语言主要包括Octave、Python、Scilab、Julia这4种。其中,Julia是面向科学计算的高性能动态高级程序设计语言。Julia不需要解释器,其运算速度快,可用于客户端和服务器的应用程序开发、底层系统程序设计,还可用作规约语言。Julia的核心语言非常小,可以方便地调用其他成熟的高性能基础程序代码,这使得其性能可以与静态编译型语言媲美。同时,Julia也是一门便于编程实现并行计算和分布式计算的程序语言。

1.2.1 Julia简介

Julia是出自麻省理工学院的一种免费开源的科学计算语言,是面向前沿领域科学计算和数据分析的计算机语言,正如其创始人所说:

“我们想要一门采用自由许可证的开源语言,想要C语言的性能和Ruby的动态特性;想要一门具有同像性的语言,它既有LISP那样真正的宏,又有像MATLAB那样明显且让人熟悉的数学运算符。这门语言可以像Python一样用于常规编程,像R语言一样容易应用到统计领域,像Perl一样自然地处理字符串,像MATLAB一样具有强大的线性代数运算能力,像Shell一样具有胶水语言的特性;既要简单易学,又要吸引高级用户。我们希望它是交互式的,又是可编译的。”

Julia拥有可选类型标注和多重派发这两个特性,并且运行起来像C语言,阅读起来像Python。这些都得归功于使用系统语言编译器实现的类型推导和即时编译技术。Julia是一门支持过程式、函数式和面向对象的多范式语言。它像R语言、MATLAB和Python一样简单,在高级数值计算方面有很好的表现,并且支持通用编程。Julia以数学编程语言为基础,同时参考了不少流行的动态语言,例如LISP、Perl、Python、Lua和Ruby。Julia与传统动态语言的主要区别如下。

(1)核心语言很小:标准库是用Julia自身编写的,包括整数运算这样的基础运算。

(2)丰富的基础类型:既可用于定义和描述对象,又可用于做可选的类型标注。

(3)通过多重派发,可以根据不同的类型调用同名函数的不同实现。

(4)针对不同的参数类型,自动生成高效、专用的代码。

(5)接近C语言的性能。

1.2.2 Julia的优势

Julia以“一个语言解决两种语言问题”(即开发效率与运行效率兼顾)为核心目标,成为科学计算领域的新兴标杆。其高性能、现代化语法和活跃的社区生态,使其在机器学习、数值模拟和大数据处理方面逐渐取代Python、MATLAB等传统工具。Julia在语言设计方面具有先进性,兼具建模语言的表现力和开发语言的高性能,是最适合构建信息物理系统的语言。与其他语言相比,Julia的优势主要表现在以下几个方面。

(1)采用MIT许可证:免费且开源。

(2)用户自定义类型的性能与兼容性和内置类型一样好。

(3)无须特意编写向量化的代码:非向量化的实现已具备较高的计算效率。

(4)轻量级的“绿色”线程:协程。

(5)简洁的类型系统,可扩展的类型转换和类型提升。

(6)对Unicode的有效支持,包括但不限于UTF-8。

(7)直接调用C语言函数,无须封装或调用特别的API。

(8)像Shell一样强大的管理其他进程的能力。

(9)像LISP一样的宏和其他元编程工具。

(10)语法简洁,易学易用。

1.2.3 Julia与其他科学计算语言的差异

Julia作为一门专为科学计算设计的现代语言,在性能、设计理念和生态系统上与传统科学计算语言(如MATLAB、Python、R语言等)存在显著差异。接下来从多个维度对比它们的核心差异。

1.语言本质差异

(1)Julia与MATLAB的本质差异。

① 开源性质。Julia是一种完全开源的语言,任何人都可以查看和修改它的源代码。MATLAB则是一款商用软件,需要购买才能使用。

② 多重派发特性。Julia的一个重要特性是多重派发,它可以根据不同的参数类型选择不同的函数实现,这使得Julia可以方便地处理复杂的数学和科学计算问题。而MATLAB为函数式编程语言,不支持多重派发。

③ 并行计算。Julia对并行计算提供了更好的支持,可以方便地实现多线程和分布式计算。MATLAB也支持并行计算,但是需要用户手动编写代码。

④ 动态编译性质。Julia是一种动态编译语言,即在运行时会将代码编译成机器码,从而实现高效的执行。MATLAB是一种解释型语言,它会逐行解释代码并执行,因此在处理数据时可能会比Julia慢一些。

(2)Julia与R语言的本质差异。

① 设计理念。Julia旨在提供高性能、高效率的科学计算能力,强调代码的可读性和可维护性。R语言则是一种专门为统计计算而设计的语言,具有很多专门的统计计算函数和库,同时支持面向对象和函数式编程。

② 代码复杂度。Julia相对来说更加简洁,代码复杂度较低,这是为了提高代码的可读性和可维护性。相比之下,R语言的代码复杂度较高,这是为了方便数据分析人员快速完成统计计算任务。

③ 库和生态系统。R语言具有非常丰富的统计计算函数和库,以及庞大的生态系统,非常适合数据分析和统计计算。Julia的库比较少,生态系统较小,但在数值计算和科学计算方面有非常强大的库和工具支持。

④ 性能。Julia具有非常优越的性能,在数值计算和科学计算方面速度比R语言快。这主要是因为Julia采用了即时编译技术,能够动态生成高效的机器码,而R语言是解释执行的。

(3)Julia与Python的本质差异。

① 设计目的。Julia是一种专注于高性能科学计算和数据科学的编程语言,它的设计目的是提高数值计算和科学计算的效率。Python则是一种通用编程语言,适用于各种领域。

② 类型系统。Julia是一种动态类型语言,但是它具有静态类型语言的优点,能使用类型推断来提高程序的性能。Python也是一种动态类型语言,但类型推断对Python不重要。

③ 性能。Julia的执行速度通常比Python快,这是因为Julia采用了即时编译技术,可以在运行时优化代码。Python使用解释器,因此它比编译语言执行得慢。

④ 生态系统。Python有一个庞大的生态系统,适用于各种应用。Julia的生态系统相对较小,但是正在快速增长,当前已有一些出色的科学计算库和工具。

2.语法表层的差异

表1-1给出了部分语法表层的差异作为参考,具体使用时还需读者深入学习并适应。

表1-1

语言

比较项

变量作用域

延续代码行方法

字符串构造符号

数组索引

虚数单位表示

索引整行

幂表示符号

注释符号

Julia

全局/局部作用域

不完整的表达式自动延续

双引号/三引号

使用方括号A[i,j]

im

x[2:end]

^

#

MATLAB

全局作用域

符号“...”续行

单引号

使用圆括号A(i,j)

i或j

x(2:)

^

%

R语言

全局/局部作用域

符号“+”续行

单引号/双引号

使用方括号A[i,j]

i

x[2,]

^

#

Python

全局/局部作用域

符号“\”续行

单引号/双引号

使用方括号A[i,j]

j

x[2:]

^

#

3.函数用法差异

函数用法差异是指在定义和使用函数时,不同编程语言采用的语法、规则和约定的不同之处。这些差异既可能涉及函数参数传递方式、参数类型、返回值类型等方面的细节,也可能涉及函数命名、作用域、递归等方面的规定和约束。对用户来说,熟悉不同编程语言之间的函数用法差异有助于编写高效、正确的代码。要学习具体的函数用法及其差异,读者可以阅读后续章节并对比不同编程语言的帮助文档。

除此之外,Julia、MATLAB、R语言和Python还存在生态上的差异。

(1)Julia是一种专为数值和科学计算而设计的高性能语言。它的生态系统近年来迅速发展,使其逐渐成为科学计算和数据科学领域的主流语言之一,它的主要优势在于快速和易用。Julia具有动态类型、高效的编译器和多重派发特性,这使得它能够在计算密集型应用中表现出色。Julia的生态系统虽然较为“年轻”,但已经有了许多非常好的包和库,包括DataFrames.jl、Distributions.jl、Plots.jl和JuMPjl等。

(2)MATLAB是一种专为科学和工程计算而设计的语言。它的主要优势在于易用和功能丰富。MATLAB有很多内置的函数和工具箱,可用于数据可视化、图像处理、信号处理、人工智能和控制系统等方面。MATLAB的生态系统非常成熟,有大量的第三方工具箱可选择。除此之外,MATLAB还拥有庞大且活跃的社区。

(3)R语言是一种专为统计分析和数据可视化而设计的语言。它的主要优势在于具备统计分析和图形绘制功能。R语言的生态系统非常强大,有许多非常好的包和库,包括ggplot2、dplyr、tidyr、Shiny和caret等。

(4)Python是一种通用的高级编程语言,也被广泛用于科学计算。它的主要优势在于易用和生态系统丰富。Python的生态系统非常庞大,有大量的科学计算库和工具箱可选择,包括NumPy、SciPy、pandas、Matplotlib、scikit-learn和TensorFlow等。

综上所述,这4种语言都有各自的特点和优势,适用于不同的应用场景。

1.3 Syslab安装及界面认识

本节将以MWORKS.Syslab 2026a为例详细介绍Syslab的安装过程以及操作界面。

1.3.1 Syslab的下载与安装

Syslab安装包是ISO格式的光盘映像文件,MWORKS.Syslab 2026a安装包中的文件及文件夹如图1-2所示。其中,data文件夹包含安装包相关资源文件,包括Julia仓库等;Syslab-2026a-26.1.1- win-x64.exe为Syslab安装程序。

图1-2

双击Syslab-2026a-26.1.1-win-x64.exe,即可打开Syslab安装向导,如图1-3所示。勾选“同意MWORKS.Syslab 2026a的用户许可协议”复选框后,单击“立即安装”按钮,开始安装。

图1-3

若要设置安装功能和安装路径,单击“自定义设置”按钮,进入自定义设置界面,如图1-4所示。选择安装功能:图中勾选的是软件默认安装的功能,建议全部安装。单击“下一步”按钮,选择安装路径:默认路径为“C:\Program Files\MWORKS\Syslab”,如果想安装在其他目录,单击输入框右侧的“浏览”按钮,选择文件夹(注意,安装路径不能包含中文字符)。

图1-4

自定义设置完成以后,单击“立即安装”按钮,进入安装进度界面,如图1-5所示。

图1-5

安装完成后单击“安装完成”按钮结束安装,如图1-6所示。桌面会生成快捷方式MWORKS. Syslab 2026a(x64),同时Windows“开始”菜单中出现MWORKS.Syslab 2026a程序组,其中有MWORKS.Syslab 2026a(x64)和uninstall(x64)两个快捷方式,分别用于启动和卸载Syslab。

图1-6

1.3.2 Syslab界面认识

启动安装好的MWORKS.Syslab 2026a,其默认界面如图1-7所示。

图1-7

Syslab的默认界面有左侧边栏、工作区、命令行窗口、工具栏、状态栏、图形窗口等。其中,图形窗口在执行绘图命令后才会启动。界面顶部则有“主页”“绘图”“APP”“视图”“帮助”5个Tab界面标签,在对应的界面中可以进行有关文件、代码、变量、Sysplorer图像化编程环境、软件环境设置、资源等的操作。

1.工具栏

工具栏区域包含“主页”“绘图”“APP”“视图”“帮助”5个Tab界面,每个Tab界面都有对应的工具条,通常按功能分为若干命令组。例如,“主页”界面包含“文件”“变量”“运行”“调试”“编辑”“Sysplorer”“环境”“M语言兼容”命令组;“绘图”界面包含各种绘图指令;“视图”界面包含“外观”“编辑器布局”“代码折叠”“显示”“开发者工具”命令组,用户在该界面中可以修改界面布局。

2.左侧边栏

左侧边栏提供“资源管理器”“搜索”“调试”“包管理器”4种功能部件,单击按钮可以展开对应的功能面板。

(1)资源管理器。

资源管理器主要提供Syslab运行文件时的工作目录结构树管理功能,用户利用该功能可以完成文件(或文件夹)的新增、删除、打开、复制、修改、查找及重命名等操作,其默认位于左侧边栏其他功能部件的上方,如图1-8所示。需要说明的是,只有当前目录或搜索路径下的文件、函数可以被执行或调用。而且,用户在保存文件时,若不明确指定保存路径,系统会默认将它们保存在当前目录下。

图1-8

(2)调试。

Syslab的调试面板提供了代码调试器,支持用户以调试模式运行代码文件,可以进行单步调试、断点调试、添加监视、查找调用堆栈等操作。在调试模式下,编辑器窗口的上方会弹出调试工具栏。调试工具栏中的工具如下。

① 继续(F5键):启动调试或者继续运行调试。

② 单步跳过(F10键):单步执行遇到子函数时不会进入子函数,而是将子函数全部执行完再停止。

③ 单步调试(F11键):单步执行遇到子函数就进入并且继续单步执行。

④ 单步跳出(Shin+F11组合键):单步执行到子函数内时,执行完子函数余下部分,并返回到上一层函数。

⑤ 重启(Ctrl+Shif+F5组合键):重新启动调试。

⑥ 停止(Shif+F5组合键):停止调试。

调试工具栏如图1-9所示。此外,代码调试器还提供了交互式的调试控制台,可以对变量面板中的变量进行增加、删除、修改和查找等操作。具体步骤:①设置断点,启动调试;②当运行到断点时,在调试控制台中输入要执行的命令;③按Enter键执行,得到计算结果。例如,修改全局变量A的值,如图1-10所示。

图1-9

图1-10

(3)包管理器。

Syslab的包管理器提供包的创建、开发、安装、卸载、注册、版本切换、依赖设备等功能,并且支持对开发包和注册包进行分类管理。开发包是指未注册、未提交到服务器的本地Julia包,而注册包是指已注册、已提交到服务器并由服务器统一管理的Julia包。无论是开发包还是注册包,它们所对应的包管理器面板都由以下3部分组成。

① 过滤框:根据输入内容,对表格树显示内容进行过滤。

② 工具栏按钮:包括“新建包”“刷新面板”“添加包”“打开选项”等按钮。

③ 表格树展示区:主要用于对包及其函数的表格树进行展示。

初始包管理器面板为空面板,单击“刷新面板”按钮可将当前包环境下已安装的包添加到包管理器面板中,如图1-11所示。

图1-11

3.命令行窗口

在命令提示符“julia>”后输入合法命令并按Enter键,Syslab会自动执行命令,并给出执行结果,命令行窗口提供了输入命令及输出结果的场所。

4.编辑器窗口

Syslab的命令行窗口是逐行输入命令并执行的,这种方式称为行命令方式,只能用于编制简单的程序。常用的或较长的程序最好保存为文件后再执行,这时就要使用编辑器窗口。在“主页”界面中单击“新建”按钮可打开空白的文件,如图1-12所示。一般新建文件的默认名称为“Untitled-×”、扩展名为jl(代码文件)。.jl文件分为两种类型:主程序文件(Script File,也称为脚本文件)和子程序文件(Function File,也称为函数文件)。

函数文件与脚本文件的主要区别是:函数文件一般都有参数和返回结果,而脚本文件没有参数和返回结果;函数文件的变量是局部变量,在运行期间有效,运行完毕后被自动清除,而脚本文件的变量是全局变量,运行完毕后仍保存在内存中;函数文件要定义函数名,且文件名必须是“函数名.jl”;运行函数文件前还需声明该函数。

图1-12

5.图形窗口

通常,Syslab的默认界面中不显示图形窗口,只有在执行绘图命令后才会启动图形窗口,之后的绘图工作都在这个图形窗口中进行。

1.4 Syslab快速入门

本节通过讲解界面基础知识、矩阵和数组、数组索引、工作区变量、文本和字符、调用函数和调用文件、二维线图和三维线图、脚本和编程、帮助和文档等内容,帮助读者建立对Syslab的整体认识。

1.4.1 桌面基础知识

启动Syslab时,界面会以其默认布局显示,如图1-13所示。

Syslab默认界面主要由五大块构成,具体如下。

① 代表工具栏,提供平台快捷操作按钮。

② 代表脚本窗口,用于提供程序代码编写环境。

③ 代表左侧边栏,提供不同的功能部件,单击按钮可以展开相应的功能面板。

④ 代表命令行窗口,用于终端交互,可以在其中输入脚本命令并执行,执行结果也将在其中显示。

⑤ 代表工作区,提供全局变量的显示与管理功能。

⑥ 代表状态栏,用于提示状态信息。

图1-13

在Syslab中,可使用命令行窗口创建变量和调用函数。例如,在命令行窗口中输入以下语句来创建名为a的变量。

a = 1

通过Syslab执行语句,结果如下。

1

Syslab将变量a添加到工作区并在命令行窗口中显示结果。

接下来,创建名为b的变量。

b = 2

通过Syslab执行语句,结果如下。

2

计算a+b。

c = a + b

通过Syslab执行语句,结果如下。

3

计算cos(a)。

d = cos(a)

通过Syslab执行语句,结果如下。

0.5403023058681398

如果未指定输出变量,Syslab会使用变量ans(answer 的缩写)来存储计算结果。

如果语句以分号结束,Syslab会执行计算,但不在命令行窗口中显示输出。

e = a*b;

在空白命令行中按↑键或在输入语句的前几个字符之后按↑键,可以重新调用执行过的语句。例如,要重新调用语句b = 2,可以输入b,然后按↑键。

1.4.2 矩阵和数组

数组是Syslab中信息和数据的基本表示形式,Syslab能够针对整个数组进行操作。

1.通过数组创建矩阵和向量

(1)要创建一个包含4个元素的数组,请使用空格或逗号分隔各元素。

a = [1 2 3 4]

通过Syslab执行语句,结果如下。

1×4 Matrix{Int64}:
1  2  3  4

该数组是1×4的矩阵(Matrix)。

a = [1, 2, 3, 4]

通过Syslab执行语句,结果如下。

4-element Vector{Int64}:
 1
 2
 3
 4

该数组是向量(Vector)。

(2)要创建具有多行元素的矩阵,请用分号分隔各行元素。

a = [1 3 5; 2 4 6; 7 8 10]

通过Syslab执行语句,结果如下。

3×3 Matrix{Int64}:
 1  3   5
 2  4   6
 7  8  10

(3)还可以用代码行定义矩阵的每行元素,并用换行符分隔各行。

a = [1 3 5
     2 4 6
     7 8 10]

通过Syslab执行语句,结果如下。

3×3 Matrix{Int64}:
 1  3   5
 2  4   6
 7  8  10

(4)创建矩阵的另一种方法是使用ones()、zeros()或rand()等函数。例如,创建一个由0组成的5×1矩阵。

z = zeros(5,1)

通过Syslab执行语句,结果如下。

5×1 Matrix{Float64}:
 0.0
 0.0
 0.0
 0.0
 0.0

2.矩阵运算

接下来,我们针对矩阵展示一系列运算符的使用。每种运算的初始矩阵如下所示。

a=[1  3  5
   2  4  6
   7  8  10]

(1)Syslab允许用户使用单个算术运算符处理矩阵中的所有元素。

a .+ 10

通过Syslab执行语句,结果如下。

3×3 Matrix{Int64}:
 11  13  15
 12  14  16
 17  18  20

(2)Syslab允许用户使用函数处理矩阵中的所有元素。

sin.(a)

通过Syslab执行语句,结果如下。

3×3 Matrix{Float64}:
 0.841471   0.14112   -0.958924
 0.909297  -0.756802  -0.279415
 0.656987   0.989358  -0.544021

(3)要对矩阵做转置处理,请使用单引号。

a'

通过Syslab执行语句,结果如下。

3×3 adjoint(::Matrix{Int64}) with eltype Int64:
 1  2   7
 3  4   8
 5  6  10

(4)可以使用“*”运算符执行标准矩阵乘法,这将计算矩阵的内积。

例如,确认矩阵乘以其逆矩阵会返回单位矩阵。

p = a*inv(a)

通过Syslab执行语句,结果如下。

3×3 Matrix{Float64}:
  1.0          7.10543e-15  8.88178e-16
 -1.42109e-14  1.0          0.0
 -1.42109e-14  0.0          1.0

(5)要执行元素乘法而不是矩阵乘法,请使用“.*”运算符。

p = a.*a

通过Syslab执行语句,结果如下。

3×3 Matrix{Int64}:
  1   9   25
  4  16   36
 49  64  100

在矩阵运算中,乘法(*)、除法(/)和幂(^)运算符专门用于线性代数运算。若要执行按元素的运算,需使用对应的数组运算符,即点运算符(.),例如.*、./和.^。

3.串联

串联是连接数组以形成更大的数组的过程。实际上,结果数组是由输入数组的各个元素串联起来构成的。

(1)使用hcat()函数将数组水平串联。

A = hcat(a,a)

通过Syslab执行语句,结果如下。

3×6 Matrix{Int64}:
 1  3   5  1  3   5
 2  4   6  2  4   6
 7  8  10  7  8  10

(2)使用空格将数组水平串联。

A = [a a]

通过Syslab执行语句,结果如下。

3×6 Matrix{Int64}:
 1  3   5  1  3   5
 2  4   6  2  4   6
 7  8  10  7  8  10

水平串联要求每个数组具有相同的行数。同样,当数组具有相同的列数时,可以使用vcat()函数或者分号进行垂直串联。

(1)使用vcat()函数进行垂直串联。

A = vcat(a,a)

通过Syslab执行语句,结果如下。

6×3 Matrix{Int64}:
 1  3   5
 2  4   6
 7  8  10
 1  3   5
 2  4   6
 7  8  10

(2)使用分号进行垂直串联。

A = [a;a]

通过Syslab执行语句,结果如下。

6×3 Matrix{Int64}:
 1  3   5
 2  4   6
 7  8  10
 1  3   5
 2  4   6
 7  8  10

4.复数

复数既有实部又有虚部,其中虚数单位是−1的平方根。

sqrt(Complex(-1))

通过Syslab执行语句,结果如下。

0.0 + 1.0im

im用于表示复数的虚部。

c = [3+4im 4+3im; -im 10im]

通过Syslab执行语句,结果如下。

2×2 Matrix{Complex{Int64}}:
 3+4im  4+3im
 0-1im  0+10im

1.4.3 数组索引

Syslab中的每个变量都是一个可以容纳许多数字的数组。例如,假设有4×4矩阵A。

A = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16]

通过Syslab执行语句,结果如下。

4×4 Matrix{Int64}:
  1   2   3   4
  5   6   7   8
  9  10  11  12
 13  14  15  16

(1)引用数组中的特定元素有两种方法。最常用的方法是指定行索引和列索引。

A[4,2]

通过Syslab执行语句,结果如下。

14

另一种方法是使用单一索引按顺序向下遍历每一列。

A[8]

通过Syslab执行语句,结果如下。

14

使用单一索引引用数组中特定元素的方法称为线性索引。如果在赋值语句的右侧引用数组外部的元素,Syslab会抛出错误。

test = A[4,5]

通过Syslab执行语句,结果如下。

ERROR: BoundsError: attempt to access 4×4 Matrix{Int64} at index [4, 5]

(2)如果需要扩充数组,可以参考以下方式。

row = size(A, 1)
t = zeros(eltype(A), row, 1) #采用A的元素类型
A = hcat(A, t)
A[4,5] = 17

通过Syslab执行语句,结果如下。

4×5 Matrix{Int64}:
  1   2   3   4   0
  5   6   7   8   0
  9  10  11  12   0
 13  14  15  16  17

(3)要引用多个数组元素,请使用冒号运算符,可以指定一个形式为start:end的范围。

例如,列出A中前3行及第2列的元素。

A[1:3,2]

通过Syslab执行语句,结果如下。

3-element Vector{Int64}:
  2
  6
 10

(4)单独的冒号(没有起始值或结束值)可指定当前维度中的所有元素。例如,选择A中第3行所有列的元素。

A[3,:]

通过Syslab执行语句,结果如下。

5-element Vector{Int64}:
  9
 10
 11
 12
  0

(5)还可以使用更通用的形式start:step:end创建等距的值向量。

B = 0:10:100

通过Syslab执行语句,结果如下。

0:10:100

如果省略步长(如在start:end范围中),Syslab会使用默认步长1。

1.4.4 工作区变量

工作区包含在Syslab中创建、从数据文件或其他程序导入的变量。例如,下列语句在工作区中创建变量A和B。

using TyMath
A = magic(4);
rng = MT19937ar(5489);
B = rand(rng, 3, 5, 2);

使用varinfo()查看工作区的内容。

varinfo()

通过Syslab执行语句,结果如下。

  name                   size summary
  ––––––––––––––––– ––––––––– ––––––––––––––––––––––––––––––––––––––––––––––––
  A                 168 bytes 4×4 Matrix{Int64}
  B                 288 bytes 3×5×2 Array{Float64, 3}
  Base                        Module
  Core                        Module
  InteractiveUtils  1.003 MiB Module
  Main                        Module
  SyslabBuiltinFunc 3.254 KiB Module
  ans               288 bytes 3×5×2 Array{Float64, 3}
  init_syslabapp      0 bytes init_syslabapp (generic function with 2 methods)
 init_sysplorer       0 bytes init_sysplorer (generic function with 1 method) 
 rng                2.500 KiB MT19937ar

此外,界面中的Julia工作区也会显示变量,如图1-14所示。

图1-14

退出Syslab后,工作区变量不复存在。可以使用save()函数保存数据以供日后使用。

using TyBase
save("myfile.jld2";A,B)

保存操作会将工作区保存在当前工作文件夹中,将数据保存在一个扩展名为.jld2 的压缩文件(称为JLD2文件)中。要清除工作区中的所有变量,请使用clear()函数。使用load()函数可以将数据从JLD2文件恢复到工作区。

using TyBase
load("myfile.jld2")

1.4.5 文本和字符

1.字符串数组

当处理文本时,可以将字符序列用双引号引起来,赋给变量。

t = "Hello, world"

通过Syslab执行语句,结果如下。

"Hello, world"

如果文本包含双引号,请使用转义字符“\”。

q = "Something \"quoted\" and something else."

通过Syslab执行语句,结果如下。

"Something \"quoted\" and something else."

与所有Syslab变量一样,t和q是数组,它们的数据类型是 String。

要将文本添加到字符串末尾,请使用“*”运算符。

f = 71;
c = (f-32)/1.8;
tempText = "Temperature is " * string(c) * "C"

通过Syslab执行语句,结果如下。

"Temperature is 21.666666666666668C"

与数值数组类似,字符串数组可以有多个元素。

A = ["a" "bb" "ccc"; "dddd" "eeeeee" "fffffff"]

通过Syslab执行语句,结果如下。

2×3 Matrix{String}:
 "a"     "bb"      "ccc"
 "dddd"  "eeeeee"  "fffffff"

使用length()函数可获取数组中每个字符串的长度。

length.(A)

通过Syslab执行语句,结果如下。

2×3 Matrix{Int64}:
 1  2  3
 4  6  7

2.字符数组

在程序设计中,很多数据虽然看起来像普通文本,但它们本质上并不一定是用于表达语言内容的文字,例如DNA序列。DNA序列由A、T、C、G等碱基符号组成,这些符号通常需要被当作一个个独立的字符进行处理,而不是单纯作为一整段文本。因此,可以将这类数据存储在字符数组中,方便后续进行索引、拼接和逐字符分析。

首先,定义一个DNA序列:

seq = "GCTAGAATCC"

此时,seq 是一个字符串,通过Syslab运行程序,结果如下。

"GCTAGAATCC"

虽然它由多个字符组成,但整体仍然被看作一个字符串。如果希望将其中的每个碱基单独取出,可以使用collect函数将字符串转换为字符数组:

seq = collect(seq)

通过Syslab运行程序,结果如下。

10-element Vector{Char}:
 'G': ASCII/Unicode U+0047 (category Lu: Letter, uppercase)
 'C': ASCII/Unicode U+0043 (category Lu: Letter, uppercase)
 'T': ASCII/Unicode U+0054 (category Lu: Letter, uppercase)
 'A': ASCII/Unicode U+0041 (category Lu: Letter, uppercase)
 'G': ASCII/Unicode U+0047 (category Lu: Letter, uppercase)
 'A': ASCII/Unicode U+0041 (category Lu: Letter, uppercase)
 'A': ASCII/Unicode U+0041 (category Lu: Letter, uppercase)
 'T': ASCII/Unicode U+0054 (category Lu: Letter, uppercase)
 'C': ASCII/Unicode U+0043 (category Lu: Letter, uppercase)
 'C': ASCII/Unicode U+0043 (category Lu: Letter, uppercase)

转换后,程序会把字符串中的每一个字符都拆分出来,形成一个包含10个元素的字符向量。数组中的每个元素都是一个Char类型的字符,例如'G'、'C'、'T'、'A'等。这样处理后,就可以像访问普通数组一样访问其中的某一个字符。

seq[4]

通过Syslab运行程序,结果如下。

'A': ASCII/Unicode U+0041 (category Lu: Letter, uppercase)

这说明字符数组支持按下标访问元素。由于数组下标从1开始计算,所以seq[4]表示取出DNA序列中的第4个字符,即'A'。

除了访问单个字符之外,字符数组还可以像数值数组一样进行拼接。例如,使用vcat函数可以将两个字符数组纵向连接:

seq2 = vcat(seq, collect("ATTAGAAACC"))

通过Syslab运行程序,结果如下。

20-element Vector{Char}:
 'G': ASCII/Unicode U+0047 (category Lu: Letter, uppercase)
 'C': ASCII/Unicode U+0043 (category Lu: Letter, uppercase)
 'T': ASCII/Unicode U+0054 (category Lu: Letter, uppercase)
 'A': ASCII/Unicode U+0041 (category Lu: Letter, uppercase)
 'G': ASCII/Unicode U+0047 (category Lu: Letter, uppercase)
 'A': ASCII/Unicode U+0041 (category Lu: Letter, uppercase)
 'A': ASCII/Unicode U+0041 (category Lu: Letter, uppercase)
 'T': ASCII/Unicode U+0054 (category Lu: Letter, uppercase)
 'C': ASCII/Unicode U+0043 (category Lu: Letter, uppercase)
 'C': ASCII/Unicode U+0043 (category Lu: Letter, uppercase)
 'A': ASCII/Unicode U+0041 (category Lu: Letter, uppercase)
 'T': ASCII/Unicode U+0054 (category Lu: Letter, uppercase)
 'T': ASCII/Unicode U+0054 (category Lu: Letter, uppercase)
 'A': ASCII/Unicode U+0041 (category Lu: Letter, uppercase)
 'G': ASCII/Unicode U+0047 (category Lu: Letter, uppercase)
 'A': ASCII/Unicode U+0041 (category Lu: Letter, uppercase)
 'A': ASCII/Unicode U+0041 (category Lu: Letter, uppercase)
 'A': ASCII/Unicode U+0041 (category Lu: Letter, uppercase)
 'C': ASCII/Unicode U+0043 (category Lu: Letter, uppercase)
 'C': ASCII/Unicode U+0043 (category Lu: Letter, uppercase)

这里,collect("ATTAGAAACC")会先把新的字符串转换成字符数组,然后再与原来的seq拼接在一起。运行后得到一个包含20个字符的数组,表示两个DNA片段已经连接成了一个更长的字符序列。

如果希望将字符数组重新转换回字符串,可以使用String函数:

seq = String(seq2)

通过Syslab运行程序,结果如下。

"GCTAGAATCCATTAGAAACC"

3.字符

ASCII字符的表示形式如下。

ch = 'a'

通过Syslab执行语句,结果如下。

'a': ASCII/Unicode U+0061 (category Ll: Letter, lowercase)

Unicode字符的表示形式如下。

ch = '中'

通过Syslab执行语句,结果如下。

'中': Unicode U+4E2D (category Lo: Letter, other)

判断字符是否是Unicode编码对应的字符。

ch == '\U4E2D'

通过Syslab执行语句,结果如下。

true

字符类型转换,即使用UInt32()将字符转换成无符号32位整数。

d = UInt32('中')

通过Syslab执行语句,结果如下。

0x00004e2d

1.4.6 调用函数

Syslab提供了大量执行计算任务的函数,函数相当于其他编程语言中的子程序或方法。

(1)要调用函数,请将其输入参数用括号括起来。

A = [1 3 5];
maximum(A)

通过Syslab执行语句,结果如下。

5

(2)如果存在多个输入参数,请使用逗号分隔。

B = [3 6 9];
union(A,B)

通过Syslab执行语句,结果如下。

5-element Vector{Int64}:
 1
 3
 5
 6
 9

(3)可将函数赋给变量,返回的是该函数的输出。

maxA = maximum(A)

通过Syslab执行语句,结果如下。

5

(4)当有多个输出参数时,将它们写在等式左侧,用逗号隔开。

minA, maxA = extrema(A)

输出数组A中的最小值。

minA

通过Syslab执行语句,结果如下。

1

输出数组A中的最大值。

maxA

通过Syslab执行语句,结果如下。

5

(5)输入参数为文本时,用引号引起来。

display("hello world")

通过Syslab执行语句,结果如下。

"hello world"

1.4.7 二维线图和三维线图

1.二维线图

要创建二维线图,请使用plot()函数。

实操样例1-1 绘制从0到2π的正弦函数图像。

using TyPlot
x = 0:pi/100:2*pi;
y = sin.(x);
plot(x,y)

通过Syslab运行程序,结果如图1-15所示。

图1-15

#可以标记轴并添加标题
xlabel("x")
ylabel("sin(x)")
title("Plot of the Sine Function")

通过Syslab运行程序,结果如图1-16所示。

图1-16

#通过向绘图函数添加第3个输入参数,可以使用红色虚线绘制出相同的图像
plot(x,y,"r--")

通过Syslab运行程序,结果如图1-17所示。

图1-17

"r--"是线条规范。每个规范都可以包含线条颜色、样式和标记。标记是出现在每个绘制的数据点处的符号,如“+”“o”“*”。例如"b:+"表示带有“+”标记的蓝色点线。

请注意,默认情况下,每次调用绘图函数时,Syslab都会清除图形,重置轴和其他元素以准备新图。

要将图添加到现有图,请使用hold("on")。在使用hold("off")或关闭窗口之前,所有图都会出现在当前图形窗口中。

x = 0:pi/100:2*pi;
y = sin.(x);
plot(x,y)
hold("on")
y2 = cos.(x);
plot(x,y2,":")
legend("sin","cos")
hold("off")

通过Syslab运行程序,结果如图1-18所示。

图1-18

2.三维线图

三维线图通常显示由两个变量的函数 z=f(x, y)定义的曲面。

  实操样例1-2 对于给定的行向量x和列向量y,每个向量包含[-2,2]范围内的20个点,计算

using TyPlot
x = LinRange(-2,2,20)';
y = reshape(x,20,1);
z = x .* exp.(-x.^2 .- y.^2);
#创建一个表面图
surf(x,y,z)

通过Syslab运行程序,结果如图1-19所示。

图1-19

3.绘制多个图

可以使用tiledlayout()或subplot()函数在同一窗口中显示多个图。subplot()函数的前两个输入参数分别表示每行和每列的图数,第3个输入参数指定哪个图处于活动状态。

  实操样例1-3 在图形窗口的2×2网格中创建4个图。

using TyPlot
sgtitle("Trigonometric Functions")
x = LinRange(0,30,100);
ax1 = subplot(2,2,1);
plot(x,sin.(x))
title(ax1, "Sine")
ax2 = subplot(2,2,2);
plot(x,cos.(x))
title(ax2, "Cosine")
ax3 = subplot(2,2,3);
plot(x,tan.(x))
title(ax3, "Tangent")
ax4 = subplot(2,2,4);
plot(x,sec.(x))
title(ax4, "Secant")
tightlayout()

通过Syslab运行程序,结果如图1-20所示。

图1-20

1.4.8 脚本编程

脚本是一种简单的Syslab程序,是一个包含多行连续的Syslab命令和函数调用的文件。

1.创建脚本

要创建脚本,请在Syslab界面中单击“新建”下拉按钮,在弹出的下拉菜单中选择“新建Julia脚本”。该操作会打开一个名为Untitled-1.jl的空白文件。

  实操样例1-4 计算球体表面积和体积。

using TyPlot
#创建一个单位球体,将半径加倍并绘制
x,y,z = sphere(;fig=false); 
r = 2;
surf(x*r,y*r,z*r)
axis("equal")
#接下来,添加计算球体表面积和体积的代码
A = 4*pi*r^2;
V = (4/3)*pi*r^3;

通过Syslab运行程序,结果如下。

julia> A
50.26548245743669
 
julia> V
33.510321638291124

将文件保存在当前文件夹中,并重命名为 mysphere.jl。要运行脚本,可以在命令行窗口中输入include("脚本名称")并执行。

include("mysphere.jl")

还可以单击运行按钮运行脚本。

2.循环和条件语句

在任何脚本中都可以定义循环或基于特定条件执行的代码段。循环使用for或while关键字,条件语句使用 if关键字。循环对创建序列很有用。

例如,创建一个名为fibseq.jl的脚本,该脚本使用for循环来计算斐波那契数列的第3到100数字。在这个序列中,前两个数字是1,后续数字都是前两个数字的和,即

  实操样例1-5 计算斐波那契数列的第3到100个数字。

N = 100;
f = Vector{Int64}(undef, N)
f[1] = 1;
f[2] = 1;
for n = 3:N
    f[n] = f[n-1] + f[n-2];end
f[1:10]
#运行脚本时,for语句定义一个名为n的计数器,从3开始。然后,循环重复分配给f[n],每次执行时增加1,直到达到100。脚本中的最后一条命令f[1:10]表示显示f的前10个元素

通过Syslab运行程序,结果如下。

julia> 正在运行 fibseq.jl
10-element Vector{Int64}:
  1
  1
  2
  3
  5
  8
 13
 21
 34
 55

3.打开脚本和复制脚本路径

右击脚本后,可在文件资源管理器中打开脚本,还可复制脚本的完整路径及相对路径,如图1-21所示。

图1-21

1.4.9 帮助文档

所有Syslab函数都有支持文档,其中包含示例以及输入参数、输出参数和调用语法说明。用户可以利用Syslab界面右上方的搜索框搜索对应函数内容,如图1-22所示。此外,用户还可以单击帮助按钮访问完整的产品文档。

图1-22

1.5 同步练习

(1)科学计算语言有哪些?如何分类?

(2)Julia与MATLAB、Python、R语言和C语言相比有什么优势?

(3)什么是动态语言?动态语言有什么优势?

(4)启动Syslab,在命令行窗口中依次输入如下脚本命令,观察每条命令执行后命令行窗口和工作区中的显示内容。

julia>  a=10;
julia>  b=2*pi*a/30
julia>  a - 10*b

(5)简述Syslab的主要功能。

(6)计算1+1/2+1/4+1/6+1/8与1+1/3+1/5+1/7+1/9。

(7)计算一个半径为6.6的圆的面积。

(8)利用Syslab指令生成4×4的单位矩阵。

相关图书

Claude Code实战:Harness工程之道
Claude Code实战:Harness工程之道
Harness工程:从上下文管理到Agent系统构建
Harness工程:从上下文管理到Agent系统构建
Python编程快速上手——让烦琐工作自动化(第3版)
Python编程快速上手——让烦琐工作自动化(第3版)
人人都是AI程序员:TRAE+Cursor 从0到1全栈实战
人人都是AI程序员:TRAE+Cursor 从0到1全栈实战
精通MCP:AI智能体开发实战
精通MCP:AI智能体开发实战
DeepSeek原理与项目实战大模型部署、微调与应用开发
DeepSeek原理与项目实战大模型部署、微调与应用开发

相关文章

相关课程