第三章 MATLAB程序设计
3.1 M文件建立
3.2 脚本文件
3.3 函数文件
3.4 程序控制结构
3.5 程序调试
1
1. M 文件
Matlab 命令组合构成,完成操作和算法
M文件分类:
文本文件 扩展名为.m ;
文本编辑器:
3.1 M文件建立
M文件编辑器
windows的记事本
word
word文档格式规范word作业纸小票打印word模板word简历模板免费word简历
文件
Script脚本文件/命令文件
编写Matlab 语言的程序
Function函数文件
M 文件是由若干 Matlab 命令组合在一起构成的,它可以完成某些操作,也可以实现某种算法。事实上,Matlab 提供的内部函数以及各种工具箱,都是利用 Matlab 语言开发的 M 文件。用户也可以结合自己的工作需要,开发自己的函数程序或工具箱
。利用 Matlab 的程序控制功能,可以将有关 Matlab 命令编成程序存储在一个文本文件中(M 文件),然后在命令窗口中运行该文件,Matlab 就会自动依次执行文件中的命令,直到全部命令执行完毕。
用 Matlab 语言编写的程序称为 M 文件, 以 .m 为扩展名。M 文件是一个文本文件,可以用任何文本编辑器来建立和编辑(windows的记事本和word文件),通常使用 Matlab 自带的 M 文件编辑器。
2
(1) 新建M 文件
2.M文件建立和打开
命令操作:
命令按钮:
edit
快捷键
M 文件编辑器
(2)打开M 文件
File /Open
edit M 文件名
双击 M 文件
菜单操作:
1.blank m-file 表格或空白文件
2.function m-file 函数文件
File/New
3
(2). windows记事本和word
创建m文件应纳入搜索路径或当前目录,命令窗口才运行
3 . matlab搜索路径的设置
which filename
显示路径:
设定当前目录:
cd d:\myfile
设定搜索路径:
set path (add folder)
>> addpath(' folder path')
删除rmpath(' folder path')
addpath folder path
4. 显示M文件内容
type M文件
调用格式:
>> edit
>> which aaaa
aaaa not found.
>> cd C:\Users\Desktop\matlab
>> addpath(‘C:\Users\Desktop\matlab’)
>> edit aaaa
>>type aaaa
>> type aaaa.m
qq=22;
bb=444;
dd=qq+bb;
在命令窗口显示
% fcircle calculate the area and perimeter of a circle of radii r
% r 圆半径
% s 圆面积
% p 圆周长
% 2004年7月30日编
r=22;
s=pi*r*r
p=2*pi*r
1. 编脚本文件求半径为r的圆的面积和周长
H1注释行
函数体
帮助文本区
保存rsp
3.2 脚本文件
由于help搜索
例
例
按用户意图排列起来一堆命令集合来执行完成一项任务,是简单命令叠加
7
运行后所有变量驻留在基本工作空间(base workspace)
文件变量名不要和计算机命令、函数、文件名相同。
>> whos
Name Size Bytes Class Attributes
p 1x1 8 double
r 1x1 8 double
s 1x1 8 double
>> rsp
2. 调用脚本文件
>>filename
>>rps*34
3. 脚本文件特点
一串命令行简单叠加的集合;
自动按顺序执行文件的命令;
无输入和输出量;
所有变量都驻留在基本工作空间中;
所有变量均为全局变量。
[v,d]=eig(a)
与命令窗口逐行执行文件中的所有指令一样,其结果是一样的。
9
4. 数据输入
从键盘输入数据给变量A
A=input('Please input A: ')
name=input('What''s your name? ', 's')
A=input(‘提示信息’)
Please input A: 33
A=input(‘提示信息’, 's')
输入字符串变量:
输入数值:
name =lili
10
clear;
r=input('Please input radii :');
s=pi*r*r;
p=2*pi*r;
>> ddd
Please input radii :33
s = 3.4212e+003
p = 207.3451
保存ddd
例
例
第一种调用格式:
>> a=input('input example')
input example
1+4
a =
5
>> ischar(a)
ans =
0
第二种调用格式:
>> b=input('input example\n','s')
input example
1+4
b =
1+4
>> ischar(b)
ans =
1
\n是换行
disp(X)
5. 数据输出 disp
数据输出:
数值变量
x=1:2:5;
>> x
x =1 3 5
>> disp(x)
x = 1 3 5
例
例
disp('the x value is')
disp(x)
>> disp(['the x value is:', num2str(x)])
the x value is:1 3 5
num2str(x)
数值转换字符串
disp(‘X’)
字符串
the x value is 1 3 5
function [s,p]=fci(r)
s=pi*r*r ;
p=2*pi*r;
end
r=input('r=');
s=pi*r*r;
p=2*pi*r;
sp=[s,p]
disp(['s=',num2str(sp(1)),',p=',num2str(sp(2))])
脚本文件:
函数文件:
例
例
编脚本文件求半径为r的圆的面积和周长
15
输入x,y值,并将它们值互换后输出。
例
例
x=input('Input x please.');
y=input('Input y please.');
z=x;
x=y;
y=z;
disp(x);
disp(y);
fprintf(format, A, ...)
fprintf(fileid, format, A, ...)
Format 指定数据输出的格式
%d 整数
%e 实数:科学计算法形式
%f 实数:小数形式
%g 由系统自动选取上述两种格式之一
%s 输出字符串
fileid:文件句柄,若缺省,则输出到屏幕
A是用来存放数据的矩阵
6. 格式化输出
指定格式将变量的值输出到屏幕或指定文件
创建一个字符矩阵并存入磁盘,再读出赋值给另一个矩阵。
>> a='string';
>> fid=fopen('d:\char1.txt','w');
>> fprintf(fid,'%s',a);
>> fclose(fid);
>> fid1=fopen('d:\char1.txt','rt');
>> b=fscanf(fid1,'%s')
例
例
>> b=3
fprintf ('there are %f ',b )
>> there are 3.000000
3.3 函数文件
3.3.1 函数文件
3.3.2 全局变量和局部变量
3.3.3 子函数与主函数
3.3.4 函数句柄和匿名函数
function [s,p]=fcircle (r)
% FCIRCLE calculate the area and perimeter of a circle of radii r
% r 圆半径
% s 圆面积
% p 圆周长
% 2004年7月30日编
s=pi*r*r;
p=2*pi*r;
end
编函数文件求半径为r的圆的面积和周长
函数定义行
H1注释行
函数体
帮助文本区
3.3.1 函数文件
例
例
1. 函数文件的格式:
function 输出变量=函数名(输入变量)
H1行 – 用一行文字来综述函数的功能
帮助区
函数体语句
注释说明语句段
function [ output_args] = Untitled( input_args)
%UNTITLED5 Summary of this function goes here
% Detailed explanation goes here
end
function m-file:
21
第一行function引导词;
起函数名要有含义,文件名与一致,即函数名.m;
列出函数与外界交换数据的全部输入/输出量;
输入/输出量数目不限,可有可无;
输出多个变量,应用方括号 [v1,v2]。
function定义行 输出变量=函数名(输入变量)
输入/输出量可有可无
>> [s,p]=fcircle(22)
s = 1.5205e+03
p = 138.2301
>> s=fcircle(22)
s = 1.5205e+03
>> fcircle(22)
ans = 1.5205e+03
function ffcircle (r)
s=pi*r*r;
p=2*pi*r;
end
function [s]=ffcircle (r)
s=pi*r*r;
p=2*pi*r;
end
确定输入和输出变量数目
nargin(‘函数名’)
nargout(‘函数名’)
输入个数
输出个数
r = roots(c)
nargin('roots')
nargout('roots')
ans = -1
输入个数不确定,显示负值
nargin(‘plot')
Jacobi迭代法的MATLAB函数文件Jacobi.m如下:
function [x,n]=jaco(A,b,x0,eps)
if nargin==3
eps=1.0e-6;
elseif nargin<3
error
return
end
D=diag(diag(A)); %求A的对角矩阵
L=-tril(A,-1); %求A的下三角阵
U=-triu(A,1); %求A的上三角阵
B=D\(L+U);
f=D\b;
x=B*x0+f;
n=1; %迭代次数
while norm(x-x0)>=eps
x0=x;
x=B*x0+f;
n=n+1;
end
>> nargin('jaco')
ans = 4
>> nargout('jaco')
ans = 2
H1注释行
文件第二行,是帮助文本的第一行;
%开头注释行,字符不被matlab执行;
大写体的文件名和运用关键词简要描述的函数功能;
在线帮助使用;lookfor只H1行查询关键词。
H1行后%的注释行组成;
详细说明函数功能,如输入/输出量总数和调用格式说明
Help function_name显示所有的%的注释行。
帮助文本区:
>> lookfor fcircle
fcircle - calculate the area and perimeter of a circle of radii r
help fcircle
FCIRCLE calculate the area and perimeter of a circle of radii r
r 圆半径
s 圆面积
p 圆周长
2004年7月30日编
显示注释:help 文件名
lookfor fcircle
函数体
实现函数文件功能的指令组成;
接受输入量、程序结构控制,创建输出量。
注释
%开头注释行;
函数文件任意位置 ,绿色表示;
对语句注释说明。
2 函数调用
[输出变量]=函数名(输入变量)
调用格式:
>> rr=234
rr = 234
>> [x,y]=ff(rr)
x = 1.7202e+005
y = 1.4703e+003
>> whos
Name Size Bytes Class
rr 1x1 8 double
x 1x1 8 double
y 1x1 8 double
function [s,p]=fcircle(r)
>>ff(2,3)*34
>> whos
Name Size Bytes Class
ans 1x1 8 double
>> clear
>> ff(333)
ans =3.4837e+005
29
函数调用特点
开辟临时函数工作空间(Function workspace) 存放中间变量;
运行完毕,中间变量被清除以及临时空间关闭;
函数调用实参数不必与函数定义行形参数同名;
实参数的顺序、个数应与形参数一致,否则出错。
运行后只保留最后结果,不保留中间过程;
function [s,p]=fcircle (r)
s=pi*r*r;
p=2*pi*r;
end
function [x,n]=jaco(A,b,x0,eps)
if nargin==3
eps=1.0e-6;
elseif nargin<3
error
return
end
D=diag(diag(A)); %求A的对角矩阵
L=-tril(A,-1); %求A的下三角阵
U=-triu(A,1); %求A的上三角阵
B=D\(L+U);
f=D\b;
x=B*x0+f;
n=1; %迭代次数
while norm(x-x0)>=eps
x0=x;
x=B*x0+f;
n=n+1;
end
>> A=[10,-1,0;-1,10,-2;0,-2,10];
b=[9,7,6]';
[xx,nn]=jaco(A,b,[0,0,0]',1.0e-6)
>> [xx,nn]=jaco([10,-1,0;-1,10,-2;0,-2,10],[9,7,6]',[0;0;0])
xx =
0.9958
0.9579
0.7916
nn =
11
实参数
形参数
2016年3月28日4时6分
32
function abcd(a,b)
c=a+b
d=sin(c)
e=log(d)
保存为abcd.m
在工作窗口中调用:
>>a=2;b=[3,4,5,6];
>>abcd(a,b)
a=2;
b=3;
c=a+b;
d=sin(c) ;
e=log(d) ;
保存为:abcd.m
在工作窗口中调用:
>>abcd %文件名即可
函数文件
脚本文件
局部变量
全局变量
function e=abcdef(a,b)
c=a+b
d=sin(c)
e=log(d)
保存为abcd.m
在工作窗口中调用:
>>a=2;b=[3,4,5,6];
>>ee=abcdef(a,b)
例
例
程序中变量均为局部变量;
脚本式M文件 函数式M文件
无函数定义行; 有函数定义行;
无输入和输出量,也不一定要返回结果。 可有输入和输出变量,并有返回结果;
在base workspace中数据操作,运行后变量驻留其中; 中间变量存在临时工作空间,它随函数结束而删除;
全局变量。 局部变量,除特别声明。
脚本文件和函数文件的区别
3.3.2. 全局变量和局部变量
全局变量:
所有变量驻留在基本工作空间中,即全程有效;
所有函数都可对其进行存取和修改;
定义全局变量是函数之间传递信息的手段。
仅在函数工作空间中间变量,影响仅限于函数本身;
函数文件变量不能直接访问workspace中的全局变量,它只能读取通过参数传入的变量;
函数文件中定义的变量不能被另一个函数文件引用;
如果在若干函数中,把某个变量定义为全局变量,那么这些函数可以共用这个变量。
局部变量:
2016年3月28日4时6分
36
function [avgs]=test4(A)
global S SS %定义全局变量
[m,n]=size(A);
for i=1:m
s(i)=sum(A(i,:))
end
ss=sum(s)
avgs=ss/(m*n)
end
调用test4:
>> A=[4 3 5;6 7 8;3 5 7;1 3 4];
>> test4(A)
ans = 4.6667
>> global S SS
>> ss
ss = 56
>> s
s = 12 21 15 8
定义全局变量 global
注意:变量之间以空格分隔,而不能用逗号分隔。
global 变量名
调用格式:
例
例
一般大写字母
在matlab中,函数内部定义的变量除特殊声明外均为局部变量。如果需要使用全局变量,则应当使用命令global定义,而且在任何使用该全局变量的函数中都应加以定义,在命令窗口中也不例外。
36
2016年3月28日4时6分
37
一个M文件可含多个函数,第一个主函数,其它子函数;
主函数必须在最前面,子函数次序可随意调整;
子函数仅被主函数或同一文件其它子函数所调用;
私有函数是主函数的一种,只在限定函数群可见,一般放在private命名子目录中。它只对父目录中函数可见。
3.3.3 主函数与子函数
function c=test(a,b) %主函数
c=test1(a,b)*test2(a,b);
end
function c=test1(a,b) %子函数1
c=a+b;
end
function c=test2(a,b) %子函数2
c=a-b;
end
子函数则只能在主函数文件中编辑
例
例
主函数和子函数
function [ ]=homework
%problem 1
x=-3:3;
disp('problem 1')
disp('the squares of the input values are listed below')
y=square(x);
disp(y)
%problem 2
r1=0.5;
r2=0.25;
disp('problem 2')
disp('the cold work is')
cold_work(r1,r2)
%problem 3
m=[1,2,3];
g=9.8;
dz=5;
disp('problem 3')
disp('the change in potential energy is')
potential_energy(m,g,dz)
function result=square(x)
result=x.^2;
function result=cold_work(r1,r2)
result=(r1.^2-r2.^2)/ r1.^2;
function result=potential_energy(m,g,dz)
result=m.*g.*dz;
例
例
3.3.4 函数句柄和匿名函数
两种创建句柄:
>>class(hd)
ans =function_handle
hfun=str2func(‘fun’)
>> hfun=@fun
携带函数路径的函数,反复调用方便,像变量调用。
函数句柄:
hfun=@+函数名
>> hfun=str2func(‘fun’)
function fv=fun(x)
fv=x-10.^x+2;
end
40
函数句柄调用:
[y1, y2, ..] = feval(fhandle, x1, ..., xn)
>> feval(hfun,3) ans =46.0977
[y1, y2, ..] = hfun( x1, ..., xn)
直接调用:
>> hfun(3) ans =46.0977
feval间接调用:
调用函数文件一样
执行由串指定的函数
匿名函数
以@符号开头;
expression为函数体;
xlist为输入参数列表
f= @ (xlist)expression
简单形式,不要求M文件,
在命令窗口或者M文件中定义。
只含表达式、任意多输入和输出变量。
特点:
格式:
ff=@(x)sin(x) >> ff(2) >> feval(ff,2)
yyy=@(x)sin(x).*log(x)
42
顺序结构
3.4.1 条件(选择)结构
3.4.2 循环结构
3.4.3 try-catch结构
3.4.4 其它指令
3.4
程序控制结构
3.4.1 条件(选择)结构
if 语句
switch 语句
条件结构:根据给定条件成立与否,执行不同语句。
条件结构的语句:
(1) 单分支结构
if expression (条件表达式:关系和逻辑)
statements (语句组A)
end
1. if 条件语句
if expression (条件)
statements1(语句组A)
else
statements2(语句组B)
end
(2) 双分支结构
x=input('请输入x的值:');
if x<=0
y=(x+sqrt(pi))/exp(2);
else
y=log(x+sqrt(1+x*x))/2;
end
fprintf('y=%e',y)
例
例
计算分段函数值
if expression1 (条件1)
statements1(语句组1)
elseif expression2 (条件2)
statements2(语句组2)
... ...
elseif expressionm (条件n)
statementsm(语句组n)
else
statements(语句组n+1)
end
(3) 多分支结构
根据评分原则:大于等于90分为A,大于等于80分为B,大于等于70分为D,大于等于60分为C,小于60分不合格E
例
例
function result=grade(x)
if x>=90
result='A';
elseif x>=80
result='B';
elseif x>=70
result='C';
elseif x>=60
result='D';
else
result='E';
end
A=input('A=');
B=input('B=');
if A>B
'greater'
elseif A
=90
result='A';
elseif x>=80
result='B';
elseif x>=70
result='C';
elseif x>=60
result='D';
else
result='E';
end
function result=grade(per)
k=floor(per/10)
switch k
case {9,10}
result='A';
case 8
result='B';
case 7
result='C';
case 6
result='D';
otherwise
result='E';
end
per=input('输入成绩')
k=floor(per/10)
switch k
case {9,10}
disp('A')
case 8
disp('B')
case 7
disp('C')
case 6
disp('D')
otherwise
disp('E')
end
第二种方法
循环结构:按照给定的条件,重复执行指定的语句。
循环结构的语句:
3.4.2 循环结构
for 语句 while 语句
for variable=expression(循环变量)
statement(循环体)
end
1. for 循环
for 循环变量=初始值:步长:终止值
循环体语句
end
=<循环次数设定>
y=0; n=100;
for k=1:n
y=y+1/(2*k-1);
end
y
当 n=100 时,求 y 的值
n=100;
i=1:2:2*n-1
x=1./i
y=sum(x)
y
无循环
采用循环语句会降低其执行速度,所以程序通常由下面的程序来代替:
n=100;
y=sum(1./(1:2:2*n-1));
y
例
例
for m=100:999
m1=fix(m/100); %求m的百位数字
m2=rem(fix(m/10),10); %求m的十位数字
m3=rem(m,10); %求m的个位数字
if m==m1*m1*m1+m2*m2*m2+m3*m3*m3
disp(m)
end
end
一个三位整数各位数字的立方和等于该数本身则称该数为水仙花数。输出全部水仙花数。
例
例
Fix向零取证
Rem除法求余
function H=hilbn(n)
for i = 1:n
for j = n:-1:1
H(i, j) = 1/(i+j-1);
end
end
H
建立Hilbter函数
2. 循环的嵌套
function H=myhilb (n)
for i = 1:n
for j =1:n
H(i,j)=1/(i+j-1);
end
end
例
例
为得到最大速度,在For (while)循环被执行之前,应预先分配数组.建议使用zeros或ones等命令预先分配所需内存(即矩阵大小)
x=zeros(1,10);
for n=1:10
x(n)=sin(n*pi/10);
end
x
例
x = rand(1,50000); %随机投币50000次
sum=0;k1=0;a=zeros (1,50000);b= zeros (1,50000); %赋予初始值占位,
for (i=1:50000) sum=sum+1; %投币次数累计值
if x(i) > 0.5 %投币正面概率> 0.5
k1=k1+1; %投币正面次数累计值
end
a(i)=k1; %投币正面次数累计值
b(i)=sum; %投币次数累计值
end
f1=a./b; %正面概率
figure(1)
plot(b,f1),title('出现正面的频率变化曲线')
figure(2)
plot(b,1-f1),title('出现反面的频率变化曲线')
k1%正面次数,k2=sum-k1 %反面次数
f1=k1/sum %正面频率,f2=1-f1 %反面频率
例
投掷硬币实验
3. while 循环
while expression (条件<逻辑变量>)
statement(循环体)
end
n = 0;
while 2^n < 100
s= 2^n;
n = n + 1 ;
end
s
n
求n为多少时,2^n>100,其值多少
例
例
2016年3月28日4时6分
64
for适用已知到循环次数,而不知循环运算目标;
while适用已知循环运算目标,而循环次数未知;
为了提高代码的运行效率,避免 for 循环的使用;
4.for和while循环语句区别
2016年3月28日4时6分
65
计算级数:S=1+2+22+23+···+263=
s=0;
i=0;
while i<64
s=s+2^i;
i=i+1;
end
s
i
s=0;
i=0;
for i=1:63
s=s+2^i;
i=i+1;
end
s
i
1
2
例
例
从键盘输入若干个数,当输入0时结束输入,求这些数的平均值和它们之和。
sum=0;
cnt=0;
val=input('Enter a number (end in 0):');
while val~=0
sum=sum+val;
cnt=cnt+1;
val=input('Enter a number (end in 0):');
end
if cnt > 0
sum
mean=sum/cnt
end
例
例
try
语句组1
catch
语句组2
end
lasterr %显示出错原因
3.4.3 try-catch语句
Try
检测程序代码是否出错;
先试探语句组1,如出现错误,则将错误信息赋给lasterr保留;
并转去执行语句组2。
语句格式
矩阵乘法运算要求两矩阵维数相容,否则会出错。先求两矩阵的乘积,若出错,则自动转去求两矩阵的点乘。
A=[1,2,3;4,5,6]; B=[7,8,9;10,11,12];
try
C=A*B;
catch
C=A.*B;
end
C
lasterr %显示出错原因
例
例
程序设计常遇到提前终止循环、跳出子程序、显示出错信息等情况,主要有break、continue、 keyboard 、 return、pause、 echo、error等。
3.4.4 其它程序控制语句
69
1. break 和 continue
break和continue与循环结构for 和while相关语句,它们一般与if配合使用。
break 终止循环,即跳出最内层循环 ;
continue结束本次循环,进行下次循环.
continue当在循环体内执行到该语句时,程序将跳过循环体中所有剩下的语句,继续下一次循环。
70
求[100,1000]之间第一个能被21整除的整数。
for n=100:1000
if rem(n,21)~=0
continue
end
break
end
n
例
例
Rem除法求余
停止运行,控制权给键盘,命令窗口“>>”变成“K>>”;。
对程序调试和程序运行中修改都很方便。
function abcdek(a,b)
c=a+b;
keyboard
d=a*b
e=a/b
end
function abcdef(a,b)
c=a+b;
d=a*b
return
e=a/b*d
2. keyboard
3. return
abcdek(4,2)
K>> a=2
a = 2
K>> return
d = 4
e = 1
例
例
输入return后,控制权将交回文件
function abcde(a,b)
c=a+b;
d=a*b
e=a/b
end
72
4. 程序的暂停 pause
pause 或 pause(n)
若想强行终止程序的运行,可以使用 Ctrl+c
n 是延迟时间,以秒为单位;
缺省,将暂停程序,直到用户按任意键后继续
pause off 屏蔽程序中所有 pause 的作用
pause on 打开 pause 的作用
function abcdp (a,b)
c=a+b
d=sin(c)
pause
e=log(d)
function abcd (a,b)
c=a+b
d=sin(c)
e=log(d)
>> abcd(3,4)
c = 7
d = 0.6570
任意键
e = -0.4201
例
例
5. echo
在命令窗口显示执行过程的M文件的命令
执行M文件时,通常在命令窗口是看不到执行过程的,但在特殊情况下(比如演示)要求M文件的每条命令都要显示出来。这时可以用echo命令实现这样的功能。
75
>> echo on
>> ed
for n=100:1000
if rem(n,21)~=0
continue
if rem(n,21)~=0
continue
if rem(n,21)~=0
continue
if rem(n,21)~=0
continue
if rem(n,21)~=0
continue
if rem(n,21)~=0
end
break
end
n
n = 105
>> echo abcd on
>> abcd(3,4)
c=a+b;
d=sin(c);
e=log(d)
e = -0.4201
function abcd (a,b)
c=a+b
d=sin(c)
e=log(d)
for n=100:1000
if rem(n,21)~=0
continue
end
break
end
n
保存为ed
例
例
6. error
function abcd (a,b)
c=a+b
d=sin(c)
cc
e=log(d)
>> abcd(3,4)
c = 7
d = 0.6570
??? Undefined function or variable 'cc'.
Error in ==> abcd at 4
cc
显示指定的出错信息并终止当前程序运行
Error(‘message’)
类似warning,区别warning显示指定警告还运行
例
例
77
3.5 程序调试
M文件错误种类:
语法错误:函数参数输入类型,括号,矩阵运算
运算错误 :运行过程中死机或溢出,与程序本身有关。
M文件设计应避免情况:Inf,nan或空矩阵
避免方法:可能异常地方提供识别语句,
识别语句:isinf, innan, isempty
在编译和运行程序时出现错误(警告)无法避免,因此掌握程序调试的方法和技巧针对语法错误和运算错误调试,对提高工作效率很重要。
2016/3/28
78
设置断点
利用它来指定程序代码的断点,使得程序在断点前停止执行,并进入调试模式,从而可以检查当前各个变量的值。
dbstop in mfile
文件名为mfile的M文件的第一个可执行语句前设置断点。
dbstop in mfile at lineno
mfile的M文件的第lineno行设置断点。如果第lineno行为非执行语句,则在其后的第一个可执行语句前设置断点。
dbstop in mfile at subfun
mfile的M文件子程序subfun第一个执行语句前设置断点。
dbstop if error
遇到错误时,自动设置断点。不包括try…catch之间的错误。
dbstop if all error
遇到错误时,自动设置断点。包括try…catch之间的错误。
dbstop if warning
遇到警告时,自动设置断点
dbstop if caught error
try…catch间代码遇到错误时,自动设置断点。
dbstop if naninf 或 dbstop if infnan
当程序运行遇到无穷值或者非数值时,自动设置断点。
dbtype显示行号的M文件文本
dbstatus显示断点信息
dbcont 继续执行 到程序结束,或者下个断点
dbstep将从断点处继续执行M文件
dbclear in mfile清除断点
dbquit 退出调试状态
其它调用函数
2016/3/28
82
function y=t (x)
l=length(x);
y={1:l}+x
使用命令调试程序:
83
在命令窗口输入dbstop in function8,打开function8.m,可见在第一个可执行语句前设置断点。
单击图中红点,会发现红点被取消,此时回复到初始状态。然后在命令窗口依次输入dbstop if error和test(magic(3)),可得到如下的运行结果和如下图所示的界面。