中国大学MOOC 科学计算与MATLAB语言(点击此处跳转)
3.1 程序文件
脚本文件和函数文件
- 在MATLAB中程序文件的扩展名为.m,所以程序文件也称为M文件。
- 程序文件分为脚本文件和函数文件。
文件类型 | 说明 |
---|---|
脚本文件 | 可在命令行窗口直接执行的文件,也叫命令文件 |
函数文件 | 定义一个函数,不能直接执行,而必须以函数调用的方式来调用它 |
文件的建立
- 用edit命令创建文件。例如
>> edit test
- 用命令按钮创建文件。
#建立脚本文件f1.m
A=[1,2,3;4,5,6];
B=[1,2;3,4;5,6];
C=A*B
#在命令行窗口运行脚本文件
>> f1
C =
22 28
49 64
#建立函数文件f2.m
function C=f2(A,B)
C=A*B;
#在命令行窗口调用函数文件
>> A=[1,2,3;4,5,6];
>> B=[1,2;3,4;5,6];
>> C=f2(A,B)
C =
22 28
49 64
程序的三种基本结构分别是顺序结构、选择结构和循环结构。
3.2 顺序结构程序
MATLAB指令 | 功能 |
---|---|
input(提示信息,选项) | 数据的输入 |
disp(输出项) | 数据的输出 |
pause(延迟秒数) | 程序的暂停,若要强行中止程序的运行可使用Ctrl+C命令 |
#数据的输入
>> A=input('请输入变量A的值:');
请输入变量A的值:100
#数据的输出
>> s='Hello,World';
>> disp(s)
Hello,World
>> a=[1,2,3;4,5,6];
>> disp(a)
1 2 3
4 5 6
拓展:黄金分割点
黄金分割点源于黄金矩形。设矩形的长和宽分别为 x 和 y。把这个矩形裁掉一个边长为 y 的正方形后,剩下的小矩形的形状与原来的矩形完全一致,即矩形的长宽之比相同。
由黄金矩形的定义
\[\cfrac {x}{y}=\cfrac {y}{x-y} \implies x^2-xy-y^2=0 \]解得
\[x=\cfrac {y\pm y\sqrt{5}}{2} \implies \cfrac {x}{y}=\cfrac {1\pm\sqrt{5}}{2} \]取
\[\cfrac {x}{y}=\cfrac {1+\sqrt{5}}{2} \implies y=\cfrac{\sqrt{5}-1}{2}x \]即
\[y=0.618x \]3.3 选择结构程序
用if语句实现选择结构
单分支if语句
if 条件 #关系运算或逻辑运算。
语句组 #可以是一条语句,也可以是多条语句。
end
1.当条件结果为标量时,非零表示条件成立,零表示条件不成立。
2.当条件结果为矩阵时,如果矩阵为非空,且不包含零元素,则条件成立,否则不成立。
例如,[1,2;0,4]表示条件时,条件不成立;[1,2;3,4]表示条件时,条件成立。
双分支if语句
if 条件
语句组1
else
语句组2
end
多分支if语句
if 条件1
语句组1
elseif 条件2
语句组2
…
elseif 条件m
语句组m
else
语句组n
end
#输入一个字符,若为大写字母,则输出其对应的小写字母
#若为小写字母,则输出其对应的大写字母
#若为数字字符则输出其对应数的平方
#若为其他字符则原样输出
c=input('请输入一个字符:','s');
if c>='A' && c<='Z'
disp(lower(c))
elseif c>='a' && c<='z'
disp(upper(c))
elseif c>='0' && c<='9'
disp(str2double(c)^2)
else
disp(c)
end
用switch语句实现选择结构
switch 表达式
case 结果表1
语句组1
case 结果表2
语句组2
…
case 结果表m
语句组m
otherwise
语句组n
end
注意:
1.switch表达式应该是一个其值可以列举的表达式。
例如,double不可列举,所以不能作为switch表达式的值
2.case结果表为switch表达式的取值,当取值有多个时,用单元数据表示。
3.当任意一个分支的语句执行完后,整个switch语句执行完毕(区别于C语言的switch语句)。
#输入一个英文单词,判断它是否以元音字母开头
#程序1
c=input('请输入一个单词:','s');
switch c(1)
case {'A','E','I','O','U','a','e','i','o','u'}
disp([c,'以元音字母开头']);
otherwise
disp([c,'以辅音字母开头']);
end
#程序2
c=input('请输入一个单词:','s');
if findstr(c(1),'AEIOUaeiou')>0
disp([c,'以元音字母开头']);
else
disp([c,'以辅音字母开头']);
end
1.switch表达式可用取整函数来保证其值的可列举性。
2.case结果表取值有多个时可用num2cell函数将数值矩阵转化为单元矩阵。
3.4 循环结构程序
用for语句实现循环结构
for 循环变量=表达式1:表达式2:表达式3 #初值:步长:终值
循环体语句
end
说明:
1.for语句针对向量的每一个元素执行一次循环体。
2.退出循环之后,循环变量的值就是向量中最后的元素值。
3.当向量为空时,循环体一次也不执行。例如1:-2:10
for语句更一般的格式为
for 循环变量=矩阵表达式
循环体语句
end
执行过程是依次将矩阵的各列元素赋给循环变量,然后执行循环体语句,直到各列元素处理完毕循环结束。
拓展:计算圆周率 \(\pi\)
(1)利用无穷级数展开式求 \(\pi\) 的近似值
\[\cfrac {\pi}{4}=1-\cfrac {1}{3}+\cfrac {1}{5}-\cfrac {1}{7}+\cdots+(-1)^{n+1}\cfrac {1}{2n-1} \]#程序1
y=0;
g=-1;
n=input('n=?');
for i=1:n
g=-g;
y=y+g/(2*i-1);
end
pai=4*y
#程序2
#用向量计算方法写出来的程序更加简洁,也更加具有MATLAB的特点。
n=input('n=?');
x=1:2:(2*n-1);
y=(-1).^(2:n+1)./x;
pai=sum(y)*4
(2)利用定积分的近似值求 \(\pi\) 的近似值
a=0;
b=1;
n=input('n=?');
h=(b-a)/n;
x=a:h:b;
f=sqrt(1-x.*x);
s=[];
for k=1:n
s1=(f(k)+f(k+1))*h/2;
s=[s,s1];
end
pai=4*sum(s)
(3)利用蒙特卡洛法求 \(\pi\) 的近似值
s=0;
n=input('n=?');
for i=1:n
x=rand(1);
y=rand(1);
if x*x+y*y<=1
s=s+1;
end
end
pai=s/n*4
用while语句实现循环结构
while 条件 #循环判断条件
循环体语句
end
说明:
1.while语句多用于循环次数不确定的情况,而对于循环次数确定的情况,使用for语句更方便。
2.针对不同情况可以选择不同的循环语句,但从功能上讲两种循环语句可以相互替代。
语句 | 说明 |
---|---|
break | 跳出循环体,结束整个循环 |
continue | 结束本次循环,接着进行下一次是否执行循环的判断 |
循环的嵌套
- 如果一个循环结构的循环体又包括一个循环结构,就称为循环的嵌套,或称为多重循环结构。
- 处于内部的循环叫做内循环,处于外部的循环叫做外循环。
拓展:用筛选法求素数
筛选法求素数的基本思想:要找出 \(2\text{~}m\) 之间的全部素数,首先在 \(2\text{~}m\) 中划去 \(2\) 的倍数(不包括 \(2\)),然后划去 \(3\) 的倍数(不包括 \(3\)),由于 \(4\) 已被划去,再找 \(5\) 的倍数(不包括\(5\)),\(\cdots\),直到再划去不超过 \(
标签:语句,文件,end,函数,程序流程,cfrac,循环,matlab,MATLAB From: https://www.cnblogs.com/YuukiAsuna/p/17083682.html