首页 » 网站建设 » php回行赋值技巧_轻松掌握MATLAB 14 MATLAB基本语法

php回行赋值技巧_轻松掌握MATLAB 14 MATLAB基本语法

访客 2024-12-08 0

扫一扫用手机浏览

文章目录 [+]

exist函数若返回0,表明标识符可用。
exist函数若返回非零数值,表示标识符已被占用。
MATLAB中不为零的数都是true,包括负数。

MATLAB中部分函数支持两种调用格式:函数格式和指令格式。
例如, 函数格式 exist('eps') 等效于指令格式 exist eps。
函数格式调用时,圆括号中的标识符要放到一对单引号或双引号之间。
由于返回的是非零的值,表示标识符eps已被占用。
exist函数返回的非零值,除了表明标识符已被占用,通过返回的非数值还可以判断被占用标识符确当前类型。
例如,1表示已有同名变量占用,5表示已有同名内置函数。
详细数值的含义可以doc exist查询或者用which函数予以确认。
例如,

php回行赋值技巧_轻松掌握MATLAB  14 MATLAB基本语法

命令实行后的返回结果表明,x是一个变量,eps是MATLAB的内置函数。
如果标识符是文件名或函数名,which函数在给出其类型的同时还会给出路径。

php回行赋值技巧_轻松掌握MATLAB  14 MATLAB基本语法
(图片来自网络侵删)

除了用来进行标识符鉴别,exist函数还常用于程序中来作条件判断,MATLAB推举用双参数格式进行定性判断,由于这样可以提高效率。
例如,用 exist('eps','var') 查看是否已存在名为eps的变量,用 exist('eps','bultin') 判断是否已存在名为eps的内置函数。

除了通用的exist函数,MATLAB还定义了几个专用的标识符类型判别函数,如isvarname、iskeyword。

isvarname x 等效于函数格式的 isvarname('x') 或 exist('x','var')。
MATLAB中有浩瀚is开头的函数,它们返回逻辑值,用来作问询和判断。
详情请doc is

MATLAB预定义了一些常量,例如圆周率pi、无穷大Inf、浮点数相对精度eps等。
预定义常量实在也是一种返回特定值或分外矩阵的函数。
标识符命名时尤其把稳不要覆盖这些预定义常量。
理解MATLAB预定义常量请 doc Constants and Test Matrices。

1.4.2 基本语法与常用符号1. 变量创建与赋值

在MATLAB中创建变量时,无需提前声明其数据类型和维度(预分配内存)。
首次涌现的变量名,MATLAB会根据为其所赋值的数据类型创建变量并为其分配内存。
数值数据默认为double型。
例如:

上面第一条语句创建了一个变量a并赋初值为右侧的数组。
从第二条语句可以看出,赋值后a的形状(Size)为2x3,数据类型(Class)为double。
第一条指令中,“=”为赋值符号;“[]”用来构建数组,当数组只有一个元素时可省略;数组中用逗号或空格来分割同一行的元素,用分号“;”来分隔行。
我们在创建变量a时,既没有预先指定其数值类型,也没有指定其形状,所有的这些事情都是在赋值时自动完成的。

如果变量名已经存在,再次赋值时MATLAB会将以前的内容覆盖,并根据须要可能会重新自动分配内存。
例如:

上面第一条指令将变量a重新赋值为了一个字符型(char)数组,原来2x3的数值数组被覆盖,全体过程中内存的回收和分配都是自动完成的。
指令中的单引号用来构建字符型数组;指令行尾的分号用来抑制回行显示。
去掉句尾的分号,在命令行窗口中重新实行该语句,不雅观察去掉分号前后的差异。

【解释】

除了文本型数据以外,MATLAB中所有指令必须以英文半角办法输入。
文本型数据的引号内部可以输入任意字符,但最表面的引号必须用英文半角办法输入。
等号“=”为MATLAB的赋值符号。
建议等号前后加空格,提高代码可读性。
多条指令如果同行放置,需用逗号或分号分隔。
如果被指令实行后有返回数据,以分号结尾的指令,不会在命令行回显。
如非分外情形,只管即便避免多指令同行。
2. 函数的调用

函数是模块化程序设计的根本。
MATLAB有大量的内置函数,大概可用户自定义函数。
MATLAB中函数的调用有两种常见格式:

(1) 函数格式

[output1,....,output] = funName(input1,....,inputN)

个中funName是函数名。
函数格式是通用格式,适用于所有MATLAB函数和自定义函数。
按照这种格式,函数的输入参数放在函数名右侧的圆括号()内,输出参数放在等号左侧的方括号[]内。
如果只有一个输出参数,方括号[]可以省略。
须要把稳的是,在函数调用时,多个输入/输出参数间必须用逗号分隔,而不能用空格。
例如:

