MATLAB 作用域

MATLAB 作用域机制测试代码 MATLAB中的作用域有些奇怪。这里用几个测试代码来分析一下。 本文所有代码段需要在matlab脚本中运行,不能在命令行中直接运行。 MATLAB脚本可以访问工作区标量,但是函数不可以 这是MATLAB方便的地方,可以在Simulink和MATLAB脚本中直接使用工作区的变量。 但是函数是不能访问工作区的标量的,比如下面的代码会报错。 函数体里面无法使用变量a,因为a定义在脚本中,运行后会写入工作区。 clear all a=1; func1(); function func1() disp(a) %函数或变量 'a' 无法识别。 end 那么如何才能访问到a变量呢? 法1:MATLAB函数的中的量可以向下层函数传递 MATLAB函数的中的量可以向下层函数传递,因此可以通过嵌套函数的方式使得脚本可以达到访问上一层变量的效果 function func0() clear all a=1; func1(); function func1() disp(a) %打印1 end end 法2:使用global关键字 global关键字可以将变量在全局范围内共享。 clear all global a %如果有这一行输出2,没有这一行输出1 a=1; change() show() function change() global a a=2; end function show() global a disp(a) end 附:MATLAB中的persistent关键字 %持久变量与全局变量类似,因为 MATLAB 为二者都建立持久存储。二者的区别在于持久变量仅为声明它们的函数所知晓。因此,MATLAB 命令行或其他函数中的代码不能更改持久变量。 clear all %persistent a %不支持在脚本中声明持久变量。如果这里用了会报错 a=1; change() show()%打印1,change函数只改变里面的值 function change() persistent a a=2; end function show() persistent a disp(a) whos a end 总结 MATLAB 中函数的作用域可以嵌套,但是不能访问工作区变量。 global和persistent的主要作用在于,每一次调用都访问的是同一个变量,而不是每次调用都新建一个变量。 这两个关键字现在其实都不推荐了,因为会导致代码的可读性变差,不利于维护,也不利于matlab的处理。 global 编辑了的同名变量是一样的,persistent标记的同名变量是互相独立的。 ...

June 14, 2023 · 1 min · Leo

计算机辅助控制系统设计: 简介与回顾

原文信息 Varga, A. (2020). Computer-Aided Control Systems Design: Introduction and Historical Overview. In: Baillieul, J., Samad, T. (eds) Encyclopedia of Systems and Control. Springer, London. https://doi.org/10.1007/978-1-4471-5102-9_138-3 First Online: 08 November 2019 Source: springer, pdf Author: Andreas Varga Institution: German Aerospace Center, DLR Oberpfaffenhofen Institute of System Dynamics and Control email: Andreas.Varga@dlr.de 摘要 计算机辅助控制系统设计( Computer-aided control system design ,CACSD)包含的领域非常广泛, 其包括用于系统模拟、控制系统合成与整定、动态系统分析与模拟,以及认证与验证等工作的方法,工具与技术。 近些年来,CACSD 所覆盖的领域有了进一步的拓展, 其从应用于控制系统分析与整合的算法程序的简单集合 发展为能够支撑各个应用领域先进控制系统开发部署等各个方面的完整工具集以及用户友好的开发环境。 本文给出了 CACSD 的简要介绍,同时回顾 CACSD 领域关键概念与技术的演化。 其中将重点介绍在开发可依赖数值算法,实现鲁棒数值分析软件以及开发随机交互模型、仿真与设计环境的一些支柱性成就。 关键词(短语): CACSD, 仿真, 建模, 数值分析, 软件工具 ...

August 9, 2022 · 1 min · Leo