《MATLAB/Simulink系统仿真超级学习手册》——2.5 文件的编写

简介:

本节书摘来自异步社区《MATLAB/Simulink系统仿真超级学习手册》一书中的第2章,第2.5节,作者:MATLAB技术联盟 , 石良臣著,更多章节内容可以访问云栖社区“异步社区”公众号查看

2.5 文件的编写

MATLAB/Simulink系统仿真超级学习手册
M文件可分为脚本M文件(简称脚本文件)和函数M文件(简称函数文件)两大类,其特点和适用领域均不同。

2.5.1 脚本文件
脚本文件是由MATLAB语句构成的文本文件,以.m为扩展名。运行命令文件的效果等价于从MATLAB命令窗口中按顺序逐条输入并运行文件中的指令,类似于DOS下的批处理文件。

脚本文件运行过程所产生的变量保留在MATLAB的工作空间中,脚本文件也可以访问MATLAB当前工作空间的变量,其他脚本文件和函数可以共享这些变量。因此,脚本文件常用于主程序的设计。

【例2-17】编写脚本文件,对数a、b、c进行排序,并按从大到小的顺序输出。

(1)在MATLAB窗口中输入a、b、c的数值,即下面语句:

>> a=1;b=0;c=3;

(2)新建一个文本文件,在该文本编辑窗口中输入对数a、b、c进行排序的命令,并以文件名ep2_17.m保存,如图2-17所示。

screenshot

注意:sort是MATLAB的内置函数,用于对矩阵进行排序,descend表示降序。

(3)在MATLAB命令窗口中输入M文件名,即ep2_17,得到下面结果。

>> ep2_17
ans =
    3  1  0

注意:文本文件ep2_17执行过程中,成功地访问了MATLAB工作空间的变量和数据a、b、c。

2.5.2 函数文件
函数文件是M文件的另一种类型,它也是由MATLAB语句构成的文本文件,并以.m为扩展名。MATLAB的函数文件必须以关键字function语句引导,其基本结构如下:

function [返回参数1,返回参数2,…]=函数名(输入参数1,输入参数2,…)
    % 注释说明语句段,由%引导
  输入、返回变量格式的检测语句
  函数体语句

函数文件具有如下特点。

(1)函数名由读者自定义,与变量的命名规则相同。

(2)保存的文件名必须与定义的函数名一致。

(3)读者可通过返回参数及输入参数来实现函数参数的传递,但返回参数和输入参数并不是必须的。返回参数如果多于1个,则应该用中括号“[]”将它们括起来;输入参数列表必须用小括号“()”括起来,即使只有一个输入参数。

(4)注释语句段的每行语句都应该用%引导,%后面的内容不执行。用户可用help命令显示出注释语句的内容,用于函数使用前的信息参考。

(5)如果函数较复杂,则正规的参数格式检测是必要的。如果输入或返回参数格式不正确,则应该给出相应的提示。

(6)函数中输入和返回参数的实际个数分别有MATLAB内部保留变量nargin和nargour给出,只要运行了该函数,MATLAB将自动生成这两个变量,因此用户编程时可直接使用。

(7)与一般高级语言不同的是,函数文件末尾处不需要使用end命令。

【例2-18】编写函数文件,以数a、b、c为函数参数,对数a、b、c进行排序,并按从大到小的顺序输出。

(1)新建一个文本文件,在该文本编辑窗口中输入下面的命令,并以文件名ep2_18保存在当前工作目录中;

function out=ep2_18(a,b,c)
% This function is used to sort a, b and c.
if nargin==3
  out=sort([a,b,c],'descend');
end

注意:这里有对参数个数的检测,参数个数等于3时排序命令才会执行。

(2)在MATLAB命令窗口中调用该函数文件,得到下面的结果。

>> out = e2_17(1,0,3)
out = 
  3  1  0

注意:调用函数文件时,运行结果可保存在任意名称的变量下,不必与函数文件中的返回变量相同。

与脚本文件相比,函数文件的优点之一是实现了参数的传递,这极大地提高了文件的通用性。例如,在分别用脚本文件和函数文件实现对数a、b、c的排序程序中,所用的命令几乎一样,但脚本文件ep2_16只能在当前工作窗口中使用,参数必须在工作空间中给定,而函数文件ep2_17则可以被任何主程序或其他函数调用,参数可以任意设定。

【例2-19】编写函数文件,实现一个n行m列矩阵,使得该矩阵第i行第j列元素值为1/(i+j-1)。要求在编写的函数中实现如下几点:

(1)如果只给出一个输入,则会自动生成一个方阵;

(2)在函数中给出合适的注释信息;

(3)检测输入和返回变量的个数,如果有错误则给出错误信息。

编写函数文件ep2_19,在该文件中输入下面的语句:

function A=ep2_19(n,m)
% 该函数用于创建一个特殊矩阵: A(i,j)=1/(i+j-1)
% A=ep2_18(n,m) 创建一个n行m列矩阵
% A=ep2_18(n)   创建一个n阶方阵
if nargout>1 
  error('Too many output arguments!');
end
if nargin==1
  m=n;
elseif (nargin==0)||(nargin>2)
  error('Wrong number of input arguments');
end
A=zeros(n,m);
for i=1:n
  for j=1:m
    A(i,j)=1/(i+j-1);
  end
end

