*
Lecture 3
MATLAB程序
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
*
基本要求:
(1)学会 Matlab 的M文件的编写
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
,包括命令文件和函数文件。了解M件的调试命令和调试方法;
(2) 熟练掌握 Matlab 的程序结构(顺序结构、循环结构和分支结构)与流程控制语句 .
Outline
M-file(M文件);
数据的输入和输出;
程序设计;
函数文件;
全局变量和局部变量
Lecture3 Matlab语言程序设计
*
MATLAB有两种工作方式:
交互式的命令行工作方式
M文件的程序工作方式
*
一. M文件
*
一. M文件
用MATLAB语言编写的程序,称为M文件。
M文件有两类:命令文件和函数文件。
命令文件:没有输入参数,也不返回输出参数。
函数文件:可以输入参数,也可返回输出参数。
*
1.M文件的建立与编辑
建立新的M文件:
从MATLAB命令窗口的File菜单中选择New菜单项,再选择M-file命令。
一. M文件
编辑已有的M文件:
从MATLAB命令窗口的Flie菜单中选择Open M-file命令。
*
2.命令文件
将需要运行的命令编辑到一个命令文件中,然后在MATLAB命令窗口输入该命令文件的名字,就会顺序执行命令文件中的命令。
【例1】 建立一个命令文件将变量a,b的值互换。
一. M文件
a=1:9;
b=[11,12,13;14,15,16;17,18,19];
c=a;a=b;b=c;
a
b
在MATLAB的命令窗口中输入e31,将会执行该命令文件。
*
二.数据的输入输出
*
1. input函数:用于向计算机输入一个参数。
调用格式: A=input(提示信息,选项);
注:‘s’选项,则允许用户输入一个字符串。
例如想输入一个人的姓名,可采用命令
xm=input('What''s your name:','s')
【例2】 求一元二次方程a2 +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)]
将该程序以aa.m文件存盘,然后运行aa.m文件。
*
2. pause函数:暂停程序的执行。
调用格式: pause(延迟秒数)
注:如果省略延迟时间,直接使用pause,则将暂停程序,直到用户按任一键后程序继续执行。
另: 若要强行中止程序的运行可使用Ctrl+C命令。
二.数据的输入输出
3. disp函数:命令窗口输出函数。
调用格式: disp(输出项)
注:输出项为字符串或矩阵。
例如
A='Hello,MATLAB';
disp(A)
输出为: Hello,MATLAB
例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)];
disp(['x1=',num2str(x(1)),',x2=',num2str(x(2))]);
*
三.程序设计
*
三.程序设计
1、程序结构与流程控制语句
a) 顺序结构
*
b) 条件结构
if- else- end 语句
三.程序设计
或
*
switch语句
三.程序设计
*
c) 循环结构
while 语句:
for语句:
for 变量=初值:增量:结束值
程序模块;
end
三.程序设计
*
break语句循环结构
continue 语句循环结构
三.程序设计
d) 其它与流程控制有关的语句
if
if
*
(一)选择结构
选择结构的语句有if语句和switch语句。
1. if语句
格式一: if 条件
语句组
end
三.程序设计
格式二: if 条件
语句组1
else
语句组2
end
*
(一)选择结构
格式三: if 条件1
语句组1
elseif 条件2
语句组2
……
elseif 条件m
语句组m
else
语句组m+1
end
三.程序设计
*
折扣问
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
>> book=20;
>> number=40;
>> sums=0.0;
>> if number>=30
sums=book*number*0.7;
end
>> sums
sums =
560
三.程序设计
*
【例4】 输入三角形的三条边,求面积。
A=input('请输入三角形的三条边:');
if A(1)+A(2)>A(3) & A(1)+A(3)>A(2) & A(2)+A(3)>A(1)
p=(A(1)+A(2)+A(3))/2;
s=sqrt(p*(p-A(1))*(p-A(2))*(p-A(3)));
disp(s);
else
disp('不能构成一个三角形。')
end
运行: 请输入三角形的三条边:[4 5 6]
9.9216
三.程序设计
(一)选择结构
*
【例5】 输入一个字符,若为大写字母,则输出其后继字符,若为小写字母,则输出其前导字符,若为其他字符则原样输出。
c=input('','s');
if c>='A' & c<='Z'
disp(setstr(abs(c)+1));
elseif c>='a'& c<='z'
disp(setstr(abs(c)-1));
else
disp(c);
end
三.程序设计
(一)选择结构
*
2 switch语句
switch语句根据变量或表达式的取值不同,分别执行不同的语句。其格式为:
switch 表达式
case 值1
语句组1
case 值2
语句组2
……
case 值m
语句组m
otherwise
语句组m+1
end
三.程序设计
(一)选择结构
*
【例6】 根据变量 num 的值来决定显示的内容。
num=input('请输入一个数');
switch num
case -1
disp('I am a teacher.');
case 0
disp('I am a student.');
case 1
disp('You are a teacher.');
otherwise
disp('You are a student.');
end
三.程序设计
(一)选择结构
*
*
可编辑
例7: 某商场对顾客所购买的商品实行打折销售,
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
如下(商品价格用price来表示):
price<200 没有折扣
200≤price<500 3%折扣
500≤price<1000 5%折扣
1000≤price<2500 8%折扣
2500≤price<5000 10%折扣
5000≤price 14%折扣
输入所售商品的价格,求其实际销售价格。
程序如下:
price=input('请输入商品价格');
switch fix(price/100)
case {0,1} %价格小于200
rate=0;
case {2,3,4} %价格大于等于200但小于500
rate=3/100;
case num2cell(5:9) %价格大于等于500但小于1000
rate=5/100;
case num2cell(10:24) %价格大于等于1000但小于2500
rate=8/100;
case num2cell(25:49) %价格大于等于2500但小于5000
rate=10/100;
otherwise %价格大于等于5000
rate=14/100;
end
price=price*(1-rate) %输出商品实际销售价格
*
(二)循环结构
实现循环结构的语句:for语句和while语句。
1. for语句:
格式: for 循环变量=表达式1:表达式2:表达式3
循环体语句
end
注:其中表达式1的值为循环变量的初值,表达式2的值为步长,表达式3的值为循环变量的终值。步长为1时,表达式2可以省略。
三.程序设计
*
2. while语句
格式为:
while (条件)
循环体语句
end
三.程序设计
(二)循环结构
*
>> sum=0;
>> i=0;
>> while(i<=100)
sum=sum+1;
i=i+1;
end
>> sum
sum =
14196774
举例:
三.程序设计
>> for I=1:10
A(I)=1/(I+1) ;
end
>> A
A =
Columns 1 through 7
0.5000 0.3333 0.2500 0.2000 0.1667 0.1429 0.1250
Columns 8 through 10
0.1111 0.1000 0.0909
*
3. 循环的嵌套
如果一个循环结构的循环体又包括一个循环结构,就称为循环的嵌套,或称为多重循环结构。
多重循环的嵌套层数可以是任意的。可以按照嵌套层数,分别叫做二重循环、三重循环等。处于内部的循环叫作内循环,处于外部的循环叫作外循环。
三.程序设计
(二)循环结构
*
【例8】 求[100,1000]以内的全部素数。
n=0;
for m=100:1000
flag=1; j=m-1;
i=2;
while i<=j & flag
if rem(m,i)==0
flag=0;
end
i=i+1;
end
if flag
n=n+1;
prime(n)=m;
end
end
prime %变量prime存放素数
三.程序设计
(二)循环结构
例9: 一个三位整数各位数字的立方和等于该数本身则称该数为水仙花数。输出全部水仙花数。
程序如下:
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
例10: 求[100,200]之间第一个能被21整除的整数。
程序如下:
for n=100:200
if rem(n,21)~=0
continue
end
break
end
n
例11: 若一个数等于它的各个真因子之和,则称该数为完数,如6=1+2+3,所以6是完数。求[1,500]之间的全部完数。
程序:for m=1:500
s=0;
for k=1:m/2
if rem(m,k)==0
s=s+k;
end
end
if m==s
disp(m);
end
end
*
pause 指令使程序运行停止,等待用户按任意键继续;
input 指令提示用户从键盘输入数值、字符串或表达式,并接受输入;
disp指令在屏幕上显示字符串;
echo on指令显示其后所有执行文件的指令;
echo off指令关闭其后所有执行文件的指令显示。
三.程序设计
*
四.函数文件
*
函数文件是另一种形式的M文件,每一个函数文件都定义一个函数。事实上,MATLAB提供的标准函数大部分都是由函数文件定义的。
四. 函数文件
1.函数文件格式
函数文件由function语句引导,其格式为:
function 输出形参表=函数名(输入形参表)
注释说明部分
函数体
注:其中函数名的命名规则与变量名相同。输入形参为函数的输入参数,输出形参为函数的输出参数。当输出形参多于1个时,则应该用方括号括起来。
*
2.函数调用
函数文件编制好后,就可调用函数进行计算了。如上面定义ffib函数后,调用它求小于2000的Fibonacci数。
函数调用的一般格式是:
[输出实参表]=函数名(输入实参表)
四. 函数文件
例12: ,计算f(1)f(2)+f2(3),f(5), f(6), ….,f(100)
首先建立一个M函数:fun1.m
function Y= fun1(x)
Y=(x^3 - 2*x^2 + x - 6.3)/(x^2 + 0.05*x - 3.14);
在指令窗口运行以下指令:
fun1(1)*fun1(2)+fun1(3)*fun1(3)
ans =
-12.6023
*
*
*
【例14】 编写函数文件求小于任意自然数n的Fibonacci数列各项。
function f=ffib(n)
%用于求Fibonacci数列的函数文件
%f=ffib(n)
%1999年9月30日编
f=[1,1];
i=1;
while f(i)+f(i+1)
记录
混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载
调用该函数时的输入实参和输出实参的个数。只要在函数文件中包含这两个变量,就可以准确地知道该函数文件被调用时的输入输出参数个数,从而决定函数如何进行处理。
四. 函数文件
*
【例16】 nargin用法示例
函数文件examp.m:
function fout=charray(a,b,c)
if nargin==1
fout=a;
elseif nargin==2
fout=a+b;
elseif nargin==3
fout=(a*b*c)/2;
end
命令文件mydemo.m:
x=[1:3];y=[1;2;3];
examp(x)
examp(x,y')
examp(x,y,3)
执行mydemo.m后的输出是:
ans =
1 2 3
ans =
2 4 6
ans =
21
四. 函数文件
*
五.全局变量和局部变量
*
在MATLAB中,全局变量用命令global定义。函数文件的内部变量是局部的,与其他函数文件及MATLAB工作空间相互隔离。但是,如果在若干函数中,都把某一变量定义为全局变量,那么这些函数将公用这一个变量。全局变量的作用域是整个MATLAB工作空间,即全程有效。所有的函数都可以对它进行存取和修改。因此,定义全局变量是函数间传递信息的一种手段。
四. 函数文件
*
四. 函数文件
【例17】 全局变量应用示例
先建立函数文件wadd.m,该函数将输入的参数加权相加。
function f=wadd(x,y)
%add two variable
global ALPHA BETA
f=ALPHA*x+BETA*y;
在命令窗口中输入:
global ALPHA BETA
ALPHA=1;
BETA=2;
s=wadd(1,2)
输出为:
s =
5
*
*
可编辑