Download presentation
Presentation is loading. Please wait.
1
上课时间:周一、四(7、8节) 地点:教学主楼-C106 上机时间:周二、五(7、8节) 地点:计算机教学实验中心 教1南3层西头(网络中心隔壁) 网上交作业时间: 周五上机作业,截至当周周日晚12:00 周二上机作业,截至当周周四晚12:00
2
第2章 Matlab语言程序设计 基本要求: (1) 了解Matlab的各种数据类型;
(6) 学会 Matlab 的M文件的编写方法,包括命令文件和函数文件。了解M件的调试命令和调试方法。
3
第2章 Matlab语言程序设计 1、 Matlab数据类型 变量和常量 数字变量的格式 字符串 单元型变量 结构型变量 矩阵、向量 多项式
4
第2章 Matlab语言程序设计 a) 变量和常量
变量(包括函数)的命名规则:由英文字母、数字和下划线混合组成,不得包含空格和标点 ;第一个字符必须是英文字母,最多包括31个字符; 对字母的大小写敏感。 局部变量和全局变量 永久变量(常量) 只能在某一函数体内使用,而不能从其他函数和 Matlab工作空间访问的变量,就是局部变量。 在几个函数及M atlab函数中都能使用的变量就是全局变量。 (全局变量名应尽可能大写,并由globe声明)
5
第2章 Matlab语言程序设计 Matlab永久变量
6
第2章 Matlab语言程序设计 b) 数字变量 Matlab内部的每一个数据元素都是用双精度数(double)来表示和存储的。
变量输出时用户可以用format命令设置或改变输出格式。 短格式(Short): 短格式e方式(Short e):1.3333e e-06 短格式g方式(Short g): 长格式(Long): 长格式e方式(Long e): e e-06 长格式g方式(Long g): 银行格式(Bank): 十六进制格式(Hex):3ff eb46231abfd71 +格式(+):++ 有理数(Rational):1/ /
7
第2章 Matlab语言程序设计 c) 字符串 所有字符串都用单引号括起来。
>> s='matlab ' 字符中中的每个字符(包括空格)都是字符串变量(矩阵或向量)中的一个元素。 字符串中的字符以 ASCII 码形式储存并区分大小 ,用函数abs可以看到字符的ASCII码。 在Matlab中,字符串和字符矩阵基本上是等价的。 >> s=['matlab'] 等价于 >> s='matlab '
8
第2章 Matlab语言程序设计 字符串函数
9
第2章 Matlab语言程序设计 字符串举例: >> A= 'China ''中国''' ;输出带引号的汉字
>> c='I am fine.' >> s3=char('s', 'y','m','b','o','l','i','c') ;用函数char生成字符串 >> double(s3') ;字符串转换为数值代码 >> abs(s3') >> cellstr(s3) ;字符矩阵转换为字符串 >> b=num2str(a) ;数字转换为字符串 比较 >> b*2 和 str2num(b)*2 >> ab=[A,' ',B,'.'] >> AB=['中国';'北京']
10
第2章 Matlab语言程序设计 d) 单元型变量
单元型变量是一种比较特殊的数据类型,本质上讲,单元型变量实际上是一种以任意形式的数据为元素的多维数组。 单元型变量可以存放任何类型、任何大小的数据, 其大小是不定的。 >> A=[1,2;3,4] A = >> B={1:4, A, 'abcd'} B = [1x4 double] [2x2 double] 'abcd' B为单元型变量(用花括号) >> cellplot(B) >> celldisp(B)
11
第2章 Matlab语言程序设计 e) 结构型变量
结构型变量是另一种可以将不同类型数据组合在一起的数据类型,与单元型变量的不同在于结构型变量是以指针方式来传递数据的。 >> D.a1='abcd'; >> D.a2=1; >> D.a3=[1,2,3,4]; >> D D = a1: 'abcd' a2: 1 a3: [ ] D为结构型变量 >> C=struct('c1',1,'c2',B,'c3','abcd') C = 1x3 struct array with fields: c1 c2 c3 C为结构型变量
12
第2章 Matlab语言程序设计 f) 矩阵、向量
向量是组成矩阵的基本元素之一。可以把行向量看成1n 阶矩阵,把列向量看成n1阶矩阵。向量的基本运算采用数组运算法则。
13
第2章 Matlab语言程序设计 多项式 多项式是以向量的形式表达的。可以是列向量也可以是行向量。 >> p=[1,2,3]
>> poly2sym(p) ans = x^2+2*x+3 >> m=[3;4;5] >> poly2sym(m) 3*x^2+4*x+5
14
第2章 Matlab语言程序设计 2、运算符与操作符 数学运算符 操作符
15
第2章 Matlab语言程序设计 冒号“ :” 可以用来产生向量; 用作矩阵的下标,部分地选择矩阵元素; 进行行循环操作。
续号“ …” 表示一行未完,而在下一行继续; 分号“ ;” 在方括号中,表示矩阵中行的结尾; 用在每行的结尾,则 不显示该行运算的结果。
16
第2章 Matlab语言程序设计 关于逻辑真假的规定:
在所有的关系表达式和逻辑表达式中,输入的任何非 0 数都被看作是“ 逻辑真”,而只有 0 才被认为是“ 逻辑假”; 所有关系表达式和逻辑表达式的计算结果是一个由 0 和 1 组成的“ 逻辑矩阵( Logical Array)”。矩阵中的 1 表示“ 真”,0 表示“ 假”; 逻辑矩阵是一种特殊的数值矩阵。与“ 数值类”有关的操作和函数对它也适用;但它又不同于普通的“ 数值”,它还表示对事物的判断结论“ 真”与“ 假” 。
17
第2章 Matlab语言程序设计 关系操作符 逻辑操作符
18
第2章 Matlab语言程序设计 MATLAB 的关系操作符运算法则: 当两个变量是标量 a 和 b 时
当两个维数相同的矩阵 A 和 B 比较时,矩阵 A、B 比较的是相同位置的元素,按标量的运算规则逐个进行。关系运算的结果是一个和 A维数相同的矩阵,它的元素由 0 和 1 组成。 当一个矩阵A 和一个标量 b 比较时,把标量 b 和矩阵A 的每一个元素按标量关系运算规则逐个比较。关系运算的结果是一个和数组 A维数相同的矩阵,它是由 0 和 1 组成。 优先级 由高到低为算术运算、关系运算和逻辑运算。
19
第2章 Matlab语言程序设计 关系运算举例 >> NE=(A~=B)
>> B=[4,4,1;7,8,4;5,1,7] B = >> E=(A>B) E = >> NE=(A~=B) NE = >> A0=(A>5) A0 = >> B0=(B<=6) B0 =
20
第2章 Matlab语言程序设计 MATLAB 中逻辑操作符的运算法则: 如果两个标量 a 和 b 运算,则:
◆~a:当 a 是 0 时,运算结果是 1,否则是 0。 如果两个维数相同的矩阵A 和 B 参与运算,则: 将矩阵A 和 B 相同位置上的元素按标量的运算规则逐个进行运算。运算的结果是返回一个由 0 和 1 组成的与 A 具有同样维数的矩阵; 如果标量 b 和矩阵A 参与运算,则: ◆将标量 b 和矩阵A 中的每个元素进行逻辑运算。逻辑运算的结果是返回一个由 0和 1 组成的与 A 具有同样维数的矩阵; ◆逻辑“ 非”运算是一元运算符,服从数组运算规则; ◆在逻辑“ 与”、“ 或”、“ 非”三者中, “ 非”的优先级最高,“ 与”与“ 或”具有相同的优先级,从左向右执行。 通过 “( )”可以改变各操作符之间的优先级。
21
第2章 Matlab语言程序设计 逻辑运算举例 >> A=[3,4,8;9,0,2;5,3,7] A = 3 4 8 9 0 2
>> B=[4,4,1;7,8,4;5,1,7] B = >> AB=A&B AB = >> A_B=A|B A_B = >> C=~A C = >> cc=(A>3)&(B<6) cc =
22
第2章 Matlab语言程序设计 3、表达式及函数
Matlab 采用的是表达式语言,用户输入的语句由 Matlab 系统解释运行。用户可以在 Matlab 的命令窗口中键入命令,也可以在编辑器内编写应用程序。 Matlab 语句由表达式和变量组成,有两种最常见的语句形式: 表达式 变量=表达式 >> t=6 t = 6 >> sin(5*t+6) ans = >> y=sin(5*t+6) y =
23
第2章 Matlab语言程序设计 表达式由变量名、运算符、数字和函数名组成。 表达式将按常规的优先纽从左至右执行运算;
优先级的规定是指数运算级别最高,乘除运算次之; 括号可以改变运算顺序; 书写表达式时,赋值符“=”和运算符两侧允许有空格,以增加可读性。但在复数或符号表达式中要尽量避免空格,以防出错; 表达式的末尾加 “;” 时,Matlab系统只把数值赋给变量, 不显示计算结果;不加“;”时, Matlab 系统将会在该条语句的下面直接显示运算结果。
24
第2章 Matlab语言程序设计 Matlab 有十分丰富的函数资源,总共分为24类。 常用有一下几类: 一般函数命令(GENERAL);
操作符与操作(OPERATOR); 数据类型和结构(DATETYPE); 基本矩阵和矩阵操作(ELMAT); 基本数学函数(ELFUN); 二维图(PLOTXY); 图形句柄(GENGRAPH); 三维图(3DGRAPH); 语言和程序设计(LANGUAGE); 文件输入输出函数(IOFUN); 符号工具箱(SYNBOLIC)。
25
上机练习(2) ( 1)创建一个表达式 ,并求当 x=1, y=2 时的z 值。 ( 2)计算 的值,其中 。
( 2)计算 的值,其中 。 ( 3)创建一个包含“ 她是我们班最好的学生”字符串。 ( 4)输入如下两个矩阵 A 和 B,对矩阵 A 和 B 作关系运算,标识出两矩阵中元素相等的位置,元素值不等的位置,并标识出矩阵 A 中所有小于 0 的元素。 , ( 5)对( 4)中的矩阵 A 和 B 作逻辑“ 或”、“ 与”运算,并标识出矩阵 B 中所有大于 2 并小于 5 的元素位置。
26
第2章 Matlab语言程序设计 4、程序结构与流程控制语句 a) 顺序结构
27
第2章 Matlab语言程序设计 b) 条件结构 或 if- else- end 语句
28
第2章 Matlab语言程序设计 折扣问题 绘出函数 的图像。 >> book=20; >> number=40;
绘出函数 的图像。 >> x=-3:0.1:3; >> if x>=1 y=2*x.^2+1; plot(x,y) elseif -1<x<1 y=5; else y=-x.^3; end 折扣问题 >> book=20; >> number=40; >> sums=0.0; >> if number>=30 sums=book*number*0.7; end >> sums sums = 560
29
第2章 Matlab语言程序设计 switch语句
30
第2章 Matlab语言程序设计 多项选择 >> No=input('Please input your choice! ');
>> switch No case 0 disp('return to main menu'); case 1 disp('She is a girl'); case 2 disp('He is a boy'); otherwise disp('I can''t determine') end She is a girl
31
第2章 Matlab语言程序设计 c) 循环结构 while 语句: for语句: for 变量=初值:增量:结束值 程序模块; end
32
第2章 Matlab语言程序设计 举例: >> for I=1:10 >> sum=0;
A(I)=1/(I+1) ; end >> A A = Columns 1 through 7 Columns 8 through 10 >> sum=0; >> i=0; >> while(i<=100) sum=sum+1; i=i+1; end >> sum sum =
33
第2章 Matlab语言程序设计 d) 其它与流程控制有关的语句 if if break语句循环结构 continue 语句循环结构
34
第2章 Matlab语言程序设计 pause 指令使程序运行停止,等待用户按任意键继续;
input 指令提示用户从键盘输入数值、字符串或表达式,并接受输入; disp指令在屏幕上显示字符串; echo on指令显示其后所有执行文件的指令; echo off指令关闭其后所有执行文件的指令显示。
35
第2章 Matlab语言程序设计 5、数据文件的操作
数据文件一般存放在磁盘介质上,用文件名标识,Matlab 系统对文件名没有特殊要求。数据文件的格式有两种形式:一是二进制格式文件,二是ASCII文本文件。 a) 数据文件的打开和关闭 用fopen函数打开数据文件: Fid=fopen(filename,permission); Fid为文件句柄,filename 为文件名。permission 为文件打开格式,可以是:‘r’, ‘w’, ‘a’, ‘r+’, ‘w+’, ‘a+’。 用fclose函数关闭数据文件: Sta=fclose(Fid);
36
第2章 Matlab语言程序设计 数据文件的读写 用fread读二进制数据文件:
[A, COUNT]=fread(Fid, size, precision) 其中:A为数据矩阵,用于存放读取的数据;COUNT返所读取的数据元素个数, Fid 为文件句柄,size为读取范围,是可选项,若不选用则读取整个文件内容,precision用于控制所读数据的精度格式。 例:Fid=fopen(‘std.dat’,’r’); A=fread(Fid,100,’long’); fclose(Fid);
37
第2章 Matlab语言程序设计 用fwrite写二进制文件: COUNT=fwrite(Fid, A, precision)
例: Fid=fopen(‘test.dat’, ‘w’); cnt=fwrite(Fid, A, ‘float’) fclose(Fid); 用fscanf读取ASCII数据文件: [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’);
38
第2章 Matlab语言程序设计 用fprint写ASCII文本数据到文件或屏幕上:
COUNT=fprintf(Fid, format, A, …) 例: x=0:0.1:1; y=exp(x) Fid=fopen('exp.txt', 'w') fprintf(Fid, '%6.2f, %12.8f\n',x,y) fclose(Fid);
39
第2章 Matlab语言程序设计 c) 从磁盘中直接读写内存变量 load将数据文件中的数据直接为workspace中变量
load filename –ascii load filename save将workspace中变量直接写到数据文件中 save filename A, … -ascii save filename A, …
40
第2章 Matlab语言程序设计 6)M文件编程 a) 命令式文件
如果要输入较多的命令,而且要经常对这些命令重复输入,利用命令文件将显得比较简单方便。 建立命令文件的方法根简单,就是将要输入的所有指令按顺序放到一个扩展名为“.m”的文本文件中,每次运行时只要输入M文件的文件名即可。 在命令文件运行过程中产生的所有变量均是全局变量。
41
第2章 Matlab语言程序设计 例:编一个画宝石项链的程序 echo on t=(0:0.02:2)*pi; x=sin(t);
y=cos(t); z=cos(2*t); plot3(x,y,z,'b-',x,y,z,'bd') view([-80,60]) box on legend(‘链子’,‘宝石’); 存入文件necklace.m
42
第2章 Matlab语言程序设计 函数式文件 函数文件和命令文件的区别在于:命令文件的变量在文件执行完程序后仍然保留在内存中,而函数文件内定义的变量为内部变量,仅在函数文件内部起作用。 函数M文件通常由以下五部分组成: 函数定义行; 函数帮助行; 在线函数帮助文件; 注释; 函数体。
43
第2章 Matlab语言程序设计 例:计算第n个Fibonnaci斐波纳契数 (一种整数数列, 其中每数等于前面两数之和)
function f=fibfun(n) 函数定义行 n—函数输入;f—函数输出;fibfun—函数名。 % FIBFUN For calculating Fibonacci numbers 函数帮助行 % Incidengtally, the name fibonacci comes from % Filius Bonassi, or “son of Bonassus” 在线函数帮助文件 % fibfun.m if n>2 f=fibfun(n-1)+fibfun(n-2); 函数体 else f=1; end 注意:文件名必须与函数名相同 执行: fibfun(17), help fibfun, lookfor fibfun
44
第2章 Matlab语言程序设计 7、M文件调试 语法错误和运行错误
对于运行错误,Matlab提供了M文件的调试(Debug)工具。 对于命令文件,可以直接在文件编辑器中设置断点,用调试工具(菜单或工具栏)分步执行,并在工作空间中检查每个变量的值。(以necklace.m为例) 对于函数文件,可以先在文件编辑器中设置断点,再到命令行状态执行函数,然后再回到文件编辑器中进行观察和调试。(以fibfun.m为例)
45
上机练习(3) ( 1)利用 for 循环求 1!+2!+3!…+20!的值。 ( 2)用 while 循环求 1~200 之间的整数之和。
( 3)编写一个 M 文件,画出下列分段函数所表示的曲面。 ( 4)编写一个求圆的面积的函数文件。 ( 5)编写一个求圆的面积的命令文件
Similar presentations