Matlab命令执行方式有交互式的命令执行与脚本两种方式。交互式的命令执行方式,在命令行窗口逐条输入命令,MATLAB逐条解释执行;而脚本方式,将有关命令编成程序存储在一个扩展名为.m的文件中,每次运行该脚本,Matlab就会自动依次执行脚本中的命令。
首先,在编辑脚本之前,先了解Matlab的编辑器。Matlab编辑器界面包括功能区和编辑区两个部分。如图:
然后,选择启动Matlab编辑器的方式:
最后,进行编辑脚本。建立一个脚本,其功能是:用两个实变量R、M生成复变量RM,然后运行该脚本。建立脚本文件并以文件名setcomp.m保存在当前目录下。
%示例:在指定的Matlab工作目录下,对命令窗口进行输入:
>> edit setcomp
%创建文件名后会自动跳转在编辑器下,然后输入如下代码并保存:
R=[1,2,3;4,5,6];
M=[11,12,13;14,15,16];
RM=complex(R,M);
>> %再在命令行窗口中输入脚本文件名,按Enter运行:
>> setcomp
>>%运行后,再输入RM,查看结果:
>> RM
RM =
1.0000 +11.0000i 2.0000 +12.0000i 3.0000 +13.0000i
4.0000 +14.0000i 5.0000 +15.0000i 6.0000 +16.0000i
程序控制方式是指在程序控制下进行的数据传递方式。程序控制结构是指以某种顺序执行的一系列动作,用于解决某个问题。其中,程序控制结构包括顺序、选择、循环这三种的基本控制结构。另外,每种结构仅有一个入口和出口。由这3种基本结构组成的多层嵌套程序称为结构化程序。
顺序结构的程序设计是最简单的,按照解决问题的顺序写出相应的语句,计算机按此顺序逐条执行语句,当一条语句执行完毕,控制自动转到下一条语句。
数据的输入:
input()函数:通过键盘的输入获取数据
调用格式:data = input(提示信息),其中,提示信息为字符串,用于提示用户输入相应的数据。
注:若要输入字符串,需要前后加单撇号或双引号,界定字符串的起始和结束;或调用另一种格式:data = input(提示信息,‘s’)数据的输出:
disp()函数:用于在命令窗口显示变量和表达式的值
调用格式:disp(输出项),其中,输出项既可以为字符串,也可以为矩阵。
%示例:
>> matrix1 = input('创建2x3阶元素全为1的矩阵:')
创建2x3阶元素全为1的矩阵:ones(2,3)
matrix1 =
1 1 1
1 1 1
>> name = input('请输入你的名字:')
请输入你的名字:'小明'
name =
'小明'
>> %或者:
>> name = input('请输入你的名字:','s')
请输入你的名字:小明
name =
'小明'
>> disp(matrix1)
1 1 1
1 1 1
>> disp(name)
小明
选择结构又称为分支结构。当程序执行到控制分支的语句时,首先判断条件,根据条件表达式的值选择相应的语句执行。分支结构包括单分支、双分支和多分支三种形式。
(1)单分支:
if 条件表达式
语句块
(2)双分支:
if 条件表达式1
语句块1
else
语句块2
(3)多分支:
if 条件表达式1
语句块1
elseif 条件表达式2
语句块2
…
elseif 条件表达式n
语句块n
else
语句块n+1
end
%在指定的Matlab工作目录下,对命令窗口进行输入:
>> edit opt %创建脚本
%创建文件名后会自动跳转在编辑器下,然后输入如下代码并保存:
%示例:
%输入一个字符,若为大写字母,则输出其对应的小写字母;
%若为小写字母,则输出其对应的大写字母;
%若为数字字符则输出其对应数的平方,若为其他字符则原样输出。
str = input("请输入一个字符:","s");
if str >= 'A' && str <= 'Z'
disp(lower(str));
elseif str >= 'a' && str <= 'z'
disp(upper(str));
elseif str >= '0' && str <= '9'
disp(str2double(str)^2);
else
disp(str);
end
>> %再在命令行窗口中输入脚本文件名,按Enter运行:
>> edit opt
>> opt
请输入一个字符:S
s
循环结构是当程序执行到循环控制语句时,根据循环判定条件对一组语句重复执行多次。循环结构可以看成是一个条件判断语句和一个向回转向语句的组合,可以实现有规律的重复计算处理。另外,循环结构的三个要素:循环变量、循环体和循环终止条件。
break语句用于终止循环的执行;continue语句控制跳过循环体中的某些语句。
(1)for语句:
for 循环变量=表达式1:表达式2:表达式3
循环体语句
end
其中,表达式1的值为循环变量的初值,表达式2的值为步长,表达式3的值为循环变量的终值。步长为1时,表达式2可以省略。
(2)while语句:
while 条件表达式
循环体语句
end
%在指定的Matlab工作目录下,对命令窗口进行输入:
>> edit NarcissisticNumber %创建脚本
%创建文件名后会自动跳转在编辑器下,然后输入如下代码并保存:
%示例:
%一个各位数字的立方和等于该数本身的3位整数称为水仙花数。输出全部水仙花数
Nar_num = []; %创建空矩阵存放结果
for n = 100:999
bai = fix(n/100); %求n的百位数字
shi = mod(fix(n/10),10); %求n的十位数字
ge = mod(n,10); %求n的个位数字
if n == bai^3+ shi^3 + ge^3
Nar_num=[Nar_num,n]; %存入结果
end
end
disp(Nar_num)
>> %再在命令行窗口中输入脚本文件名,按Enter运行:
>> NarcissisticNumber
153 370 371 407
计算机的函数,是一个固定的一个程序段,或称其为一个子程序,它在可以实现固定运算功能的同时,还带有一个入口和一个出口,所谓的入口,就是函数所带的各个参数,我们可以通过这个入口,把函数的参数值代入子程序,供计算机处理;所谓出口,就是指函数的函数值,在计算机求得之后,由此口带回给调用它的程序。函数能提高应用的模块性与代码的重复利用率。
在Matlab中,扩展名为.m的文件称为M文件,是一种程序化的编程语言,分为脚本文件(scripts)和函数文件(functions)。而函数文件是在脚本文件的基础上多添加了一行函数定义行。
函数文件的基本结构:
1.函数名的命名规则与变量名的命名规则相同;
2.有多个参数时,参数和参数之间用逗号分隔;
3.若输出参数多于一个,则应该用方括号括起来。
函数文件的基本格式:
function 输出形参表=函数名(输入形参表)
注释说明部分
函数体语句
函数调用的基本格式:
[输出实参表]=函数名(输入实参表)
函数调用时各实参出现的顺序,应与函数定义时形参的顺序一致
%点击"新建",再点击"函数",创建函数文件
%编写函数文件,求1/(m+1)+1/(m+2)+…+1/(m+n)与1/m(m+1)+1/(m+1)(m+2)+…+1/(m+n−1)(m+n)。
function [s1,s2]=sumfraction(m,n)
%SUM sumfraction.m calculates sum of fractions
%m 区间下界
%n 区间上界
%s1 1/(m+1)+1/(m+2)+...+1/(m+n)
%s2 1/m/(m+1)+1/(m+1)/(m+2)+...+1/(m+n-1)/(m+n)
s1=0;s2=0;
for k=m+1:m+n
s1=s1+1/k;
s2=s2+1/(k-1)/k;
end
>> %在命令窗口调用以上定义的函数,示例:
>> %求1/(8+1)+1/(8+2)+…+1/(8+8)与1/8*(8+1)+1/(8+1)(8+2)+…+1/(8+8−1)(8+8)。
>> %形参m、n对应的值分别为8、8。
>> [s1,s2]=sumfraction(8,8)
s1 =
0.6629
s2 =
0.0625
匿名函数是一种特殊的函数定义形式,不存储成函数文件。匿名函数的调用与标准函数的调用方法一样,但定义只能包含表达式。通常,匿名函数与函数句柄变量相关联,通过句柄变量调用该匿名函数。
定义匿名函数的基本格式:
函数句柄变量=@(匿名函数输入参数)匿名函数表达式
%示例:
>> func = @(x)8*x+8;
>> num = 88;
>> number = func(num)
number =
712
猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个;第二天早上又将剩下的桃子吃掉一半,又多吃了一个 。以后每天早上都吃前一天剩下的一半且多一个 。到第 10天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少个桃子?请用循环编程解决该问题。
%解答:
>> %普通循环算法:
>> x(1)=1;
>> for i=1:9
x(i+1)=2*x(i)+2;
end
>> x(10)
ans =
1534
>> %递归循环算法:
>> edit MonkeyEatSpeech
function [S] = MonkeyEatSpeech(x)
if x == 10
S = 1;
else
S = 2+2*MonkeyEatSpeech(x+1);
end
>> S = MonkeyEatSpeech(1)
S =
1534