第2章 MATLAB程序设计
matlab使用教程2-2
第2章 Matlab语言程序设计 章 语言程序设计
写二进制文件: 用fwrite写二进制文件: 写二进制文件 COUNT=fwrite(Fid, A, precision) 例: Fid=fopen(‘test.dat’, ‘w’); cnt=fwrite(Fid, A, ‘float’) fclose(Fid); 读取ASCII数据文件: 数据文件: 用fscanf读取 读取 数据文件 [A, COUNT]=fscanf(Fid, format, size) format用以控制读取的数据格式,由%加上格式符组成, 用以控制读取的数据格式, 加上格式符组成, 用以控制读取的数据格式 常见的格式符有: 常见的格式符有:d, i, o,u, x, e, f, s, c。 。 例:fscanf(Fid, ‘%s’); fscant(Fid, ‘%6.2f’); fscanf(Fid, “%5d’);
第2章 Matlab语言程序设计 章 语言程序设计
d) 其它与流程控制有关的语句
if
if
break语句循环结构 语句循环结构 语句
continue 语句循环结构 语句循环结构
第2章 Matlab语言程序设计 章 语言程序设计
pause 指令使程序运行停止,等待用户按任意键继续; 指令使程序运行停止 等待用户按任意键继续; 使程序运行停止, input 指令提示用户从键盘输入数值、字符串或表达 指令提示用户从键盘输入数值 提示用户从键盘输入数值、 并接受输入; 式,并接受输入; disp指令在屏幕上显示字符串; 指令在屏幕上显示字符串 指令在屏幕上显示字符串 echo on指令显示其后所有执行文件的指令; 指令显示其后所有执行文件的指令 指令显示其后所有执行文件的指令; echo off指令关闭其后所有执行文件的指令显示。 指令关闭其后所有执行文件的指令显示 指令关闭其后所有执行文件的指令显示。
matlab第2章
2. MATLAB变量的显示
任何MATLAB语句的执行结果都可以在屏幕上显示,同时赋值
给指定的变量。没有指定变量பைடு நூலகம்,赋值给默认变量名ans,数据
的显示格式由format命令控制。
Format只影响结果的显示,不影响计算与存储。
MATLAB以双字长浮点数(双精度)执行所有的运算。
22
2.4.1.2 字符串
a在前面未赋值时,非法命令。
19
1. 变量命名规则 (1)变量名区分字母的大小写,A与a表示不同的变量。 (2)变量名必须以英文字母开头,之后可以使用字母、数字、下画线, 但不能使用空格和标点符号。 (3)变量名长度不能超过31个字符,超过部分将被忽略
(4)某些常量也可以作为变量使用。
如 i 在MATLAB中表示虚数单位,但也可以作为变量使用。
5
3.Debug主菜单项 (1)Open M-Files when Debugging:调试时打开M文件 (2)Step:单步调试程序
(3)Step In:单步调试进入子程序
(4)Step Out:单步调试从子程序跳出 (5)Continue:程序执行到下一断点 (6)Clear Breakpoints in All Files:清除所有打开文件中的断点 (7)Stop if Errors/Warnings:在程序出错或报警处停止往下执行
8
5.Window主菜单项 (1)Close All documents:关闭所有文档 (2)0 Command Window:选定命令窗口为当前活动窗口 (3)1 Command History:选定历史命令窗口为当前活动窗口 (4)2 Current Directory:选定当前路径窗口为当前活动窗口
第二章_MATLAB语言基础_第1节-赵亦欣
第2章 MATLAB语言基础
【例2.8】 表达式语句。 >> sqrt(2)*exp(-1*3) ans = 0.0704 >> 8*3+6/4 ans = 25.5000
表达式语句 运算结果 执行下一条 表达式语句 后,结果将 被刷新
第2章 MATLAB语言基础
第2章 MATLAB语言基础
2.1 基础知识
2.1.3 变量和语句
变量名区分字母大小写;不超过31个字 符,31个以后的字符将被忽略,字符之间不 能有空格;必须以字母打头,之后可以是任意 字母、数字或下画线;不允许使用标点符号。
第2章 MATLAB语言基础
MATLAB的一条命令行就是一条语句,
格式与书写数学表达式相近。 在命令窗输入语句,该语句可被解释运 行并给出运行结果。
第2章 MATLAB语言基础
(1)永久变量不能用clear命令清除; (2)永久变量不响应Who, Whos命令; (3)永久变量可以等于表2-1中的值; (4)被赋值的永久变量,在clear命令清除内 存或命令窗关闭再打开后,将被设为默认值;
(5)允许被0除。
第2章 MATLAB语言基础
2.1 基础知识
第2章 MATLAB语言基础
【例2.11】复数矩阵的生成及运算。 >> A=[1 2; 3 4]+[5 6; 7 8]*I % 复数矩阵的输入。 分别由实部矩阵和虚部矩阵组合而成 A= 1.0000 + 5.0000i 2.0000 + 6.0000i 3.0000 + 7.0000i 4.0000 + 8.0000i >> B=[1+2i 3+4i; 5+6i 7+8i] % 复数矩阵的输入。 直接由复数构成矩阵 B= 1.0000 + 2.0000i 3.0000 + 4.0000i 5.0000 + 6.0000i 7.0000 + 8.0000i >> C=A*B % 复数矩阵相乘。 复数矩阵乘法, 1.0e+002表 示标量100,矩阵运算中,存在直 C= 角坐标和极坐标之间的转换 1.0e+002 * -0.3500 + 0.4900i -0.5100 + 0.7700i -0.3900 + 0.7700i -0.5500 + 1.2100i
Matlab第2章
程序控制结构
3.break语句和continue语句 break语句用于终止循环的执行。当在循环体内执行到该语 句时,程序将跳出循环,继续执行循环语句的下一语句。 continue语句控制跳过循环体中的某些语句。当在循环体内 执行到该语句时,程序将跳过循环体中所有剩下的语句,继 续下一次循环。 【例2.11】输入两个整数,求它们的最小公倍数。 程序如下: x=input('请输入第一个数:'); y=input('请输入第二个数:'); z=max(x,y); while or(rem(z,x)~=0,rem(z,y)~=0) z=z+1; end disp([num2str(x),'和',num2str(y),'的最小公倍数是: ',num2str(z)])
3.try语句 try语句是一种试探性执行语句,为开发人员提供了一种捕获错误的机制,其语 句格式为 try 语句块1 catch 语句块2 end try语句先试探性执行语句块1,如果语句块1在执行过程中出现错误,则将错误 信息赋给保留的lasterr变量,并转去执行语句块2。 【例2.6】矩阵乘法运算要求两矩阵的维数相容,否则会出错。先求两矩阵的乘 积,若出错,则自动转去求两矩阵的点乘。 A=input('请输入A矩阵:'); B=input('请输入B矩阵:'); lasterr(''); %清除原有的错误信息 try C=A*B; catch C=A.*B; end C disp(lasterr) %显示出错原因
2.2 程序控制结构
3.程序的暂停 当程序运行时,为了查看程序的中间结果或者观看输出的图 形,有时需要暂停程序的执行。这时可以使用pause函数, 其调用格式为 pause(延迟秒数) 如果省略延迟时间,则将暂停程序,直到用户按任一键后程 序继续执行。 若要强行中止程序的运行可使用Ctrl+C组合键。
第二章 MATLAB语言的使用与程序设计
命令历史窗口:显示已执行过的命令。在窗口的某一命令上单击鼠标 右键,会弹出菜单,对所选命令进行操作。
当前路径窗口:提供了当前路径文件的操作
演示
MATLAB的搜索路径
搜索路径是一系列文件路径的组合。当程序和命令执行 时, MATLAB 在搜索路径中查找程序或命令运行所需的函数文 件。 MATLAB 在执行搜索时按照规定的顺序。如:在命令窗口 中输入example,MATLAB将按下面的步骤来处理: 1.检查example是不是一个变量,如果是,则返回变量的值;
本章重点:
MATLAB工作环境掌握 主要文件类型及常用命令
矩阵、变量、表达式、常用函数
MATLAB语言的基本语句结构及程序调试方法
一、MATLAB系统简介
MATLAB的主要组成部分
1.MATLAB语言体系:MATLAB 语言是一种以矩阵运算为基础的高级 语言,具有条件控制、函数调用、数据结构、输入输出及面向对象等 程序语言特征,可以进行程序设计。
6 )对矩阵的特殊操作: rot90(a) 将 a 矩阵旋转 90 度、 fliplr(a) 将 a 矩阵的列反序、 flipud(a) 将 a 矩阵的行反序、diag(a) 将向量 a 构 成对角阵( 元素放在主对角线上 )---a 为向量、triu(a) 提取矩阵的上 三角部分、reshape改变矩阵的阶数,按列的顺序重排。
逻辑运算符: 在MATLAB中,逻辑运算符有3种。 & 逻辑与。当运算双方对应元素都为非零时; 结果为1,否则,结果为0。
| 逻辑或。当运算双方对应元素有一个为非零 时;结果为1,否则,结果为0。
~ 结果为0。 逻辑非。当元素的值为 0 时,结果为 1 ,否则,
例: a=[1 0 3;0 –1 6] , b=[-1 0 0;0 5 0.3] ,计算两矩
Matlab_2_3
3.程序的暂停 . 暂停程序的执行可以使用pause函数, 函数, 暂停程序的执行可以使用 函数 其调用格式为: 其调用格式为: pause(延迟秒数 延迟秒数) 延迟秒数 如果省略延迟时间,直接使用pause, 如果省略延迟时间,直接使用 , 则将暂停程序, 则将暂停程序,直到用户按任一键后 程序继续执行。 程序继续执行。 若要强行中止程序的运行可使用 Ctrl+C命令。 命令。 命令
计算分段函数的值。 例2-4 计算分段函数的值。 程序如下: 程序如下: x=input('请输入 的值 请输入x的值 请输入 的值:'); if x<=0 y= (x+sqrt(pi))/exp(2); else y=log(x+sqrt(1+x*x))/2; end y
Байду номын сангаас
(3) 多分支 语句: 多分支if语句 语句: if 条件 条件1 语句组1 语句组 elseif 条件 条件2 语句组2 语句组 …… elseif 条件 条件m 语句组m 语句组 else 语句组n 语句组 end 语句用于实现多分支选择结构。 语句用于实现多分支选择结构。
分别建立命令文件和函数文件, 例2-1 分别建立命令文件和函数文件,将华 氏温度f转换为摄氏温度 转换为摄氏温度c。 氏温度 转换为摄氏温度 。 程序1: 程序 : 首先建立命令文件并以文件名f2c.m存盘。 存盘。 首先建立命令文件并以文件名 存盘 clear; %清除工作空间中的变量 清除工作空间中的变量 f=input('Input Fahrenheit temperature:'); : c=5*(f-32)/9 然后在MATLAB的命令窗口中输入 ,将会 的命令窗口中输入f2c, 然后在 的命令窗口中输入 执行该命令文件,执行情况为: 执行该命令文件,执行情况为: Input Fahrenheit temperature:73 : c= 22.7778
《MATLAB程序设计教程(第二版)》第2章 MATLAB矩阵及其运算
例2-5 将101~125等25个数填入一个5行5列的表格中,
使其每行每列及对角线的和均为565。 M=100+magic(5)
(2) 范得蒙矩阵
范得蒙(Vandermonde)矩阵最后一列全为1,倒数 第二列为一个指定的向量,其他各列是其后列与
倒数第二列的点乘积。可以用一个指定向量生成
一个范得蒙矩阵。在MATLAB中,函数vander(V) 生成以向量V为基础向量的范得蒙矩阵。例如, A=vander([1;2;3;5])即可得到上述范得蒙矩阵。
对于比较大且比较复杂的矩阵,可以为它专门 建立一个M文件。下面通过一个简单例子来说明
如何利用M文件创建矩阵。
例2-2 利用M文件建立MYMAT矩阵。
(1) 启动有关编辑程序或MATLAB文本编辑器,并 输入待建矩阵:
(2) 把输入的内容以纯文本方式存盘(设文件名为
mymatrix.m)。 (3) 在MATLAB命令窗口中输入mymatrix,即运 行该M文件,就会自动建立一个名为MYMAT的 矩阵,可供以后使用。
是维数为0。
4.改变矩阵的形状
reshape(A,m,n)函数在矩阵总元素保持不变的前提下,
将矩阵A重新排成m×n的二维矩阵。
注意:
在MATLAB中,矩阵元素按列存储,即首先存储矩
阵的第1列元素,然后存储第2列元素,……,一直 到矩阵的最后一列元素。reshape函数只是改变原矩 阵的行数和列数,即改变其逻辑结构,但并不改变 原矩阵元素个数及其存储结构。
load 文件名 [变量名表] [-ascii]
其中,文件名可以带路径,但不需带扩展名.mat,
命令隐含一定对.mat文件进行操作。变量名表中 的变量个数不限,只要内存或文件中存在即可,
第2章_MATLAB的基本操作
浮点数包括单精度(4个字节)和双精度(8个字 节),默认为双精度。
single :将其它类型的数据转换成单精度浮点数。 double :将其它类型的数据转换成双精度浮点数。
浮点数与其它类型数据运算表
operand single double int/uint char logical X single single single single single double single double int/uint double double
MATLAB数据类型
例:
MATLAB数据类型
细胞变量的定义
可以通过以下两种方式定义一个细胞变量:
用赋值语句直接定义; 由 cell 函数预先分配存储空间,然后对细
胞的每个元素逐个赋值。
MATLAB数据类型
MATLAB数据类型
细胞变量可以嵌套定义
MATLAB数据类型
细胞变量的元素的引用
MATLAB数据类型
str2num:将字符数组转换为
数值数组
abs,double,char按照 ASCII码 转换; num2str,int2str,mat2str,str2num 直接转换。
MATLAB数据类型
字符串的连接
水平连接:strcat 或 中括号中用逗号连接
在中括号中直接水平连 接,结果中包括原字符 串结尾处的空格。 用 strcat 连接,结果 中忽略原字符串结尾处 的空格。
把数字直接转换为字符 串,每个数字为一个独 立的字符串。
把数字取整后转换为字 符串,注意和 num2str 的区别。
把矩阵转换为一个字符 串,方括号、分号和空 格都是其元素。
MATLAB数据类型
《控制系统计算机辅助设计MATLAB语言与应用第2版》薛定宇_课后习题答案
【17】
(1)z=xy
>>[x,y]=meshgrid(-3:0.01:3,-3:0.01:3);
z=x.*y;
mesh(x,y,z);
>> contour3(x,y,z,50);
(1)z=sin(xy)
>> [x,y]=meshgrid(-3:0.01:3,-3:0.01:3);
【2】
相应的MATLAB命令:B=A(2:2:end,:)
>>A=magic(8)
A=
642361606757
955541213 515016
174746 202143 4224
4026273736 303133
323435 292838 3925
4123224445191848
491514 5253 11 10 56
【10】
function y=fib(k)
if nargin~=1,error('出错:输入变量个数过多,输入变量个数只允许为1!');endﻭif nargout>1,error('出错:输出变量个数过多!');end
if k<=0,error('出错:输入序列应为正整数!');endﻭifk==1|k==2,y=1;ﻭelsey=fib(k-1)+fib(k-2);endﻭend
858 5954 62 631
>>B=A(2:2:end,:)
B =
955 541213515016
40262737 36303133
41232244451918 48
858 5954 62631
控制系统计算机辅助设计:MATLAB语言与应用(第2版)薛定宇-课后习题答案
第1章控制系统计算机辅助设计概述第2章 MATLAB语言程序设计基础第3章线性控制系统的数学模型第4章线性控制系统的计算机辅助分析第5章 Simulink在系统仿真中的应用第6章控制系统计算机辅助设计第1章控制系统计算机辅助设计概述【1】已阅,略【2】已阅,略【3】已经掌握help命令和Help菜单的使用方法【4】区别:MATLAB语言实现矩阵的运算非常简单迅速,且效率很高,而用其他通用语言则不然,很多通用语言所实现的矩阵运算都是对矩阵维数具有一点限制的,即使限制稍小的,但凡维数过大,就会造成运算上的溢出出错或者运算出错,甚至无法处理数据的负面结果【5】【8】(1)输入激励为正弦信号(2)输入激励为脉冲模拟信号(3)输入激励为时钟信号(4) 输入激励为随机信号(5) 输入激励为阶跃信号δ=0.3δ=0.05δ=0.7结论:随着非线性环节的死区增大,阶跃响应曲线的范围逐渐被压缩,可以想象当死区δ足够大时,将不再会有任何响应产生。
所以可以得到结论,在该非线性系统中,死区的大小可以改变阶跃响应的幅值和超调量。
死区越大,幅值、超调量将越小,而调整时间几乎不受其影响第2章 MATLAB语言程序设计基础【1】>> A=[1 2 3 4;4 3 2 1;2 3 4 1;3 2 4 1]A =1 2 3 44 3 2 12 3 4 13 24 1>> B=[1+4i,2+3i,3+2i,4+i;4+i,3+2i,2+3i,1+4i;2+3i,3+2i,4+i,1+4i;3+2i,2+3i,4+i,1+4i]B =1.0000 + 4.0000i2.0000 +3.0000i 3.0000 + 2.0000i4.0000 + 1.0000i4.0000 + 1.0000i 3.0000 + 2.0000i 2.0000 + 3.0000i 1.0000 + 4.0000i2.0000 +3.0000i 3.0000 + 2.0000i4.0000 + 1.0000i 1.0000 + 4.0000i3.0000 + 2.0000i 2.0000 + 3.0000i4.0000 + 1.0000i 1.0000 + 4.0000i>> A(5,6)=5A =1 2 3 4 0 04 3 2 1 0 02 3 4 1 0 03 24 1 0 00 0 0 0 0 5∴若给出命令A(5,6)=5则矩阵A的第5行6列将会赋值为5,且其余空出部分均补上0作为新的矩阵A,此时其阶数为5×6【2】相应的MATLAB命令:B=A(2:2:end,:)>> A=magic(8)A =64 2 3 61 60 6 7 579 55 54 12 13 51 50 1617 47 46 20 21 43 42 2440 26 27 37 36 30 31 3332 34 35 29 28 38 39 2541 23 22 44 45 19 18 4849 15 14 52 53 11 10 568 58 59 5 4 62 63 1>> B=A(2:2:end,:)B =9 55 54 12 13 51 50 1640 26 27 37 36 30 31 3341 23 22 44 45 19 18 488 58 59 5 4 62 63 1∴从上面的运行结果可以看出,该命令的结果是正确的【3】>> syms x s; f=x^5+3*x^4+4*x^3+2*x^2+3*x+6f =x^5 + 3*x^4 + 4*x^3 + 2*x^2 + 3*x + 6>> [f1,m]=simple(subs(f,x,(s-1)/(s+1)))f1 =19 - (72*s^4 + 120*s^3 + 136*s^2 + 72*s + 16)/(s + 1)^5m =simplify(100)【4】>> i=0:63; s=sum(2.^sym(i))s =0615【5】>> for i=1:120if(i==1|i==2) a(i)=1;else a(i)=a(i-1)+a(i-2);endif(i==120) a=sym(a); disp(a); endend[ 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309, 3524578, 5702887, 9227465, , , , , 5, 1, 6, 7, 3, 70, 03, 73, 76, 49, , 074, 099, 173, 272, 2445, 3717, 6162, 9879, 6041, 55920, 81961, 37881, 19842, 106, 177565, 035288, 212853, 248141, 0460994, , 1170129, 1879264, 8065, , , , 00884757, , 0, 5, 6, 1, 0, 88, , 673, 58, 931, , 120, , 029, 4, 2, 9905, 3072, 2977, 46049, 69026, 15075, 40, 99176, 083277, 082453, 165730, 248183, 7576, 62096, , 4738105, 5814114, 9, 186333, , 284885, 9, 3488322, 9, 0, 0]【6】>>k=1;for i=2:1000for j=2:iif rem(i,j)==0if j<i, break;endif j==i, A(k)=i; k=k+1; break; endendendenddisp(A);Columns 1 through 132 3 5 7 11 13 17 19 23 29 31 37 41 Columns 14 through 2643 47 53 59 61 67 71 73 79 83 89 97 101 Columns 27 through 39103 107 109 113 127 131 137 139 149 151 157 163 167 Columns 40 through 52173 179 181 191 193 197 199 211 223 227 229 233 239 Columns 53 through 65241 251 257 263 269 271 277 281 283 293 307 311 313 Columns 66 through 78317 331 337 347 349 353 359 367 373 379 383 389 397 Columns 79 through 91401 409 419 421 431 433 439 443 449 457 461 463 467 Columns 92 through 104479 487 491 499 503 509 521 523 541 547 557 563 569 Columns 105 through 117571 577 587 593 599 601 607 613 617 619 631 641 643 Columns 118 through 130647 653 659 661 673 677 683 691 701 709 719 727 733 Columns 131 through 143739 743 751 757 761 769 773 787 797 809 811 821 823 Columns 144 through 156827 829 839 853 857 859 863 877 881 883 887 907 911 Columns 157 through 168919 929 937 941 947 953 967 971 977 983 991 997【7】说明:h和D在MATLAB中均应赋值,否则将无法实现相应的分段函数功能syms x; h=input(‘h=’); D=input(‘D=’);y=h.*(x>D)+(h.*x/D).*(abs(x)<=D)-h.*(x<-D)【10】function y=fib(k)if nargin~=1,error('出错:输入变量个数过多,输入变量个数只允许为1!');endif nargout>1,error('出错:输出变量个数过多!');endif k<=0,error('出错:输入序列应为正整数!');endif k==1|k==2,y=1;else y=fib(k-1)+fib(k-2);endend【13】【14】>> t=[-1:0.001:-0.2,-0.1999:0.0001:0.1999,0.2:0.001:1];y=sin(1./t);plot(t,y);grid on;【15】(1) >> t=-2*pi:0.01:2*pi;r=1.0013*t.^2;polar(t,r);axis('square')(2) >> t=-2*pi:0.001:2*pi;r=cos(7*t/2);polar(t,r);axis('square')(3) >> t=-2*pi:0.001:2*pi;r=sin(t)./t;polar(t,r);axis('square')(4) >> t=-2*pi:0.001:2*pi;r=1-cos(7*t).^3;polar(t,r);axis('square')【17】(1)z=xy>> [x,y]=meshgrid(-3:0.01:3,-3:0.01:3);z=x.*y;mesh(x,y,z);>> contour3(x,y,z,50);(1)z=sin(xy)>> [x,y]=meshgrid(-3:0.01:3,-3:0.01:3);z=sin(x.*y);mesh(x,y,z);>> contour3(x,y,z,50);第3章线性控制系统的数学模型【1】(1) >> s=tf('s');G=(s^2+5*s+6)/(((s+1)^2+1)*(s+2)*(s+4))Transfer function:s^2 + 5 s + 6--------------------------------s^4 + 8 s^3 + 22 s^2 + 28 s + 16(2) >> z=tf('z',0.1);H=5*(z-0.2)^2/(z*(z-0.4)*(z-1)*(z-0.9)+0.6)Transfer function:5 z^2 - 2 z + 0.2---------------------------------------z^4 - 2.3 z^3 + 1.66 z^2 - 0.36 z + 0.6Sampling time (seconds): 0.1【2】(1)该方程的数学模型>> num=[6 4 2 2];den=[1 10 32 32];G=tf(num,den)Transfer function:6 s^3 + 4 s^2 + 2 s + 2------------------------s^3 + 10 s^2 + 32 s + 32(2)该模型的零极点模型>> G=zpk(G)Zero/pole/gain:6 (s+0.7839) (s^2 - 0.1172s + 0.4252)-------------------------------------(s+4)^2 (s+2)(3)由微分方程模型可以直接写出系统的传递函数模型【5】(1) >> P=[0;0;-5;-6;-i;i];Z=[-1+i;-1-i];G=zpk(Z,P,8)Zero/pole/gain:8 (s^2 + 2s + 2)-------------------------s^2 (s+5) (s+6) (s^2 + 1)(2) P=[0;0;0;0;0;8.2];Z=[-3.2;-2.6];H=zpk(Z,P,1,'Ts',0.05,'Variable','q')Zero/pole/gain:(q+3.2) (q+2.6)---------------q^5 (q-8.2)Sampling time (seconds): 0.05【8】(1)闭环系统的传递函数模型>> s=tf('s');G=10/(s+1)^3;Gpid=0.48*(1+1/(1.814*s)+0.4353*s/(1+0.4353*s));G1=feedback(Gpid*G,1)Transfer function:7.58 s^2 + 10.8 s + 4.8--------------------------------------------------------------0.7896 s^5 + 4.183 s^4 + 7.811 s^3 + 13.81 s^2 + 12.61 s + 4.8 (2)状态方程的标准型实现>> G1=ss(G1)a =x1 x2 x3 x4 x5 x1 -5.297 -2.473 -2.186 -0.9981 -0.7598x2 4 0 0 0 0 x3 0 2 0 0 0 x4 0 0 2 0 0x5 0 0 0 0.5 0b =u1x1 2x2 0x3 0x4 0x5 0c =x1 x2 x3 x4 x5y1 0 0 0.6 0.4273 0.3799d =u1y1 0Continuous-time state-space model.(3)零极点模型>> G1=zpk(G1)Zero/pole/gain:9.6 (s^2 + 1.424s + 0.6332)--------------------------------------------------------(s+3.591) (s^2 + 1.398s + 0.6254) (s^2 + 0.309s + 2.707)【11】>> Ga=feedback(s/(s^2+2)*1/(s+1),(4*s+2)/(s+1)^2);Gb=feedback(1/s^2,50);G=3*feedback(Gb*Ga,(s^2+2)/(s^3+14))Transfer function:3 s^6 + 6 s^5 + 3 s^4 + 42 s^3 + 84 s^2 + 42 s---------------------------------------------------------------------------s^10 + 3 s^9 + 55 s^8 + 175 s^7 + 300 s^6 + 1323 s^5 + 2656 s^4 + 3715 s^3+ 7732 s^2 + 5602 s + 1400【13】c1=feedback(G5*G4,H3)=G5*G4/(1+G5*G4*H3)c2=feedback(G3,H4*G4)=G3/(1+G3*H4*G4)c3=feedback(c2*G2,H2)=c2*G2/(1+c2*G2*H2)=G3*G2/(1+G3*H4*G4+G3*G2*H1)G=feedback(G6*c1*c3*G1,H1)=G6*c1*c3*G1/(1+ G6*c1*c3*G1*H1)=G6*G5*G4*G3*G2*G1/(1+G3*H4*G4+G3*G2*H1+G5*G4*H3+G5*G4*H3*G3*H4*G4+G5*G4* H3*G3*G2*H1+G6*G5*G4*G3*G2*G1*H1)【14】>> s=tf('s');c1=feedback(0.21/(1+0.15*s),0.212*130/s);c2=feedback(c1*70/(1+0.0067*s)*(1+0.15*s)/(0.051*s),0.1/(1+0.01*s));G=(1/(1+0.01*s))*feedback(130/s*c2*1/(1+0.01*s)*(1+0.17*s)/(0.085*s),0.0044/(1+0.01*s)) Transfer function:0.004873 s^5 + 1.036 s^4 + 61.15 s^3 + 649.7 s^2 + 1911 s---------------------------------------------------------------------------4.357e-014 s^10 + 2.422e-011 s^9 +5.376e-009 s^8 +6.188e-007 s^7+ 4.008e-005 s^6 + 0.001496 s^5 + 0.03256 s^4 + 0.4191 s^3+ 2.859 s^2 + 8.408 s 第4章线性控制系统的计算机辅助分析【1】(1) >> num=[1];den=[3 2 1 2];G=tf(num,den);eig(G)ans =-1.00000.1667 + 0.7993i0.1667 - 0.7993i分析:由以上信息可知,系统的极点有2个是在s域的右半平面的,因此系统是不稳定的(2) >> num=[1];den=[6 3 2 1 1];G=tf(num,den);eig(G)ans =-0.4949 + 0.4356i-0.4949 - 0.4356i0.2449 + 0.5688i0.2449 - 0.5688i分析:由以上信息可知,系统的极点有2个是在s域的右半平面的,因此系统是不稳定的(3) >> num=[1];den=[1 1 -3 -1 2];G=tf(num,den);eig(G)ans =-2.0000-1.00001.00001.0000分析:由以上信息可知,系统的极点有2个是在s域的右半平面的,因此系统是不稳定的(4) >> num=[3 1];den=[300 600 50 3 1];G=tf(num,den);eig(G)ans =-1.9152-0.14140.0283 + 0.1073i0.0283 - 0.1073i分析:由以上信息可知,系统的极点有2个是在s域的右半平面的,因此系统是不稳定的(5) >> s=tf('s');G=0.2*(s+2)/(s*(s+0.5)*(s+0.8)*(s+3)+0.2*(s+2));eig(G)ans =-3.0121-1.0000-0.1440 + 0.3348i-0.1440 - 0.3348i分析:由以上信息可知,系统的所有极点都在s域的左半平面,因此系统是稳定的【2】(1) >> num=[-3 2];den=[1 -0.2 -0.25 0.05];H=tf(num,den,'Ts',0.5);abs(eig(H)')ans =0.5000 0.5000 0.2000分析:由以上信息可知,所有特征根的模均小于1,因此该系统是稳定的(2) >> num=[3 -0.39 -0.09];den=[1 -1.7 1.04 0.268 0.024];H=tf(num,den,'Ts',0.5);abs(eig(H)')ans =1.1939 1.1939 0.1298 0.1298分析:由以上信息可知,由于前两个特征根的模均大于1,因此该系统是不稳定的(3) >> num=[1 3 -0.13];den=[1 1.352 0.4481 0.0153 -0.01109 -0.001043];H=tf(num,den,'Ts',0.5);abs(eig(H)')ans =0.8743 0.1520 0.2723 0.2344 0.1230分析:由以上信息可知,所有特征根的模均小于1,因此该系统是稳定的(4) >> num=[2.12 11.76 15.91];den=[1 -7.368 -20.15 102.4 80.39 -340];H=tf(num,den,'Ts',0.5,'Variable','q');abs((eig(H))')ans =8.2349 3.2115 2.3415 2.3432 2.3432分析:由以上信息可知,所有特征根的模均大于1,因此该系统是不稳定的【3】(1) >> A=[-0.2,0.5,0,0,0;0,-0.5,1.6,0,0;0,0,-14.3,85.8,0;0,0,0,-33.3,100;0,0,0,0,-10];eig(A)ans =-0.2000-0.5000-14.3000-33.3000-10.0000分析:由以上信息可知,该连续线性系统的A矩阵的所有特征根的实部均为负数,因此该系统是稳定的(2)>>F=[17,24.54,1,8,15;23.54,5,7,14,16;4,6,13.75,20,22.5589;10.8689,1.2900,19.099,…-4-3.5-3-2.5-2-1.5-1-0.50x 10-6P ole-Zero Map Real Axis (seconds -1)I m a g i n a r y A x i s (s e c o n d s -1)21.896,3;11,18.0898,25,2.356,9];abs(eig(F)') ans =63.7207 23.5393 12.4366 13.3231 19.7275分析:由以上信息可知,该离散系统的F 矩阵的所有特征根的模均大于1,因此该系统是不稳定的 【4】>> A=[-3 1 2 1;0 -4 -2 -1;1 2 -1 1;-1 -1 1 -2]; B=[1 0;0 2;0 3;1 1];C=[1 2 2 -1;2 1 -1 2];D=[0 0;0 0];G=ss(A,B,C,D); tzero(G)pzmap(G)ans =-3.6124-1.2765结论:∴可以得到该系统的 零点为-3.6124、-1.2765 分析:由以上信息可知,【5】>> s=tf('s');Gc=sscanform(G,'ctrl') Go=sscanform(G,'obsv') a =x1 x2 x3 x4 x1 0 1 0 0 x2 0 0 1 0 x3 0 0 0 1 x4 -0.4 -1.4 -4.3 -4.3 b =u1 x1 0 x2 0 x3 0 x4 1 c =x1 x2 x3 x4 y1 0.4 0.2 0 0 d =u1 y1 0Continuous-time state-space model. a =x1 x2 x3 x4x1 0 0 0 -0.4x2 1 0 0 -1.4x3 0 1 0 -4.3x4 0 0 1 -4.3b =u1x1 0.4x2 0.2x3 0x4 0c =x1 x2 x3 x4y1 0 0 0 1d =u1y1 0Continuous-time state-space model.【9】(1)>> num=[18 514 5982 36380 122664 222088 185760 40320];den=[1 36 546 4536 22449 67284 118124 109584 40320];[R1,P1,K1]=residue(num,[den 0]);[R1,P1]ans =-1.2032 -8.0000-1.0472 -7.00000.2000 -6.00000.7361 -5.0000-2.8889 -4.00002.2250 -3.0000-2.0222 -2.00003.0004 -1.00001.0000 0>> [n,d]=rat(R1);sym([n./d]')ans =[ -379/315, -377/360, 1/5, 53/72, -26/9, 89/40, -91/45, 7561/2520, 1][阶跃响应的解析解]y(t)=(-379/315)*e-8t+(-377/360)*e-7t+(1/5)*e-6t+(53/72)*e-5t+(-26/9)*e-4t+(89/40)*e-3t+ (-90/45)*e-2t+(7561/2520)*e-t+1(2) >> num=[18 514 5982 36380 122664 222088 185760 40320];den=[1 36 546 4536 22449 67284 118124 109584 40320];[R2,P2,K2]=residue(num,den);[R2,P2]ans =9.6254 -8.00007.3306 -7.0000-1.2000 -6.0000-3.6806 -5.000011.5556 -4.0000-6.6750 -3.00004.0444 -2.0000-3.0004 -1.0000>> [n,d]=rat(R2);sym([n./d]')ans =[ 3032/315, 887/121, -6/5, -265/72, 104/9, -267/40, 182/45, -7561/2520][脉冲响应的解析解]y(t)=(3032/315)*e-8t+(887/121)*e-7t+(-6/5)*e-6t+(-265/72)*e-5t+(104/9)*e-4t+(-267/40)*e-3t+(182/45)*e-2t+(-7561/2520)*e-t(3) >> syms t;u=sin(3*t+5);Us=laplace(u)Us =(3*cos(5) + s*sin(5))/(s^2 + 9)>> s=tf('s');Us=(3*cos(5)+s*sin(5))/(s^2+9);num=[18 514 5982 36380 122664 222088 185760 40320];den=[1 36 546 4536 22449 67284 118124 109584 40320];G=tf(num,den); Y=Us*G;num=Y.num{1}; den=Y.den{1};[R3,P3,K3]=residue(num,den); [R3,P3]ans =1.1237 -8.00000.9559 -7.0000-0.1761 -6.0000-0.6111 -5.00002.1663 -4.0000-1.1973 - 0.0010i 0.0000 + 3.0000i-1.1973 + 0.0010i 0.0000 - 3.0000i-1.3824 -3.00000.8614 -2.0000-0.5430 -1.0000>> [n,d]=rat(R3);sym([n./d]')ans =[109/97, 282/295, -59/335, -965/1579, 951/439, - 449/375 + (18*i)/17981, - 449/375 - (18*i)/17981, -1663/1203, 317/368, -82/151]Linear Simulation Results Time (seconds)A m p l i t u d e [正弦信号时域响应的解析解]y(t)=(109/97)*e -8t +(282/295)*e -7t +(-59/335)*e -6t +(-965/1579)*e -5t +(-449/375)*e -4t +(-1663/1203)*e -3t +(317/368)*e -2t +(-82/151)*e -t -2.3947sin(3t)[输出波形]>> num=[18 514 5982 36380 122664 222088 185760 40320];den=[1 36 546 4536 22449 67284 118124 109584 40320]; G=tf(num,den); t=[1:.1:20]';u=sin(3*t+5); lsim(G,u,t);分析:由解析解可知,输出信号的稳态部分是振荡的,并且其幅值与相位始终 在到达稳态的时候保持不变,因此 右图所示的输出波形与解析解所得的结论是一致的【10】(1)因为PI 或PID 控制器均含有Ki/s 节,则当Kp →∞,即|e(t)|一环节后,如果要求|e(t)|→0(2)不稳定系统能用PI 或PID 在积分控制中,控制器的输出与输入误差信号的积分成正比关系。
Matlab程序设计第2章矩阵及其运算
2.2.2 创建二维数组 方法2:用函数生成特殊矩阵
函数 zeros (全零阵) 格式 B = zeros(n) B = zeros(m,n) 函数 ones (全1阵) 格式 B = ones(n) B = ones(m,n) 函数 eye(单位矩阵) 格式 B = eye(n) B = eye(m,n) %生成n×n全零阵 %生成m×n全零阵
2.2.4二维数组的寻访与赋值
判断数组维数和大小 1) 判断数组维数的指令:ndims 2) 判断数组大小的指令:size 例如:上例中数组A的维数和大小分别为
>> An=ndims(A), As=size(A) An = 2 As = 3 3
表示数组A大小的行数组的长度 (As的长度) 等于数组A的 维数 (An),length(As)=An 数组A的长度指最长维的长度:length(A)=max(As)。
注意: 1) 子数组寻访取决于 x ( index )中的下标index。 2) 下标 index 可以是单个数值或数组,但是 index 的元素取 值必须在 [ 1 , end ] 的范围内。end 为数组最大下标。 3) 子数组赋值时,注意被赋值的子数组长度与送入的数组长 度一致。
2.2.4二维数组的寻访与赋值
%生成n×n全1阵 %生成m×n全1阵 %生成n×n单位阵 %生成m×n单位阵
2.2.2 创建二维数组 方法2:用函数生成特殊矩阵
函数 randn 格式 y = randn(n) y = randn(m,n) %生成n×n正态分布随机矩阵 %生成m×n正态分布随机矩阵
产生均值为0.6,方差为0.1的4阶矩阵 >> mu=0.6; sigma=0.1; >> x=mu+sqrt(sigma)*randn(4) x= 0.8311 0.7799 0.1335 1.0565 0.7827 0.5192 0.5260 0.4890 0.6127 0.4806 0.6375 0.7971 0.8141 0.5064 0.6996 0.8527
matlab-第二章
1,在一个MA TLAB命令中,6+7i和6+7*i有何区别?i和I有何区别?第一个i代表一个变量,6+7i是一个函数,第二个代表虚数,6是实部,7代表虚步.I只代表变量.2,.设A和B是两个同大小的矩阵,试分析A*B和A.*B、A./B和B.\A、A/B和B/A的区别?如果A和B是两个标量数据,结论又如何?A *B是矩阵相乘,A.*B表示A和B单个元素之间对应相乘。
A./B和B.\A值相等,是一样的。
A/B等效于B的逆右乘A的矩阵,B\A等效于B矩阵逆左乘A矩阵。
如果A和B是两个标量数据,结论是都没有区别。
3,写出完成下列操作的命令。
(1)删除矩阵A的第7号元素A(7)=[](2)将向量t的0元素用机器零来代替t(find(t==0))=eps(3)将含有12个元素的向量x转换成3*4矩阵newA=reshape(A,3,4)(4) 求一个字符串的ASCIIch=['a b c';'1 2 3'];abs ch(5) 产生和A同样大小的幺矩阵ones(size(A))(6) 从矩阵A提取主对角线元素,并以这些元素构成对角阵B。
A=[1 2 3;4 5 6;7 8 9];D=diag(A)B=diag([1,5,9])4, .要生产均值为3,方差为1的500个正态分布的随机序列,写出相应的表达式y=3+sqrt(1)*randn(500)5,(1)主对角元素1 1 5 9上三角矩阵1 -1 2 30 1 -4 20 0 5 20 0 0 9下三角矩阵1 0 0 05 1 0 03 0 5 011 15 0 9逆矩阵-0.1758 0.1641 0.2016 -0.0227-0.1055 -0.1016 -0.0391 0.0664-0.0508 -0.0859 0.1516 0.00230.3906 -0.0313 -0.1813 0.0281行列式的值1280秩4范数A1=norm(A,1)=20 A2=norm(A)= 21.3005 A3=norm(A,inf)=35条件数A1=cond(A,1)= 14.4531 A2=cond(A,2)= 11.1739 A3=cond(A,inf)= 22.0938迹16(2)主对角元素0.43 4上三角矩阵0.4300 43.0000 2.00000 4.0000 21.0000下三角矩阵0.4300 0 0-8.9000 4.0000 0逆矩阵0.0022 -0.01750.0234 -0.0017-0.0035 0.0405行列式的值秩2范数B1=norm(B,1)= 47 B2=norm(B)= 43.4271 B3=norm(B,inf)= 45.4300 条件数B2=cond(B,2)= 1.9354迹4.43006,all(A)=0any(A)=1isnan(A)= 0 1 0 0 0 0 0isinf(A)= 0 0 1 1 0 0 0isfinite(A)= 1 0 0 0 1 1 1。
第2章 MATLAB语言程序设计实例解析
【例2-6】switch语句实例 (原题见书本【例2-40】)。
• • • • • • • • • • • • • • • • • 解:首先我们要提取出开关表达式,这里若直接选用price作为开关表达式,则表达式i 则不好表示,因为price的取值理论上是无穷的,考虑到将price化为整数,这样图2-9中 的表达式i也就不难表示了。下面给出具体的程序: price=input('请输入商品价格:'); switch fix(price) case num2cell(0:199) % 价格小于200 rate=0; case num2cell(200:499) % 价格大于等于200但小于500 rate=3/100; case num2cell(500:999) % 价格大于等于500但小于1000 rate=5/100; case num2cell(1000:2499) % 价格大于等于1000但小于2500 rate=8/100; case num2cell(2500:4999) % 价格大于等于2500但小于5000 rate=10/100; otherwise % 价格大于等于5000 运行结果: rate=14/100; 请输入商品价格:1225 end sale_price =1127 sale_price=price*(1-rate) % 输出商品实际销售价格
【例2-1】隐函数的求导。
• 对于隐函数求偏导问题时,diff()函数并不能直接用于求解。考虑到隐 函数偏导数求解的一般方法:假设隐函数的数学表达式为
f ( x1 , x2 ,L , xn ) = 0
• 则可以通过隐函数求出自变量之间的偏导数。具体可以用下面的公式
∂xi • 求出 : ∂x j
∂ f ( x1 , x2 ,L , xn ) ∂x ∂xi =− j ∂ ∂x j f ( x1 , x2 ,L , xn ) ∂xi
第2章 MATLAB语言程序设计基础 基于MATLABSimulink的系统仿真技术与应用(第2版
命名为a和b版
MATLAB语言环境操作界面
➢ 命令窗口、当前目录窗口、命令历史记录窗口、 工作空间窗口;可以只使用命令窗口
MATLAB的联机帮助与电子版手册
➢ Help | MATLAB Help ➢ 全套PDF文件
➢ 函数调用语句
语句结构 一般对应于*.m函数 同一函数可以有不同的调用格式
Saturday, 2010-10- 9, 07:07:26
Slide <#> (of 42)2章:MATLAB语言程序设计基础 薛定宇、陈阳泉《基于MATLAB/Simulink的系统仿真技术与应用》清华大学出版社,2010
冒号表达式
举例 复数矩阵的输入
MATLAB语句
矩阵变换成符号型
Saturday, 2010-10- 9, 07:07:26
Slide <#> (of 42)2章:MATLAB语言程序设计基础 薛定宇、陈阳泉《基于MATLAB/Simulink的系统仿真技术与应用》清华大学出版社,2010
1.2.3 多维数组的定义
2.3.4 矩阵元素的数据变换
1.2.3 矩阵的MATLAB表示
复数矩阵为MATLAB的基本变量单元 矩阵输入
MATLAB输入语句
扩展矩阵
无需预先定义维数
Saturday, 2010-10- 9, 07:07:26
Slide <#> (of 42)2章:MATLAB语言程序设计基础 薛定宇、陈阳泉《基于MATLAB/Simulink的系统仿真技术与应用》清华大学出版社,2010
Saturday, 2010-10- 9, 07:07:26
MATLAB第二章
function [egg1,egg2,chicken1]=myegg(n)
% egg1 隔1天的蛋个数 % egg2 隔2天的蛋个数 % chicken1 过n天后母鸡个数 if n==1
egg1=1; egg2=0; chicken1=1; elseif n==2 egg1=1; egg2=1; chicken1=1;
27
>> x=0:0.1:2*pi; >> y=sin(x); >> plot(x,y) >> plot(x,y,‘ro’) %默认是蓝色曲线 >> x=[0 1 2 5];y=[4 -2 1 2]; >> plot(x,y) >> fplot(‘x^2+4*x+1’,[-15 15]) %函数用字符串表示
1 -8 4 9 -4 5 7 -9 >> fun=@myfun5 %例28中的函数 fun =
@myfun5 >> y=fun(A) %直接调用 y=
1 -13 16 81 -5 25 49 -15 >> y=feval(fun,A) %利用feval y=
1 -13 16 81 -5 25 49 -15
1 4 9 16 5 10 15 20
2024/7/5
第二章 MATLAB编程与作图
24
>> k=5;
>> ff=@(x)x^2+2*x+k %可以使用空间中的变量k
ff =
@(x)x^2+2*x+k
>> ff(5)
ans =
40
>> A=[1 2 ;3 4]
MATLAB
>> disp (b)
第2章 MATLAB编程基础
例4.3 求一元二次方程ax2 +bx+c=0的根。
程序如下:
a=input('a=?');
b=input('b=?'); c=input('c=?'); d=b*b-4*a*c; x=[(-b+sqrt(d))/(2*a), (-b-sqrt(d))/(2*a)]
第2章 MATLAB编程基础
作业
作业上交格式:所有程序放在一个文件夹下, 文件夹压缩后命名格式:班级+学号+姓名(如:12 电气X1+120514503+孙大贺)发送到
21420322@
第2章 MATLAB编程基础
1、用MATLAB语言实现下面的分段函数:
ቤተ መጻሕፍቲ ባይዱ 第2章 MATLAB编程基础
第2章 MATLAB编程基础
例4.11 矩阵乘法运算要求两矩阵的维数相容,否则会 出错。先求两矩阵的乘积,若出错,则自动转去求 两矩阵的点乘。 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 %显示出错原因
(3)命令按钮操作:单击MATLAB命令窗口工具栏上的
“新建”命令按钮。 2. 编辑已有的M文件
第2章 MATLAB编程基础
例4.1 建立一个命令文件将变量a,b的值互换,然后运行 该命令文件。 首先建立命令文件并以文件名exch.m存盘: clear all; a=1:10; b=[11,12,13,14;15,16,17,18]; c=a;a=b;b=c; a b 然后在MATLAB的命令窗口中输入exch,将会执行该 命令文件。 >>exch
02第二章Matlab语言基础-Matlab教程
MATLA于分隔某一行的元素,分号用于区分不同的行. 除了分号,在输入矩 阵时,按Enter键也表示开始一新行. 输入矩阵时,严格要求所有行有相同的列 例m=[1 2 3 4 ;5 6 7 8;9 10 11 12] p=[1 1 1 1 2222 3 3 3 3] 特殊矩阵的建立: a=[ ] 产生一个空矩阵,当对一项操作无结果时,返回空矩阵,空矩阵的大小为零. b=zeros(m,n) 产生一个m行、n列的零矩阵 c=ones(m,n) 产生一个m行、n列的元素全为1的矩阵 d=eye(m,n) 产生一个m行、n列的元素的单位矩阵 e=randn(m,n) 产生一个m行、n列正态分布随机矩阵
3、数组的方向 前面例子中的数组都是一行数列,是行方向分布的 称之为行向量 数组也可以是列向 行向量. 前面例子中的数组都是一行数列,是行方向分布的. 称之为行向量 数组也可以是列向 量,它的数组操作和运算与行向量是一样的,唯一的区别是结果以列形式显示. 它的数组操作和运算与行向量是一样的,唯一的区别是结果以列形式显示 产生列向量有两种方法: 产生列向量有两种方法: 直接产生 例 转置产生 例 c=[1;2;3;4] ; ; ; b=[1 2 3 4]; c=b’
Matlab语言基础 Matlab语言基础
1)启动与退出
双击matlab图标,进入matlab命令窗口(command window) 双击matlab图标,进入matlab命令窗口(command window),即可 输入命令语句,开始运算,或从开始菜单的程序中单击matlab进入。 输入命令语句,开始运算,或从开始菜单的程序中单击matlab进入。 单击file菜单中的Exit,或在命令窗口输入Exit并回车即可退出。 单击file菜单中的Exit,或在命令窗口输入Exit并回车即可退出。
matlab第二章
ceil(1.8)=2
4)round四舍五入到最近的整数,如round(-1.3)=-1;round(-1.52)=2;round(1.3)=1;round(1.52)=2。
MATLAB 中的变量不需要事先定义,在 遇到新的变量名时,MATLAB会自动建立该变 量并分配存储空间。当遇到已存在的变量时, MATLAB会更新其内容,如有必要会重新分配
存储空间。
下一页
变量名由字母、数字和下划线构成, 并且必须以字母开头,最长为31个字符。 MATLAB能区分大小写字母,变量A和a是
例如: if a>1
disp('a>1')
elseif a==1
disp('a=1')
else disp('a<1') end 上一页 返回
3、逻辑函数
MATLAB提供了许多测试用的逻辑函数,
主要有all、any、find、exist、is*等。
返回
all函数
利用all函数可以测定矩阵每列所有
元素是否非零。若该列所有元素非零,则
利用重复函数repmat可以将小矩阵以
重复的形式产生大矩阵。
例如: f=repmat(a,2,3)
3、矩阵缩小 将大矩阵变成小矩阵的方法有两种: 抽取法和删除法。 (1)抽取法是指从大的矩阵中抽取中 的一部分,从而构成新的矩阵。例如: a=[1:4; 5:8; 9:12; 13:16] b=a(2:3, 3:4) c=a([1 4],[1 3]) d=a([2 4],[1 3])
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第2章 MATLAB程序设计
2.2 程序流程语句
一、if语句
1.单分支if语句
最简单的选择结构语句,其基本格式为: if 表达式 语句组 end 说明:表达式多为关系或逻辑表达式。如果表达式为真(非零), 就执行if和end之间的语句组,然后再执行end之后的语句;如果 表达式为假(零),就直接执行end之后的语句。
3.文本编辑器的调试功能
(1)设置断点 设置断点是高级语言中程序调试的重要手段之一,断点是在程 序特定位置设置的中断点,当程序运行至断点处时会暂停运行, 此时可通过检查相关变量的内容等方法确定程序的运行是否正确。 图中的红色菱形点即为设置的断点。
第2章 MATLAB程序设计
(2)Debug菜单 1)Step:单步执行。每单击一次,程序运行一次,但不 进入函数。 2)Step in:单步运行。遇到函数时进入函数内,仍单步 运行。 3)Step out:停止单步运行。如果是在函数中,跳出函 数;如果不在函数中,直接运行到下一个断点处。 4)Save and Run:存储文件并从第1行开始执行程序, 当遇到第1个断点时暂停运行,并变为Continue;单击 〈F5〉或【Continue】则继续运行。 5)Go Until Cursor:从当前位置运行到光标所在的位置。
第2章 MATLAB程序设计
4.打开已有的M文件 打开已有的M文件,也有三种方法: 1)菜单操作:单击操作桌面或文本编辑器的File → Open…选项,则打开Open或Open File窗口,再选择 要打开的文件; 2)命令操作:在命令窗口输入命令edit <文件名>,回车 后则打开指定的M文件。如果文件不在当前路径下, 还需在文件名前加上路径。例如打开上例的文件,可 在命令窗口的>>提示符后输入edit myfile.m; 3)命令按钮操作:单击操作桌面工具栏上的打开文件按 钮 ,则打开Open或Open File窗口,再选择要打开 的文件。
第2章 MATLAB程序设计
六、其他语句
1.continue语句 continue语句用于控制for循环或while循环跳过某些执行语句,当出现 continue语句时,则跳过循环体中所有剩余的语句,继续下一次循环,即 结束本次循环。 2.break语句 break语句用于终止for循环和while循环的执行。当遇到break语句时,则退 出循环体,继续执行循环体外的下一个语句,即中止循环。在嵌套循环中, break往往存在于内层的循环中。 3.try语句 MATLAB从5.2版开始提供了try语句,这是一种试探性执行语句。语句格 式为: try 语句组1 catch 语句组2 end 说明:先试探性执行语句组1,如果语句组1在执行过程中出现错误,则将 错误信息赋给保留的lasterr变量,并转去执行语句组2。这种试探性执行语 句是其他高级语言所没有的。
第2章 MATLAB程序设计
(1)函数文件名 函数文件名通常由函数名再加上扩展名.m组成,不过函数文件名与 函数名也可以不相同。 (2)注释说明 注释说明包括以下三部分内容: 1)紧随函数文件定义行之后,以%开头的第一行。这一行一般包括大 写的函数文件名和函数功能的简要描述,供lookfor关键词查询和 help在线帮助用。 2)第一行之后连续的注释行。通常包括函数输入、输出参数的含义及 调用格式说明等信息,构成全部在线帮助文本。 3)与在线帮助文本相隔一个空行的注释行。包括函数文件编写和修改 的信息,如作者、修改日期、版本等内容,用于软件档案管理。 (3)return语句 如果在函数文件中插入了return语句,则执行到该语句就结束函数 的执行,程序流程转到调用该函数的位置。
第四章
计算机网络
计算机网络技术应用
MATLAB基础及应用 第2版
主编:于润伟 朱晓慧
renshaobin523@
第2章 MATLAB程序设计
第2章 MATLAB程序设计
本章要点 M文件的建立与调试方法 M文件的程序流程语句 函数文件的建立与调用 应用程序设计
第2章 MATLAB程序设计
第2章 MATLAB程序设计
2.3 函数文件
一、基本结构
函数文件由function关键字引导,其基本结构为: function [输出形参表]=函数名(输入形参表) 注释说明部分 函数体语句 return 说明:以function开头的一行为引导行,表示该文件是一个函数文 件。函数名的命名规则与变量名相同。输入形参表是函数的输入 参数,可以有多个,用“逗号”来分隔;输出形参表为函数的输 出参数,当输出形参只有一个时,直接输入变量名而不用方括号, 多个输出形参用“逗号”来分隔。 注意:函数文件编辑结束后,不能像M文件那样单击〈F5〉或单 击Debug → Save and Run选项运行,而是要直接存盘。
第2章 MATLAB程序设计
2.2.5 循环的嵌套
如果一个循环结构的循环体又包括一个循环 结构就称为循环的嵌套,或称为多重循环。任 一种循环语句的循环体部分都可以包含另一个 循环语句,多重循环嵌套的层数可以是任意的。 习惯上按照嵌套层数,分别叫做二重循环、三 重循环等。处于内部的循环叫做内循环,处于 外部的循环叫做外循环。在设计多重循环时, 要特别注意内、外循环之间的关系,以及语句 放置次序,不要搞错。
第2章 MATLAB程序设计
2.文本编辑器的编辑功能
(1)Go To... 当选定Go To...选项时,弹出如图2-2所示的对话框,输入行号 单击【OK】后,光标自动移到指定的行上,并将该行作为当前行。
(2)Set/Clear Bookmark
该选项为“设置或清除书签”。
第2章 MATLAB程序设计
三、参数的可调性
MATLAB在函数调用上有一个与一般高级语言不同之处,就是 函数所传递参数数目的可调性。凭借这一点,一个函数可完成多 种功能。在调用函数时,MATLAB用两个永久变量nargin和 nargout分别记录调用函数时的输入实参和输出实参的个数。只要 在函数文件中包含这两个变量,就可以准确地知道该函数文件被 调用时的输入输出参数个数,从而决定函数如何进行处理。
第2章 MATLAB程序设计
四、for语句
for语句为计数循环语句,在许多情况下,循环条件是 有规律变化的,通常把循环条件初值、终值和变化步 长放在循环语句的开头,这种形式就是for语句的循环 结构。for循环的一般形式是: for 循环变量名=表达式1:表达式2:表达式3 语句体 end 说明:其中表达式1的值是循环变量的初值,表达式2 的值是循环步长,表达式3的值是循环变量的终值。初 值、步长和终值可以取整数、小数、正数和负数,步 长可以缺省,缺省值为1。
第2章 MATLAB程序设计
三、while语句
while语句是条件循环语句,在条件(多为关系表达式) 控制下重复执行,直到条件不成立为止。while循环的 一般形式是: while 表达式 语句体 end 说明:先计算表达式的值,如果非零,语句体就执行一 次;执行完毕再次计算表达式的值,如果仍然非零, 语句体就再执行一次;如此循环,直到表达式的值为 零。如果表达式的值总是非零,该循环将无休止地进 行(即死循环),程序设计时一定要避免。
第2章 MATLAB程序设计
二、M文件的调试
1.直接调试法 1)如果在错误信息中指出了出错的行号,可先根据错误信息检查该 语句是否存在语法错误或运行中变量尺寸不一致等情况。 2)检查所调用函数或命令的拼写是否正确,括号(包括方括号和圆 括号)是否配对,各种流程控制语句是否匹配(如for与end、 while与end、switch与end等)。 3)检查所调用的函数或载入的数据文件是否在当前目录或搜索路径 上。 4)将重点怀疑的命令行后的分号删除,使得计算结果能够实时地显 示在屏幕上,作为查错的依据,根据显示的结果判断问题的所在。 5)如果怀疑某个函数文件有问题,可以在该函数文件的函数定义行 前加“%”,使其函数体成为命令文件(因为命令文件中的变量存 储在工作空间中,可以在工作空间窗口和数组编辑器观察修改), 调好后再改回函数文件。
第2章 MATLAB程序设计
四、全局变量
全局变量的作用域是整个MATLAB工作空间,即全程 有效,所有的函数都可以对其进行存取和修改,因此 定义全局变量是函数间传递信息的一种手段。在函数 文件里,全局变量的定义语句应放在变量使用之前, 为了便于了解所有的全局变量,一般把全局变量的定 义语句放在文件的前部。定义全局变量的方法是使用 global函数,格式为: global 变量名 全局变量名多用大写字母,并有选择地以首次出现的 M文件的名字开头,这样,可把多个全局变量之间不 必要的互作用减至最小。
第2章 MATLAB程序设计
2.双分支if语句 前面提供的单分支if语句只能处理较简单的条件,功能 不全面。为此MATLAB还提供了双分支if语句结构。其 基本格式为: if 表达式 语句组1 else 语句组2 end 说明:如果表达式为真(非零),则执行语句组1,再 执行end后面的语句;如果表达式假(为零),则先执 行语句组2,再执行end后面的语句。
第2章 MATLAB程序设计
3.多分支if语句
当有三个或更多的选择时,可采用if语句的嵌套,也可以采用多分 支if语句。其基本格式为: if 表达式1 语句组1 elseif 表达式2 语句组2 … elseif 表达式n 语句组n else 语句组n+1 end 说明:先判断表达式1的值,若为真,则执行语句组1,执行完语句 组1后,跳出该选择结构,继续执行end 后的语句;当表达式1的值 为假时,跳过语句组1,进而判断表达式2,若为真,则执行语句组 2,然后继续执行end 后的语句;如果表达式2的值也为假,则跳过 语句组2,继续判断表达式3,如此下去,若所有表达式都为假 ,则 执行else后的语句组n+1,再执行end 后的语句。else语句可以缺省。
2.1 M文件