调试脚本文件
MATLAB 是一种解释与执行同时进行的语言,代码的调试比较方便。程序调试就是找到程序中的错误并去除。错误大致分为语法错误,运行错误和异常。
MATLAB 通常能检查出语法错误,例如遗漏括号,遗漏引号,命令名错误等。
运行错误是流程出错或者程序有误造成的执行结果错误。异常是程序执行时不满足执行条件而造成的错误。
MATLAB 可以通过设置断点查看工作区的值来调试。
调试流程
运行程序时,命令窗口提示错误。根据错误提示,分析程序出现错误的原因,调试过程
中,在可能出现错误的位置设置断点。如果没有报错但计算结果有误,则分析哪一步计算出
现问题,在可能出现错误的位置设置断点。
MATLAB 中编辑器功能区有设置断点(breakpoint)的选项,暂停代码执行选项,可用
来设置或清除断点。设置断点时,在行的左侧点击出现红色圆点,再次点击红色圆点处可以
去除断点。当程序执行时,运行到断点停止,可以查看中间步骤的变量。
在指定行设置断点,程序执行时在断点指定行停止执行。在恢复执行前,可以查看或修改函数工作空间中变量的值。将鼠标点在需要停止的文本行的左边,显示红色圆点代表这一行设置了断点。
点击工具栏编辑器中的运行按钮或者按F5 键运行程序,当程序运行到断点之处,程序暂停运行,等待下一步操作。断点右侧显示绿色箭头,绿色箭头指示要执行的下一个命令行。
程序调试运行时,命令行的提示符变为“K>>”,可以在命令行中输入命令,不会打断程序的执行。此时可以输入一些命令,查看中间变量。
单击编辑器中的继续按钮或者按F5 键,从断点处继续运行。按步进按钮或者按F10 键可以进行单步调试,程序一步一步向下执行。
将鼠标停留在某个变量上,会显示变量的当前值。也可以通过查看工作空间的各个变量的值和属性,查看变量的值,检查计算的值是否正确。
根据以上分析,发现错误,纠正错误,修改程序,清除所有断点,保存文件。
输入输出命令
MATLAB 可以从用户获取输入,控制格式化输出。输入和输出的命令包含如下。
disp(A) | 显示A的内容 |
disp(‘text’) | 显示单引号内部的文本串 |
format | 控制屏幕输出的显示格式 |
fprintf | 格式化写入屏幕或者文件中 |
x=input(‘text’) | 显示单引号内的文本,等待用户从 键盘输入,将输入存储在x 中 |
函数
1.声明函数
function [y1,…,yN] = myfun(x1,…,xM)
function [y1,…,yN] = myfun(x1,…,xM) 声明名为myfun 的函数, 该函数接受输入
x1,…,xM 并返回输出y1,…,yN。将函数代码保存在扩展名为.m 的文本文件中。文件的名称应与文件中其函数的名称一致。函数名称以字母字符开头,并且可以包含字母、数字或下划线。使用end 关键字来表示每个函数在文件中的结尾
2函数输入输出参数
nargin 针对当前正在执行的函数,返回传递给该函数调用的输入参数的数目。该nargin
语法仅可在函数体内使用。
nargin(fx) 返回函数定义语句fx 中出现的输入参数的数目。
nargout 针对当前正在执行的函数,返回该函数调用中指定的输出参数的数目。该
nargout 语法仅可在函数体内使用。
nargout(fx) 返回fx 函数定义语句中出现的输出参数的数目。
3.函数类型
程序文件中可以包含多个函数,局部函数可用于将程序分解为更小的任务。文件中的其他函数称为局部函数。局部函数仅对同一文件中的其他函数可见。局部函数也被称为子函数。
例如:一个名称为mystats.m 的程序文件,其中包括主函数mystats 以及两个局部函数mymean 和mymedian。
匿名函数不存储在程序文件中,允许定义该函数而不必创建程序文件,匿名函数可以接
受输入并返回输出,就像标准函数一样。但是,可能只包含一个可执行语句。
匿名函数通常用于定义数学表达式,使用功能函数(即接受函数句柄作为输入的函数),
将函数句柄用作输入,在特定值范围计算该表达式。
例如,创建用于计算平方数的匿名函数的句柄:
1. sqr = @(x) x.^2; 2. a = sqr(5);
变量sqr 是一个函数句柄。@ 运算符创建句柄,@ 运算符后面的圆括号() 包括函数的输入参数。该匿名函数接受单个输入x,并显式返回单个输出,即大小与包含平方值的x相同的数组。通过将特定值(5) 传递到函数句柄来计算该值的平方。
[y1,…,yN] = feval(fun,x1,…,xM)
使用函数的名称或其句柄以及输入参数x1,…,xM 来计算函数的结果。
a = feval(sqr, 5); 和a = sqr(5); 计算函数句柄sqr,输入为5 的值。
关系运算符和逻辑变量
一、逻辑关系符
1.关系运算
符号 | 等效函数 | 说明 |
< | lt | 小于 |
<= | le | 小于或等于 |
> | gt | 大于 |
>= | ge | 大于或等于 |
== | eq | 等于 |
~= | ne | 不等于 |
当用于比较数组时,比较的数组具有相同的维数,关系运算符逐元素比较数组,得到数组元素为比较结果为1 或0。在MATLAB 中标量也是一个数组,数组和标量可以进行比较,
比较时,数组中的每个元素都和标量进行比较。
2.logical 类和logical 函数
logical 是一种逻辑数据类型,逻辑变量的值为1(真)或者0(假)。
使用logical 函数可以将数组转化为逻辑数组,使用double 函数也可以将逻辑数组转换为double 类型的数组。
使用逻辑数组寻址另一个数组时,可以从数组中提取到逻辑值为1 位置的元素。使用逻辑数组用于寻址计算,例如:x(x<y)能够找到x 中所有逐个小于y 的元素,将找到的元素存储在b 中。
二、逻辑运算
1.逻辑运算符
MATLAB 有多个逻辑运算符,也称为布尔(boolean)运算符,逻辑运算也称为布尔运算。
逻辑运算符的优先级比算数运算符和逻辑运算符低,NOT 运算符除外。
Short-circuit &&,|| | 具有短路功能的逻辑运算 |
& | 计算逻辑 AND |
~ | 计算逻辑 NOT |
| | 计算逻辑 OR |
NOT 运算~A 返回与A 大小相同的逻辑数组。如果A 中元素为零值,则数组中对应元素为逻辑值1 (true) 值;如果A 中元素为非零值,则数组中对应元素为逻辑值0 (false)。
A & B 对数组A 和B 执行逻辑AND 操作,并返回包含设置为逻辑值1 (true) 或逻辑值0 (false) 的元素的数组。
如果A 和B 在相同的数组位置都包含非零元素,则输出数组中对应位置的元素将设置为逻辑值1 (true)。如果不是,则将数组元素设置为0。
A | B 对数组A 和B 执行逻辑OR 操作,并返回包含设置为逻辑值1 (true) 或逻辑值0
(false) 的元素的数组。如果A 或B 中相同位置元素存在非零元素,则输出数组中对应元素为逻辑值1 (true)。如果不是,则将数组元素设置为0。
短路逻辑运算符是当有多个表达式时,左边的表达式值可以确定结果时,就不再继续运算右边的表达式的值,只有结果不能由第一个表达式确定的时候,才计算第二个表达式的值。
expr1 && expr2 表示使用短路行为的逻辑AND 运算,如果两个表达式的值都为true,返回逻辑1(true),如果有一个为false,返回逻辑值0(false)。
即,如果expr1 为逻辑值0 (false),
将不计算expr2 的结果。每个表达式的计算结果都必须为标量逻辑值。
expr1 || expr2 表示使用短路行为的逻辑OR 运算,如果有一个值为true,返回逻辑值1(true),如果两个值都为false,则返回逻辑值0(false)。
即,如果expr1 为逻辑值1 (true),将不计算expr2 的结果。每个表达式的计算结果都必须为标量逻辑值。
2.逻辑函数
常用的逻辑函数如下。
xor | 计算逻辑异OR |
all | 确定所有的数组元素是为非零还是True |
any | 确定是否有任何数组元素非零 |
find | 查找非零元素的索引和值 |
true | 逻辑值1(真) |
false | 逻辑0(假) |
logical | 将数值转换为 逻辑 值 |
islogical | 确定输入是否为 逻辑 数组 |
isinteger | 确定输入是否为 整数 数组 |
isfloat | 确定输入是否为 浮点 数组 |
isnumeric | 确定输入是否为 数值 数组 |
ischar | 确定输入是否为 字符 数组 |
isfinite | 确定哪些数组元素为 有限 值 |
isinf | 确定哪些数组元素为 无限 值 |
isrel | 确定数组是否使用 复数 存储 |
isnan | 确定哪些数组元素为 NaN |