参数间的逗号必不可少,也不可以用空格替代,但逗号前后可以有任意多个空格,等号前后也可以有任意多个空格,MATLAB实行时会忽略这些空格。

(2) 指令格式

funName input1˽....˽inputN

上述指令格式等效于函数格式的 funName(input1,....,inputN)。
指令格式仅适用于不须要将输出赋值给别的变量且输入全为字符型参数的函数。
例如:

这条指令与前面提到的函数格式的指令等效。
通过比拟可以创造,指令格式具有以下特点:

不能有输出参数;输入参数间用空格间隔,不能用逗号间隔;输入字符型参数无需单引号括起。

由于这些特点,指令格式在某些情形下,尤其是在命令行调用时,会更加方便。
在MATLAB中,常用的支持指令格式的函数还有hold、grid、xlable、axis、legend、title、save、load、open、edit、doc等。
感兴趣的读者请doc这些函数,理解其基本用法。

3. 几个分外符号

除了运算符外,MATLAB程序中还可以利用空格、空行、指令分隔符、注释符、分节符、续行符等分外符号。
对这些分外符号的用法简要先容如下:

(1) 空格和空行

除了数组中用来间隔元素的空格和空行,MATLAB忽略指令中的其他空格和空行。
例如:

第一条指令中的所有空格被忽略。
但是,第二条指令却报错了,缘故原由是在数组中逗号或空格被认为是元素分隔符,这样函数sin就没有输入参数了。
实在后面的(pi)也是缺点的,但 MATLAB 在对指令进行语法检讨时是从左到右进行的,碰到第一个缺点就终止检讨直接报错了。
数组中元素间可以有多个连续空格,逗号前后也可以有多个空格。
编程中可以合理利用空格和空行,对代码进行分段、对齐,以增加程序的可读性。
建议赋值操作符“=”前后加空格。

(2) 指令分隔符

由于 MATLAB 会忽略指令行中的空格,因此当须要在一行中放置多条指令时,须要利用逗号或分号进行分隔。
逗号和分号的差异在于:如果指令有输出,以逗号结尾的指令会在命令行中回显输出结果,相称于多实行了一条display指令;而以分号结尾的指令则不会在命令行中显示输出结果,因此实行效率更高。
例如:

为了提高实行效率,程序文件中的指令行常日都以分号结尾。
当然,如果希望某行程序的结果在命令行中回显,可以去掉分号。
在程序调试时,这也是一种常用的不雅观察代码实行结果的技巧。
虽然 MATLAB 许可在一行中放置多条指令,但除了极少数大略清晰的代码外,应只管即便避免这种做法,由于这会影响程序的可读性。

(3) 注释符

为程序添加必要的注释,是提高程序可读性的常规方法之一。
在 MATLAB 中,%为注释符。
注释符后的内容不会被检讨和实行。
注释既可以单行涌现,也可以涌如今代码行末。
为程序添加规范的注释是个好习气,由于程序是给人看的,适当的注释既方便与别人互换或互助,也方便往后自己阅读和掩护代码。

自定义函数中的第一行注释称为 H1 行,在命令行用help查询函数帮助时,会返回 H1 行及其后连续的注释内容。
这块注释中该当详细解释函数的利用,包括示例、参数解释等。
可以打开一个 MATLAB 内置函数(例如edit ode45),体会和学习注释的编写规范。

对付大块的注释,MATLAB 中还可以用%{和%}来定义。
这两个符号必须独占一行,其间的注释行前无需再加%。
这种注释办法一样平常很少用,由于在 Editor 中编写注释时会自动回行并添加%。
对付长的注释或大块的注释,还可以选中后按右键,选Wrap Comments(快捷键Ctrl+J)对注释自动进行排版。

(4) 分节符

对付较长的程序,可以将之分身分歧的节或段(Section)。
分节符为%%˽,即两个连续的百分号后加一个空格。
程序调试时,先将光标定位到拟实行的节,然后点击EDITOR工具栏上的Run Section,即可实行光标所在节的代码。
Editor中不同的节可以折叠,便于代码浏览和管理。
其余,代码通过publish导出到Word或PDF文件中时,分节符后的笔墨会变为节标题,加粗显示。

【提示】

启用按节折叠代码的方法,Preferences-Editor/Debugger-Code Folding,然后从右侧列表中选中Sections后的复选框。
这个对话框中还可以设置别的程序身分是否可折叠。

(5) 续行符

MATLAB虽然对单条指令的长度没有限定,但过长的指令未便利编辑,也影响代码的可读性。
建议不要超过Editor中设置的参考线。
长指令可用续行符...续行。
三个连续的点之后的内容等同注释。