在MATLAB命令窗口中调用函数ep2_19,计算结果如下:

>> A=ep2_19(2,3) 
A =
  1.0000  0.5000  0.3333
  0.5000  0.3333  0.2500
相关文章
|
1天前
|
存储
基于遗传算法的智能天线最佳阵列因子计算matlab仿真
本课题探讨基于遗传算法优化智能天线阵列因子,以提升无线通信系统性能,包括信号质量、干扰抑制及定位精度。通过MATLAB2022a实现的核心程序,展示了遗传算法在寻找最优阵列因子上的应用,显著改善了天线接收功率。
|
3天前
|
监控 算法 数据安全/隐私保护
基于三帧差算法的运动目标检测系统FPGA实现,包含testbench和MATLAB辅助验证程序
本项目展示了基于FPGA与MATLAB实现的三帧差算法运动目标检测。使用Vivado 2019.2和MATLAB 2022a开发环境,通过对比连续三帧图像的像素值变化,有效识别运动区域。项目包括完整无水印的运行效果预览、详细中文注释的代码及操作步骤视频,适合学习和研究。
基于毕奥-萨伐尔定律的交流电机的4极旋转磁场matlab模拟与仿真
本课题基于毕奥-萨伐尔定律研究交流电机的4极旋转磁场,对比不同定子半径和2极旋转磁场。通过MATLAB2022a进行仿真,核心程序计算每个导线对空间点的磁场贡献,并绘制磁场分布。毕奥-萨伐尔定律描述了电流元产生的磁场分布,对于理解交流电机中旋转磁场的形成至关重要。
|
6天前
|
机器学习/深度学习 算法 数据挖掘
基于GWO灰狼优化的GroupCNN分组卷积网络时间序列预测算法matlab仿真
本项目展示了基于分组卷积神经网络(GroupCNN)和灰狼优化(GWO)的时间序列回归预测算法。算法运行效果良好,无水印展示。使用Matlab2022a开发,提供完整代码及详细中文注释。GroupCNN通过分组卷积减少计算成本,GWO则优化超参数,提高预测性能。项目包含操作步骤视频,方便用户快速上手。
|
8天前
|
机器学习/深度学习 算法 数据处理
基于最小二乘法的太阳黑子活动模型参数辨识和预测matlab仿真
本项目基于最小二乘法,利用Matlab对太阳黑子活动进行模型参数辨识和预测。通过分析过去288年的观测数据,研究其11年周期规律,实现对太阳黑子活动周期性的准确建模与未来趋势预测。适用于MATLAB2022a版本。
|
8天前
|
固态存储
螺旋卫星通信天线设计与有限元分析matlab仿真
本课题研究了尺寸为10cm*10cm*30cm的卫星上搭载的螺旋型天线,工作于UHF频段(1-3GHz)。通过MATLAB2022a进行系统仿真,展示了天线的辐射特性。螺旋天线因其低轴比、宽带宽和紧凑结构而适用于卫星通信。采用有限元法分析天线的电磁性能,计算了天线的关键性能指标,包括S参数、增益、轴比等。
|
8天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于WOA鲸鱼优化的GroupCNN分组卷积网络时间序列预测算法matlab仿真
本项目展示了一种基于WOA优化的GroupCNN分组卷积网络时间序列预测算法。使用Matlab2022a开发,提供无水印运行效果预览及核心代码(含中文注释)。算法通过WOA优化网络结构与超参数,结合分组卷积技术,有效提升预测精度与效率。分组卷积减少了计算成本,而WOA则模拟鲸鱼捕食行为进行优化,适用于多种连续优化问题。
|
9天前
|
机器学习/深度学习 算法 5G
基于BP神经网络的CoSaMP信道估计算法matlab性能仿真,对比LS,OMP,MOMP,CoSaMP
本文介绍了基于Matlab 2022a的几种信道估计算法仿真,包括LS、OMP、NOMP、CoSaMP及改进的BP神经网络CoSaMP算法。各算法针对毫米波MIMO信道进行了性能评估,通过对比不同信噪比下的均方误差(MSE),展示了各自的优势与局限性。其中,BP神经网络改进的CoSaMP算法在低信噪比条件下表现尤为突出,能够有效提高信道估计精度。
22 2
|
1天前
|
编解码 算法 数据安全/隐私保护
基于BP译码的LDPC误码率matlab仿真,分析码长,码率,信道对译码性能的影响,对比卷积码,turbo码以及BCH码
本程序系统基于BP译码的LDPC误码率MATLAB仿真,分析不同码长、码率、信道对译码性能的影响,并与卷积码、Turbo码及BCH编译码进行对比。升级版增加了更多码长、码率和信道的测试,展示了LDPC码的优越性能。LDPC码由Gallager在1963年提出,具有低复杂度、可并行译码等优点,近年来成为信道编码研究的热点。程序在MATLAB 2022a上运行,仿真结果无水印。
32 0
|
1天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于贝叶斯优化卷积神经网络(Bayes-CNN)的多因子数据分类识别算法matlab仿真
本项目展示了贝叶斯优化在CNN中的应用,包括优化过程、训练与识别效果对比,以及标准CNN的识别结果。使用Matlab2022a开发,提供完整代码及视频教程。贝叶斯优化通过构建代理模型指导超参数优化,显著提升模型性能,适用于复杂数据分类任务。

热门文章

最新文章