MATLAB第6章 M文件程序设计基础
MATLAB-程序设计基础
函数变量
nargin 函数输入变量的个数
例:编制函数test1实现如下功能:如果只提供一个输入变量, 则求该输入变量的模,如果有两个输入变量则求它们的和。 function c=test1(a,bseif (nargin==2) c=a+b; end
例1(见前例): mysum=0; v=1:100; for i=v;mysum=mysum+i;end mysum 例2: x=[]; for i='Hello', x=[i x]; end, x
while循环 while 逻辑变量 循环体语句组 end
例(见前例): mysum=0;i=1; while (i<=100) mysum=mysum+i; i=i+1; end mysum
变量作用域
函数内部定义的变量均为局部变量,如果需 要使用全局变量,则应当使用命令global定义, 并且在任何使用该全局变量的函数中都应加 以定义。 定义全局变量时,变量之间必须用空格分隔, 不能以逗号分隔。
function [num1,num2,num3]=test3(varargin) global firstlevel secondlevel ?global firstlevel secondlevel num1=0;num2=0;num3=0; ?firstlevel=85; list=zeros(nargin); ?secondlevel=75; ?[a,b,c]=test3([90,89,60],[79,89,60],[99,98,100]) for i=1:nargin list(i)=sum(varargin{i}(:)); a= list(i)=list(i)/length(varargin{i}); 1 if list(i)>firstlevel num1=num1+1; elseif list(i)>secondlevel b= num2=num2+1; 2 else num3=num3+1; end c= end
MATLAB-程序设计-M文件建立
1、先建立函数M文件fun2.m来定义函数f(x) function f=fun2(x) 1 else if x<=0
f=x^3 else
f=2*x end end
2、再在MATLAB命令窗口输入fun2(2),fun2(0.5), fun2(-1)即可.
MATLAB入门
程序设计
M文件
MATLAB的内部函数是有限的,有时为了研究 某一个函数的各种性态,需要为MATLAB定义新函 数,为此必须编写函数文件. 函数文件是文件名后 缀为M的文件,这类文件的第一行必须是一特殊字 符function开始,格式为:
function 因变量名=函数名(自变量名) 函数值的获得必须通过具体的运算实现,并赋 给因变量.
2x x 1
1、编写函数M文件 function f=fun1(x) if x>1
f=x^2+1 end if x<=1
f=2*x end
2、在MATLAB命令窗口输入fun1(2),fun1(-1)即可.
2) 有两个选择的一般形式是: if (expression1) {commands1} else {commands2} end
例: 设银行年利率为11.25%.将10000元钱存入银行, 问多长时间会连本带利翻一番?
money=10000; years=0; while money<20000
years=years+1; money=money*(1+11.25/100); end years money
运行结果:
years =7 money = 2.1091e+004
3. if-else-end结构
(1)有一个选择的一般形式是: if (expression) {commands} end
m文件程序设计
m⽂件程序设计⼀、实验⽬的1. 通过练习理解matlab编程⽅法;2. 掌握分⽀结构程序设计思路;3. 掌握循环结构程序设计思路。
⼆、实验环境1. 计算机2. matlab7.x三、实验说明1. 熟悉matlab7.x运⾏环境,正确操作,认真观察;2. 实验学时:2学时;3. 学会使⽤help;4. 编写程序前先写出程序的流程图框架;5. ⾃主编写调试程序直到正确为⽌,必要时参考相关资料,;6. 保存整理实验结果,提交实验报告。
四、实验内容1. 输⼊⼀个百分制成绩,要求输出成绩等级为:A、B、C、D、E,其中90-100为A;80-89为B;70-79为C;60-69为D;60以下为E1)⽤if或switch语句实现;2)输⼊百分制成绩后要判断成绩的合理性,对不合理的成绩要输出出错信息提⽰,⽐如:输⼊成绩不能⼤于100。
3)程序保存名为sy3加上本⼈学号2.某公司员⼯的⼯资计算⽅法如下:(1)⼯作时数超过120⼩时者,超过部分加发15%;(2)⼯作时数低于60⼩时者,扣发700元;(3)其余按每⼩时84元计发。
编程按输⼊的⼯号和该员⼯的⼯时数,计算应发⼯资。
3. 根据求的近似值。
当n分别取100、1000、10000时,结果是多少?要求:分别⽤循环结构和向量运算(使⽤sum函数)来实现。
五、实验程序及结果1、程序:m=input('请输⼊⼀个数值:');n=floor(m/10);switch ncase 9disp('A');case 8disp('B');case 7disp('C');case 6disp('D');case {1,2,3,4,5}disp('E');otherwisedisp('输⼊错误!');end2、程序:x=input('请输⼊⼯号:');y=input('请输⼊⼯作时:');if y>120a=84*120+(y-120)*84*0.15;disp(['本⽉⼯资为:',num2str(a)]); elseif y<60b=84*y-700;disp(['本⽉⼯资为:',num2str(b)]); elsec=84*y;disp(['本⽉⼯资为:',num2str(c)]); end3、程序:y=0;n=input('输⼊⼀个数:');for i=1:ny=y+1/i/i;enda=sqrt(6*y);disp(['圆周率近似值为:',num2str(a)]);。
第二讲MATLAB的程序设计和M文件
第二讲MATLAB的程序设计和M文件在MATLAB中,程序设计主要是通过编写和运行M文件来实现。
M文件是MATLAB的主要代码文件,用于实现不同功能的程序,可以包含变量定义、算法实现、函数调用和图形绘制等。
下面将介绍MATLAB的程序设计和M文件的基本知识。
MATLAB的程序设计主要包括如下几个方面:1.变量和数据类型:在M文件中,可以使用不同的变量类型存储数据,如整型、浮点型、字符型等。
不同的变量类型在MATLAB中有不同的表示方法和功能。
2.运算和表达式:在M文件中,可以使用常见的数学运算符(如加减乘除、指数等)进行计算。
同时,也可以使用逻辑运算符(如与、或、非等)进行逻辑运算。
3. 条件语句:在M文件中,可以使用条件语句实现根据不同的条件执行不同的操作。
MATLAB中的条件语句主要有if语句和switch语句,通过判断条件的真假来决定执行路径。
4. 循环语句:在M文件中,可以使用循环语句实现对一段代码的重复执行。
MATLAB中的循环语句主要有for循环、while循环和do-while循环。
5.函数的定义和调用:在M文件中,可以通过定义函数来实现特定功能的封装。
函数可以包含输入参数和输出参数,通过参数的传递来实现数据的交互和函数的调用。
1.M文件的命名和保存:M文件的命名应该具有描述性,以体现文件中代码的功能。
M文件的保存格式是以.m为文件扩展名。
2.M文件的结构:在M文件中,一般会包含变量定义、函数定义和主程序等部分。
变量定义部分用于声明和初始化变量,函数定义部分用于定义自定义函数,而主程序部分用于调用函数和执行主要功能。
3.代码注释:为了提高代码的可读性和可维护性,需要在M文件中添加注释。
注释可以用于解释代码的目的和思路,以及描述变量、函数和算法等的作用和实现方法。
4.代码风格:为了代码的一致性和可读性,需要遵循一定的代码风格规范。
例如,可以在操作符周围留有空格,使用一致的缩进和命名规则,避免使用不必要的缩写等。
第6章 MATLAB程序设计
循环结构
在MATLAB中,包含两种循环结构 循环次数不确定的while循环 循环次数确定的for循环
循环结构(续)
打开方式
MATLAB提供了meditor编辑器编辑M文件 在MATLAB命令行窗口中键入指令edit,则可启动
meditor编辑器 >> edit
打开方式
通过“File”菜单中的“New”子菜单下的“M-file”命令
来启 动meditor编辑器
直接单击 MATLAB用户界面工具栏上的新建按钮
概述(续)
M文件有两类
独立的M文件 —— 脚本(Scripts) 可调用M文件 —— 函数(Functions)
概述(续)
MATLAB通过M语言来实现完整的编写应用程序的能力 M语言 M语言是一种解释性语言,利用该语言编写的代码
仅能被MATLAB接受,被MATLAB解释、执行。 M语言文件可以分为脚本文件和函数文件 一个M语言文件就是由若干MATLAB的命令组合在一 起构成的。 M语言文件是标准的纯文本格式的文件,其文件扩 展名为.m。 使用M文件可以将一组MATLAB命令组合起来,通过 一个简单的指令就可以执行这些命令。
来启动meditor编辑器
2.打开已有的M文件
打开已有的M文件,也有3种方法: (1) 菜单操作。从MATLAB主窗口的File菜单中选 择Open命令,则屏幕出现Open对话框,在Open对 话框中选中所需打开的M文件。在文档窗口可以对 打开的M文件进行编辑修改,编辑完成后,将M文 件存盘。 (2) 命令操作。在MATLAB命令窗口输入命令: edit 文件名,则打开指定的M文件。 (3) 命令按钮操作。单击MATLAB主窗口工具栏 上的Open File命令按钮,再从弹出的对话框中选 择所需打开的M文件。
matlab编程简明教程
>> isfinite(5) >> isinf(5)
14
运算优先级
括号 幂,点幂 正号,负号,逻辑非 乘,除,点乘,点除 加,减 冒号运算 关系运算
& | && ||
高
低
15
本讲主要内容
M 文件 Matlab 编程基础
算术运算、关系运算、逻辑运算 控制结构:
顺序结构:数据输入输出(input、disp、fprintf 等) 选择结构:if 语句、switch 语句 循环结构:for 循环、while 循环
\n ( 换行 ) \t ( 制表符 ) \b ( 退格 ) \\ ( 反斜杆 ) %% ( 百分号 )
20
fprintf
例: >> a='Hello';
>> b=2.4; >> c=100*pi; >> fprintf('a=%s, b=%f, c=%e\n',a,b,c)
format 中的格式字符串要与输出变量一一对应
1
0
1
1
0
1
0
0
在 Matlab 中,0 表示 “假”,非零表示 “真”
12
逻辑运算
逻辑运算函数:all、any
any(x)
如果向量 X 中存在非零元素,则返回 1, 否则返回 0
all(x)
如果向量 X 中所有元素都非零,则返回 1, 否则返回 0
若 x 为矩阵,则 any 和 all 按列运算, 返回一个 0-1 向量
y=a+1; elseif n==1
y=a*(1+n); elseif n==2
MATLAB程序设计 第6章 回归分析和方差分析
参数估计和假设检验
(1)区间估计 ❖例:有一大批糖果,现从中随机地取16袋,称得质量(单位:g)如下: 506 508 499 503 504 510 497 512 514 505 493 496 506 502 509 496
参数估计和假设检验
❖计算的MATLAB程序如下:
x0 = [506 508 499 503 504 510 497 512 514 505 493 496 506 502 509 496]; x0 = x0( : ); alpha = 0.05; mu = mean( x0); sig = std( x0 ); n =length(x0 ); t =[mu -sig/sqrt(n)*tinv(1-alpha /2,n-1),mu+ sig/sqrt(n)*tinv(1 -alpha/2,n-1)]; %以下命令ttest的返回值ci就直接给出了置信区间估计 [h,p,ci] =ttest(x0, mu,0.05)%通过假设检验也可求得置信区间
记
多元线性回归
(2)参数估计 理论模型中的参数 β0 ,β1,…,βm用最小二乘法估计,即应选取估计值
, j=0,1,…,m 时,误差平方和达到最小。
,使当
令
得
整理化为正规方程组
多元线性回归
正规方程组的矩阵形式为
,
当矩阵 X列满秩时,XT X 为可逆方阵,
将 代回原模型得到 y 的估计值,
而这组数据的拟合值为,
非线性回归
非线性回归是指因变量 y对回归系数 β1 ,…, βm (而不是自变量)是非线性的。 MATLAB统计工具箱中的命令 nlinfit、nlparci、nlpredci、nlintool,不仅可以给出 拟合的回归系数及其置信 区间,而且可以给出预测值及其置信区间等。
MATLAB程序设计与应用-第六章
打开空白模型窗口按住鼠标左键不放并移动鼠标至目标模型窗口指定位置按住Ctrl键不放同时鼠标左键单击某个线路,可以增加一个分支双击该模块,弹出参数设置窗口参数设置好后,适当拉大传递函数模块,可看到公式。
[说明]模块的修改、调整、连接通常只能在仿真模型窗口中进行,不要直接对模块库中的模块进行修改或调整。
也可直接点击模型窗口中的(或)启动(或停止)双击示波器,并按Start按钮,可看到仿真结果6.2 模块库介绍:一、Sources库1、Sine Wave :产生幅值、频率可设置的正弦波信号。
双击图标(认定该模块已拷贝到用户模型窗,以下均如此),弹出正弦波的参数设置框图。
图中参数为Simulink默认值,用户可根据需要对这些参数重新设置Amplitude:幅度Bias:Y轴上的位移,取正值向上移Frequency:频率Phase:X轴上的位移,取正值向左移Sample time:采样间隔6.2 模块库介绍一、Sources库1、Sine Wave :例:y=4*sin(2*x-1.57)+1参数设置如下:Amplitude:4Bias:1Frequency:2Phase:-1.57Sample time:06.2 模块库介绍:一、Sources库2、Step:产生幅值、阶跃时间可设置的阶跃信号双击图标,弹出阶跃信号的参数设置框图。
图中参数为Simulink默认值Step time:阶跃时间Initial value:初始值Final value:最终值Sample time:采样间隔显示在仿真过程产生的信号波形。
X-Y、轴向变焦取当前窗中信号最大、最小值为纵坐标的上下限把当前轴的设置保存为该示波器的缺省设置器设置波器示波器属性对话框示波器属性对话框General页示波器属性对话框Data history页xy当X、Y分别为正、余弦信号时,其显示图形如图:库如图为输入斜坡信号时微分环节的输出库函数积分环节6.2 模块库介绍四、Math 库该库包含描述一般数学函数的模块该库中模块的功能就是将输入信号按照模块所描述的数学运算函数计算,并把运算结果作为输出信号输出。
MATLAB基础(M文件、流程控制)
5.2.3 函数注意
MATLAB 以搜寻脚本文件的同样方式搜寻函数M 文 件。例如,输入»cow ,MATLAB 首先认为cow 是一 个变量。如果它不是,那么MATLAB 认为它是一个内 置函数。如果还不是,MATLAB 检查当前cow.m 的目 录或文件夹。如果它不存在,MATLAB 就检查cow.m 在MATLAB 搜寻路径上的所有目录或文件夹。 从函数M 文件内可以调用脚本文件。在这种情况下, 脚本文件查看函数工作空间,不查看MATLAB 工作空 间。从函数M 文件内调用的脚本文件不必用调用函数 编译到内存。函数每调用一次,它们就被打开和解释。 因此,从函数M 文件内调用脚本文件减慢了函数的执 行。
《信号与线性系统分 析》——Matlab基础
15/18
6.2 while循环
与for循环以固定的次数求一组指令相反, while循环以不定的次数求一组语句的值。 While循环的一般形式为:
while expression commonds end
只要表达式expression里的所有元素为真, 就执行命令串commands。通常表达式求值 给一个标量值,单数组值也同样有效。
《信号与线性系统分 析》——Matlab基础 5/18
5.2.2 参数传递
MATLAB函数的输入输出数目都可以变化,通过这个 特性,可以实现一些自定义的功能。函数的输入输出 参数数目可以通过变量nargin和nargout获得。函数调 用中可以使用少于规定的输入输出参数数目,但是不 能更多。 在MATLAB中,参数具有自己的专有工作空间。函数 中的参数和命令行参数不在一个空间中,它们的唯一 联系为函数的输入输出变量。输入参数在函数中是可 读的,但任何改动不会传递回上一级空间。 使用global命令可以将变量说明为全局的,则在函数、 命令行等都可以共享这些变量。在实际应用中,应当 尽量避免使用全局变量。
MATLAB基础与编程入门(第二版)(张威)-第6章
第6章 图 形 基 础
并且可以在MATLAB命令行窗体中看到: >> plot(prices1, 'DisplayName', 'prices1',
'YDataSource', 'prices1'); figure(gcf) 其实这条指令就是绘制变量的MATLAB命令。 如果选择其他指令,例如选择hist,则得到的可视化结
第6章 图 形 基 础 6.2 交 互 式 绘 图
6.2.1 基本绘图 如前所述,实现数据可视化是需要有相应的步骤的,其中
的第一步骤就是准备绘制的数据。绘制的数据可以用MATLAB 的工具将必要的数据导入到MATLAB工作空间。也就是说,能 够进行可视化的数据实质都是保存在MATLAB工作空间中的变 量。本节将在MATLAB命令行窗体中键入下面的指令来创建用 户可视化的数据。
第6章 图 形 基 础
MATLAB的图形窗体主要包括如下几个部分: ·菜单栏:MATLAB的图形窗体一般包括一个菜单栏,利用 这个菜单栏可以完成对窗体中各种对象的基本操作,例如图形 的打印导出等。
·工具栏:图形窗体的工具栏用来完成对图形对象的一 般性操作,例如新建、打开、保存和打印,图形的旋转、缩放 等,还有对图形窗体的一些编辑操作也可以通过该工具栏完成。 具体操作将在后续的实例中依次介绍。
第6章 图 形 基 础
>> randn('state',27) >> startprice = 50; >> fracreturns1 = .0015*randn(200,1)+.0003; >> x = [startprice; 1+fracreturns]; >> prices1 = cumprod(x); >> t = (1:length(prices1))'; >> randn('state',7) >> fracreturns2 = .0015*randn(200,1)+.0003; >> x = [startprice; 1+fracreturns]; >> prices2 = cumprod(x);
《MATLAB程序设计教程(第二版)》第6章__MATLAB解方程与最优化问题求解
6.1.2 迭代解法 迭代解法非常适合求解大型系数矩阵的方程组。在数 值分析中,迭代解法主要包括 Jacobi迭代法、 Gauss-Serdel迭代法、超松弛迭代法和两步迭代法。
1.Jacobi迭代法 对于线性方程组Ax=b,如果A为非奇异方阵,即 aii≠0(i=1,2,…,n),则可将A分解为A=D-L-U,其中 D为对角阵,其元素为A的对角元素,L与U为A的 下三角阵和上三角阵,于是Ax=b化为: x=D-1(L+U)x+D-1b 与之对应的迭代公式为: x(k+1)=D-1(L+U)x(k)+D-1b 这就是Jacobi迭代公式。如果序列{x(k+1)}收敛于x, 则x必是方程Ax=b的解。
(3) Cholesky分解 如果矩阵X是对称正定的,则Cholesky分解将矩阵X分 解成一个下三角矩阵和上三角矩阵的乘积。设上三 角矩阵为R,则下三角矩阵为其转置,即X=R'R。
MATLAB函数chol(X)用于对矩阵X进行Cholesky分解, 其调用格式为: R=chol(X):产生一个上三角阵R,使R'R=X。若X为非 对称正定,则输出一个出错信息。 [R,p]=chol(X):这个命令格式将不输出出错信息。当X 为对称正定的,则p=0,R与上述格式得到的结果相 同;否则p为一个正整数。如果X为满秩矩阵,则R 为一个阶数为q=p-1的上三角阵,且满足 R'R=X(1:q,1:q)。 实现Cholesky分解后,线性方程组Ax=b变成R‘Rx=b, 所以x=R\(R’\b)。
Gauss-Serdel迭代法的MATLAB函数文件gauseidel.m 如下:
function [y,n]=gauseidel(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的上三角阵 G=(D-L)\U; f=(D-L)\b; y=G*x0+f; n=1; %迭代次数 while norm(y-x0)>=eps x0=y; y=G*x0+f; n=n+1; end
matlab基础教程教学课件杨德平第6章程序设计
end 说明 每当循环变量variable取expression中的一个值时,就执行循环体 statements一次,直到取完expression中的值。expression常用数组形成 表示。
【例6-4】编写求100!的程序,利用公式k!=(k-1)!×k。 s=1; for k=1:100 s=s*k; end s 运行结果如下: s= 9.3326e+157
表6-3 各种运算符优先级排序
优先级 最高
最低
运算符 ()小括号 ’转置 .^ 数组乘方 ^ 矩阵乘方 逻辑非(not,~) .* 点乘 ./点除 乘法 除法 加减法 冒号 关系操作符(==,~=,>,>=,<,<=) 逻辑与(and,&) 逻辑或、逻辑异或6(/1or,xor,|)
首页
6.2. 顺序语句
and(a,b)
| 或(or)
or(a,b)
6/1
~ 非(not)
not(a,b)
异或(xor)
xor(a,b) 首页
尚 辅 网 shangfuwang
逻辑操作运算法则如下: (1)a&b或and(a,b):表示a和b作“逻辑与”运算,当a和b全为非零时,运算 结果为1,否则为0; (2)a|b或or(a,b):表示a和b作“逻辑或”运算,当a和b只要有一个非零,运 算结果为1,否则为0; (3)~a或not(a):表示对a作“逻辑非”运算,当a是零时,运算结果为1,否 则为0; (4)xor(a,b):表示a和b作“逻辑异或”运算,当a和b的值一个为零,一个不 为零时运算结果为1,否则为0。
例如,判断当a为偶数时,显示a是偶数,并计算a/2;否则不作任何处理。 If rem(a,2)==0 disp('a is even') b=a/2; end
程序设计M文件ppt课件
>> [a,b,c]=test2([90,89,60],[79,89,66],[99,98,100])
a= 89.3333
b= 32.6667
c= 33.3333
思考:如果多个学生的成绩是同一科目的成绩放在一个数组中,如何修改 test2函数。
• for语句
for循环语句是流程控制语句中的基础,使用该循环语句可以以 指定的次数重复执行循环体内的语句。 for循环语句的调用形式:
for 循环控制变量=<循环次数设定>(可以是已定义的向 量,也可在for循环语句中定义)
循环体 end
回到本章目录
for i = 1:4
% 初始值:步长:终值(步长默认为1)
回到本章目录
函数input的另一种调用格式: var=input(‘提示性语句’,’s’)
以该格式调用时,input函数将视用户键盘输入的一切字符 为字符型赋予变量var,而不对其进行任何计算。在提示型 语句中可以用“\n”来控制显示时的换行。例如:
第一种调用格式:
>> a=input('input example\n') input example 1+4 a=
break语句:当程序流程运行至该命令时,则不论循环控制变 量是否满足循环判断语句,均将退出当前循环,执行循环后 的其他语句。
continue命令:当程序流程运行至该命令时,会忽视其后的循 环体操作转而执行下一层的循环。
回到本章目录
63
2n
例. 计算级数:S=1+2+22+23+···+263= n 0
Matlab中M-文件介绍
02
03
运行M-文件
查看运行结果
在Matlab命令窗口中输入文件名, 然后按Enter键,即可打开指定 的M-文件。
在打开的M-文件中,按下F5键 或选择"Run"菜单中的"Run"选项, 即可运行当前M-文件。
M-文件的运行结果将在Matlab 命令窗口中显示。
调试M-文件
设置断点
在需要调试的代码行左侧单击,即可 在该行设置断点。
调试技巧
使用Matlab调试器
Matlab提供了一个功能强大的调试器,可以帮 助用户更好地理解代码的执行过程。
逐步执行代码
逐步执行代码可以帮助用户更好地理解代码的 逻辑和执行过程。
检查变量值
在调试过程中,检查变量的值可以帮助用户更好地理解代码的逻辑和执行过程。
5
M-文件的高级应用
函数封装
函数封装
开始调试
在设置断点的代码行上按下F10键或 选择"Debug"菜单中的"Step Over" 选项,即可开始调试。
单步执行
在调试过程中,按下F10键或选择 "Debug"菜单中的"Step Over"选项, 可以逐行执行代码。
观察变量值
在调试过程中,可以随时查看变量的 值,以便更好地理解代码的执行过程。
信号处理和图像处理
Matlab具有强大的信号处理和 图像处理工具箱,广泛应用于 通信、雷达和医学成像等领域
。
02
M-文件基础
M-文件的定义
总结词
M-文件是Matlab中用于编写和存储Matlab代码的文件。
详细描述
M-文件是Matlab中用于编写和存储Matlab代码的文件,通常以.m为扩展名。 它可以是脚本文件或函数文件,用于执行一系列Matlab命令或定义可重复使用 的函数。
第6章 MATLAB程序设计
如果用户调用toc时不指定输出参数t, 例如: >> tic >> toc elapsed_time = 4.0160 函数在命令窗口显示函数工作空间变量 elapsed_time 的值,但在MATLAB命令工作空间里不给输出参数t赋任 何值,也不创建变量t。
如果如果用户调用toc时指定输出参数t,例如: >> tic >> out=toc out = 2.8140 则以变量out的形式返回到命令窗口,并在 MATLAB命令工作空间里创建变量out。
function y = linspace(d1, d2, n) %LINSPACE Linearly spaced vector. if nargin == 2 n = 100; end n = double(n); y = [d1+(0:n-2)*(d2d1)/(floor(n)-1) d2];
function t=toc % TOC Read the stopwatch timer.
Global TICTOC If nargout<1 elapsed_time=etime(clock,TICTO C) else t=etime(clock,TICTOC); end
(8)全局变量可以为编程带来某些方便,但却破坏了函 数对变量的封装,所以在实际编程中,无论什么时候都应 尽量避免使用全局变量。如果一定要用全局变量,建议全 局变量名要长、采用大写字母,并有选择地以首次出现的 M文件的名字开头,使全局变量之间不必要的互作用减至 最小。 (9)MATLAB以搜寻脚本文件的同样方式搜寻函数文件。 例如,输入>>cow,MATLAB首先认为cow是一个变 量;如果它不是,那么MATLAB认为它是一个内置函数; 如果还不是,MATLAB检查当前cow.m的目录或文件夹; 如果仍然不是,MATLAB就检查cow.m在MATLAB搜 寻路径上的所有目录或文件夹。
MatlabM文件编程
% 子函数
局部变量和全局变量
局部变量:在M函数内部声明并使用的变量 只在本函数范围内有效 仅能在函数调用执行期间被使用,一旦函数结束运行,则 变量占用的内存空间自动释放,变量的数值也不存在了
运行局部变量的例子 >> local 函数中的变量 Name Size Bytes Class u 1x3 256 cell array x 2x2 32 double array y 2x2 32 double array z 1x6 12 char array Grand total is 31 elements using 332 bytes >> whos >>
输入输出参数(续)
运行例4-15 >> A=[1 2 3;4 5 6] A = 1 2 3 4 5 6 >> [a,s,r]=ourstats(A) a = 2.5000 3.5000 4.5000 s = r = >> a=ourstats(A,0.1) a = 2.5000 3.5000
4.5000
函数文件供主程序文件调用,必须指定函数名和
输入输出参数,并由主程序文件中语句序列给出 一系列操作,从而生成所需数据 函数文件格式一般包括以下部分: (1)函数定义行:表明该m文件包含一个函数, 且为其定义函数名、输入参数和输出参数 function y=mean(x) (2)帮助信息:处在文件中的第二行,应该反 映该m文件概括性信息 %求平均值
保留变量实例
function y=persistent_example(x) % PERSISTENT_EXAMPLE 保留变量使用示例 for i=1:x y=myfun; end function y=myfun % 子函数 % persistent关键字的使用 persistent count; % count记录函数调用的次数 if (isempty(count)) count=1; else count=count+1; end str=sprintf('第%d次调用该函数',count); disp(str); y=count;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数组
字符型 char 双精度 double 稀疏数据 sparce
数值型 numeric
单元数组 cell
结构数组 struct
存储型 storage(如:int8,unit8等)
MATLAB数据结构图
存储型是一个虚拟数据类型,包括:int8(8位整 型 ),uint8(8 无 符 号 整 型 ),int16(16 位 整 型 ),uint16(16 无 符 号 整 型 ),int32(32 位 整 型),uint32(32无符号整型) 最常用的数据类型是双精度类型和字符型。所有 的MATLAB计算都把数据当作双精度型处理 其他数据类型只在一些特殊条件下使用
第6章
M文件程序设计基础
第1节 M文件
MATLAB有两种工作模式:一种是在命令中 直接输入简单的命令,适于处理计算量不大的 问题;另一种是M文件的编程工作方式,可以 进行大量的重复性的计算和输入。
MATLAB 的 命 令 文 件 (script) 和 函 数 文 件 (function),是一个简单的ASCII 码标准文本 文件,扩展名为“.m”。
【例6-2】 建立函数文件,计算矢量中元素的平均值。
function y = average(x) % AVERAGE Mean of vector elements. % AVERAGE(X), where X is a vector, is the mean of vector. % Non-vector input results in an error. [m,n] = size(x); if (~((m == 1) | (n == 1)) | (m == 1 & n == 1)) error('Input must be a vector') end y = sum(x)/length(x); % Actual computation
二、函数文件 函数文件第 1 行为函数定义行 function [返回参数表]=函数名(输入参数列表) MATLAB以关键词function开头,把M文件定义 为一个函数文件,指出函数名、函数文件名、输 入参数和返回参数。 function y = subfun( t ) 函数名最好要和函数文 件名一致,通过函数文 if sum(t)>0 y=abc(t); 函数文件 件名调用函数 subfun.m else y=cba(t); 函数文件内部定义的函 End 数,通过函数名调用 function y=abc(t); 例:subfun.m
五、基本表达式(手写式)
常用格式
表达式 变量=表达式
书写规则
表达式由变量、运算符、函数名组成 按常规的优先级别从左至右执行 优先级别:指数运算最高,乘除运算次之, 加减运算级别最低 括号内的表达式优先运算
表达式末尾加“;”,系统将不显示计算结果, 提高运算速度,否则将逐条显示语句运算结果
a=‟This is a book‟ a(1) ; % T a(4) % s
中文字符串数组,每个“汉字符”为一个数组单元
例补4 A=‟这是一本书’
带引号字符的数组
例补5 B=‟This is a book”本”’
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1
7
subfun(-7:4) subfun(-1:4)
y=2*t; function y=cba(t) y=2*t;
函数文件的一般格式 函数定义行 function [返回参数表]=函数名(输入参数列表) •函数名一般要与函数文件名相同 •如果有多个输入参数,用逗号(,)分隔参数 •如果有多个返回参数,则用方括号([ ])括起来, 且参数之间以逗号(,)分隔 形如:function [xx,yy,zz]=meshgrid(x,y,z) H1行:可缺省,以%开头,主要包括大写体的函数名, 运用关键词简要的描述函数功能 在线函数帮助内容 可缺省,以%开头,祥细的内容说明,可以用help 函数名,查看。如:P189 help average 函数体,函数的核心部分
三、局部变量和全局变量
局部变量:函数体内部的变量,不能在函数 体以外使用 全局变量:在MATLAB的工作空间和所有 的函数体内都能使用的变量
函数文件对全局变量赋值之说明: global
尽量使用大写 尽可能避免使用全局变量,用函数的参 数来传递数值,可提高程序的灵活性
四、永久变量:系统预定义变量
一、
debug菜单
step 单步执行当前行 step in 深入函数
step out 跳出函数(例test_debug.m)
save & run 保存并运行 或 F5 Go until cursor 直接运行到光标所在的位置 exit debug mode 退出调试
二、breakpoint 断点设置
set/clear breakpoint 设置/清除断点 clear all breakpoint 清除所有断点 stop if warning 如有警告信息停止程序运行 stop if NaN or Inf 如现非数或无穷大就停止 程序运行
第3节 MATLAB 数据类型
1、数据结构
直接调用(文件名) 不能 文件名且带实参调用
内部 函数
可以编写和调用内部函 数
一、命令文件
其实就是一段命令的集合 产生的变量都是全局变量,可以用clear清除 运行此类文件前,须指定文件的位置 cd “盘符:\路径” “current directory”快捷键选择当前工作目录 步骤 打开已有文件:fileopen文件名(.m可省 略) 新建:filenew 进入编辑器:编辑m文件 保存:filesave文件名(.m可省略) 运行:debugrun 或 命令行键入M文件名
命令窗口调用:
Z=1:99 average(Z)
函数参数的传递
利用函数的输入、输出参数传递这一点,可以在较大 计算中灵活的处理数据。只要修改函数的传递参数, 而不影响程序整体。
同其他高级语言一样,函数可以调用自身,也就 是递归。 设置出口 例如求阶乘 条 件
function y=ff(n) if n= =1 y=1; return; else y=n*ff(n-1); return; end;
8位整型一般用于储存图像数据 存储型数组一般只用于内存的有效储存,可对这 些类型数组进行操作,但不能进行任何数据运算。 如果要运算则必须用double函数 把它转换为双精 度类型
2、字符串数组
所有字符串都用单引号括起来 字符串中每一个字符都是变量的一个元素 字符串中的字符以ASCII码形式储存并区分大小 写,用abs函数可以得到字符的ASCII码 常用字符串处理函数 建立字符串数组 直接赋值 例补3
求ASCII码:①将字符串转换为ASCII码值 abs(X):X为字符串数
另外,abs函数还可求②复数矩阵的模, ③实数的绝对值
多行字符串数组直接创建
AB=[S1;S2] 要求:S1和S2长度相同,以保证各行长度相等
例补9 length(a) length(A) ab=[a;A,„ ‟] %补2个空格 ab(1,1) ab(2,1) ab=[a;A] %出现错误因长度不同,不能组合
注意:汉字符在内存中占2个字节,英文字符 占1个字节;而在字符串数组中,每一个字 符占一个单位空间,不管它是汉字符还是 英文字符。
字符型转换函数
用字符串函数建立字符串数组
s=char(t1,t2,t3,…) s=str2mat(t1,t2,t3,…) s=strvcat(t1,t2,t3,…)
MATLAB允许一次返回多个结果(等 号“=”左边用[ ]括起来的变量列表,变 量之间用逗号分隔)
例补2:
[x,y,z]=peaks
plot3(x,y,z)
%返回三个量
第2节 M文件调试的主要功能
在运行MATLAB程序时,发现错误,系统会 提示错误的行位置及错误原因。对此,用户可以 “对症下药”。
该文本文件可以用任何文字处理软件对进编辑, 也可以用“type filename.m”形式在命令工作空间 打开 MATLAB是解释性编程语言,逐句解释运行程序 MATLAB的各种工具箱都是用M文件组成,除内 嵌(built-in)M文件以外,用户可以对其进行修改和扩 充,进行二次开发
M 文 件 编 辑 器 是 MATLAB 自 带 的 , 是 一 个 Windows 的 标 准 界 面 , 主 要 有 file,edit,view,debug,breakpoint和text等菜单栏,上机时 参考P17第一章第4节M文件编辑器
【例6-1】 建立命令文件,绘制花瓣图。
theta = -pi:0.01:pi; rho(1,:) = 2*sin(5*theta).^2; rho(2,:) = cos(10*theta).^3; rho(3,:) = sin(theta).^2; rho(4,:) = 5*cos(3.5*theta).^3; for k =1:4 % 循环控制 polar(theta ,rho(k,:)) % 绘制极坐标图 pause; %暂停 end
有两种形式,一种是命令文件(Script-file),另 一种是函数文件(Function-file) 命令文件 函数文件
形式 参数 不需要说明 第一行用function说明 没有输出和返回参数 可以接受和返回参数
数据
应用 运行 形式
变量为全局变量,既为 变量为函数内部变,也 工作空间变量 可以处理全局变量 是调用一系列命令和 反复调用,可改变参数, 函数的集合,便于修改 可用于扩充函数库
(Predefined variable)
clear命令不能清除 Who或Whos看不到 用户可以对其赋值,但clear后又恢复到初始 系统设定状态