MATLAB将续行符当作空格处理,以是断行的位置必须担保若用一个空格将两行代码连起来是合法的。
例如不能在变量名或或函数名中间断行。
为了增强可读性,建议在算符后或某个完全的代码单元后续行。

除了上述常用符号,编程中还会用到大量分外字符,例如算符和格式掌握符等。
doc MATLAB Operators and Special Characters可以列出MATLAB中会用到的所有符号及其功能。
如果须要查找某个特定符号的用法,比如@,可在该帮助页面按Ctrl+F搜索。
把稳,部分成对涌现的字符如(),搜索时中间需加一个空格,即(˽)。

1.4.3 M文件

除了少数大略的、一次性的问题可以在命令行以交互式办法办理以外,大多数情形下,我们须要在MATLAB Editor中编写程序来办理问题。
在Editor中编辑的代码默认保存为扩展名为.m的文件, 因此,MATLAB的程序文件也被称为M文件。
M文件紧张共有三种,即脚本(Script)、函数(Function)和类(Class)。
点击HOME-New,从下拉列表中选择对应的条款即可启动Editor并创建相应类别的m文件。
MATLAB会为新建的函数和类文件供应一个模板。

1.脚本 Script

脚本是最大略的程序文件。
如果一组代码须要反复实行,可以将它们保存为脚本M文件。
脚本与命令行共用根事情区(base workspace),以是脚本可以直策应用根事情区中已有的变量,其实行过程中产生的变量也直接存入根事情区。
为避免不同脚本产生的变量在根空间相互覆盖,造成混乱,建议在脚本文件的第一行建议添加clear,在代码实行前先清空事情区。
这样,脚本程序结束后,事情区中将只有刚运行的脚本中新天生的变量。
脚本类似于一个批处理文件。
除了单独用来办理一些问题,由于其运行结束后产生的数据存在根事情区,便于后续查看和调用,因此还常用作主程序,在个中进行参数设置和路径管理,然后在脚本中调用函数来完成打算。

2. 函数 Function

函数是模块化程序设计的根本。
将须要反复调用、能够实现一定独立功能的代码模块封装成函数,可以提高代码的可重用性和可掩护性。
函数一样平常有输入/输出参数,这也使得它比脚本更加灵巧,能够通过改变输入参数来应对不同的情形。
合理设计和利用函数有助于提高程序的模块化、实行效率和可读性。
此外,常规函数有独立的事情区,函数中除了声明为persistent的变量,别的变量在函数调用结束时会被自动打消,只有输出参数的值被通报到上一层事情区。
因此,利用函数有利于变量命名和内存管理。
如果函数中有大量的数据须要保存,可以用save命令将之保存为.mat文件(MATLAB的默认数据格式),再次利用这些数据时,用load命令载入即可。
函数的实行效率常日比脚本要高。

函数文件由关键字function定义。
基本语法如下:

【解释】

函数的名称、输入参数和输出参数等信息,常被称作函数的署名(Signature)。
函数定义中关键字function所在的行即为函数的署名行;输入参数用圆括号()括起,输出参数用方括号[]括起,参数间用逗号分隔。
输出参数如果只有1个,方括号[]可省略;保存为M文件时,文件名要与主函数名相同;同一个M文件中除了主函数,还可以定义只能被M文件中其他函数调用的局部函数(Local Functions)。
在M文件之外,局部函数一样平常无法访问;函数内部还可以定义函数,称为嵌套函数(Nested Functions)。
嵌套函数同样只能被其上一层函数调用。
与局部函数的差异在于,嵌套函数可以直接访问其上层事情区中的同名变量。
跨区生存的变量,Editor会以分外的颜色显示;如果代码较长,在标志函数结束的关键字end后加注释是个好习气。

【例1.1】波长与频率的关系式为,我们可以编一个函数来实现波长到频率的变换。

function miu = nm2hz(lambda)%NM2HZ converts light unit from nm to Hz% MIU = nm2Hz(LAMBDA)% INPUT:% lambda wavelength of the light in nm.% OUTPUT:% miu frequency of the light in Hz% EXAMPLE:% miu = nm2hz(1550);%% See also HZ2NM% Author: Qun Hanc = 2.99792458e17; % speed in vacuum(nm/s)miu = (c./lambda);printResult %调用嵌套函数 function printResult %这是个嵌套函数,无输入,无输出 fprintf('%f nm is %7.4f Hz\n',lambda, miu) endend %nm2hz

在Editor中输入如上代码,并保存为nm2hz.m。
然后切换到m文件所在的目录,在命令行实行fre = nm2hz(1550), 即可求得波长1550nm的光波的频率,并将结果赋值给名为fre的变量。
在命令行实行help nm2hz,体会h1注释的浸染。
在这个例子中,将格式化输出部分放入了一个嵌套函数,在主函数中通过嵌套函数名调用。
嵌套函数可以直策应用主函数中的参数lambda和miu。
显然,这里的嵌套函数有多此一举之嫌,一样平常代码较多或需反复利用时才会利用嵌套函数。
我们这里纯粹是为了演示观点。
在命令行考试测验调用printResult看能否调用?

【解释】

fprintf函数是非常常用的格式化输出函数,基本语法如下:

fprintf(fileID,formatSpec,A1,...,An)

个中fileID是文件标识符,默认为输出到屏幕;formatSpec是一个字符数组,个中的%d、%7.4f等称为格式化操作符,它以百分号%开头,以转换字符结尾,二者之间可以指定显示宽度、小数位数等。
例如:上例中的%7.4f意为“以浮点数显示,宽度为7位数字,个中小数占4位”。
字符数组中的格式化操作符与后面的参数A1,...,An按顺序逐一对应。
一些无法直接输入的字符,如回车、制表符等可以通过专门的转义字符输入,如\n表示回车,\t表示制表符,\a则发出提示音等。

常用的格式化输出函数有fprintf、sprintf、warning、error、assert等。
请doc函数名,自学其用法。

【练习】

把nm2hz.m中的嵌套函数改为局部函数。
编写hz2nm函数,实现频率到波长的转换。

除了主函数、局部函数和嵌套函数外,MATLAB还支持匿名函数(Anonymous Functions)和私有函数(Private functions)。

匿名函数无需存为M文件,可以在程序中直接定义和利用,如在命令行输入:

上述第一行代码实际上是定义了一个函数句柄并将其赋值给了nm2Hz。
函数句柄是MATLAB基本数据类型之一,由@作为定义符,圆括号中是自变量列表。
匿名函数一样平常仅适用于非常大略的函数,它的实行效率常日要比普通函数低。
因此,对付高频次运行的函数,应避免定义为匿名函数。
MATLAB是大小写敏感的,这里的匿名函数nm2Hz和前面的普通函数nm2hz是两个不同的函数。

私有函数是把普通函数放入一个名为private的文件夹,这样该函数将只能供private文件夹上一级目录中的M文件调用。
私有函数紧张用来掌握函数的浸染域,防止同名函数冲突。
私有函数的优先级高于普通函数。
也便是说,如果private文件夹所在目录中有同名M文件,那么private文件夹中的M文件优先,private上一层目录中的M文件不会被实行。
可以利用这一点,当我们须要修正某个函数又想保留原文件时,可以在原文件所在目录新建一个private文件夹,并将修正版本放入个中。

几种不同函数的优先级顺序是:嵌套函数>局部函数>私有函数>普通函数。

关于MATLAB的函数类型,请doc Function Types。

3. 类 Class

面向过程编程(POP-Procedure Oriented Programming)和面向工具编程(OOP-Object Oriented Programing)是两种主流的编程思想。
MATLAB从R2008a版本开始支持OOP。
鉴于MATLAB面向工具编程是一个较大的话题,我们将在第七章专门进行学习。
这里仅通过MATLAB供应的一个例子,来初步理解一下类M文件的基本构造。
在命令行实行

edit([matlabroot,'\examples\matlab\main\movingAverageFilter.m']);

即可在Editor中打开movingAverageFilter类的定义文件。
我们不必关注程序的详细内容,只需关注一下类文件的构造即可。
可以看到,类文件因此关键字classdef定义的,这个类继续自matlab.System类,个中包括properties、methods等模块,分别定义了类的属性和方法。
类的属性和方法均可以定义访问权限。
methods模块又由一到多个function组成,MATLAB中将类定义中的这种function称为工具函数。

思考与练习调度Desktop中各窗口的位置,然后将自己喜好的布局保存。
如何管理MATLAB事情环境的参数?试将MATLAB的界面措辞设置为英语/中文?对付指令中涌现的标识符,MATLAB是按什么顺序对其进行判断和实行的?利用本章学过的获取帮助信息的方法,查找MATLAB中求解多项式(polynomial)的函数,并求解方程的根(roots)。
如下名称或表达式是否是合法的MATLAB标识符,为什么? (1) 4th (2) _var (3) A&B = A+B; (4) book4student (5) fiber_length如何判断标识符NaN是否已被占用以及被什么占用了?MATLAB中有几种函数?如何定义?各有什么特点?

下一篇:轻松节制MATLAB - 2.1 数组的基本观点
标签:

相关文章