参考课程:台大郭彦甫教授MATLAB课程
脚本编写 & 结构化编程
新建脚本文件
新建脚本文件,保存到自己的项目工作空间:
【注】
- 选中代码段,使用智能缩进(Smart Indent)
- 使用%可进行每一行的注释
- 使用%%将代码段分成区块
- 选中某一区块,运行节(Run section),只执行该区块代码
- 运行(Run),执行所有代码
控制流语句
程序按照一定的语句逻辑顺序执行
控制流语句 | 说明 |
---|---|
if,elseif,else | 条件为 true 时执行语句 |
for | 循环特定次数,并通过递增的索引变量跟踪每次迭代 |
switch,case,otherwise | 执行多组语句中的一组 |
try,catch | 执行语句并捕获产生的错误 |
while | 循环语句,条件仍然为 true 就进行循环 |
break | 终止执行 for 或 while 循环,结束整个循环迭代 |
continue | 结束本次循环迭代,下一次正常进行 |
end | 结束语句块,形成一个区块,与其他区块区分开来 |
pause | 暂停程序执行 |
return | 返回至调用脚本或函数处 |
逻辑运算符
【注】
- matlab中的不等于是“~=”,而不是“!=”
if elseif else
语法格式:
if 条件1
语句1
elseif 条件2
语句2
else
语句3
end
【测试】
switch
语法格式:
switch expression(可能有很多种变化的数值变量)
case 值1
语句1
case 值2
语句2
.
.
otherwise
语句n
end
【测试】
%%
input_num = 1;
switch input_num
case -1
disp('negative 1');
case 0
disp('zero');
case 1
disp('positive 1');
otherwise
disp('other value');
end
while
语法格式:
while 表达式
语句
end
【测试】
%%
n = 1;
while prod(1:n) < 1e100 % prod函数:连乘操作 n!<= 10的100次方
n = n + 1;
end
disp(n)
【练习1】
%%
i = 1;
sum = 0;
while i <= 999
sum = sum + i
i = i + 1
end
disp(sum)
for
语法格式:
for 变量名=start:increment(增量;步长):end
语句
end
【测试1】
【注】
要记得时刻注意我们的变量此时工作空间的情况,直接改变某些代码并不能改变原来变量的数据,它会保存原来旧的数据,我们必须要同过clear指令清楚掉变量的旧数据,才能得到修改代码后更新的结果。
【练习2】求2的奇数次方
%%
for n = 1:2:10
a(n) = 2^n;
end
k = 1;
for i = 1:size(a)
if a(i) == 0
continue
end
b(k) = a(i);
k = k + 1;
end
disp(b)
使用循环语句可以尽量预先分配内存空间,这样的话会提升效率
- Pre-allocation(预先声明需要的变量所占的内存空间大小)
【例】
【练习3】
【测试】
编写脚本文件的小tips
- clc:清空命令行窗口
- close all:关掉所有figure结果
- 使用“…+Enter”:换行,对于一行语句过长的情况
- Ctrl+C:程序宕机 / 循环进行时,跳出循环指令
函数
查看matlab的内建函数:
- edit(which(‘函数名.m’))
用户自定义函数
【例1】自由落体(一个输出)
x
=
x
0
+
v
0
t
+
1
2
g
t
2
x=x_0+v_0t+\frac{1}{2}gt^2
x=x0+v0t+21gt2
function x = freebody(x0,v0,t)
x = x0 + v0 .* t + 1 / 2 * 9.8 * t .* t;
【例2】加速度(多个输出)
a
=
v
2
−
v
1
t
2
−
t
1
a=\frac{v_2-v_1}{t_2-t_1}
a=t2−t1v2−v1
F
=
m
a
F=ma
F=ma
function [a F] = acc(v2,v1,t2,t1,m)
a = (v2 - v1) ./ (t2 - t1);
F = m .* a;
【练习4】
输入一个华氏温度,函数将其转换成摄氏温度,并显示转换结果,函数要求一直可以输入温度,直到输入的不是数字(直接输入回车),程序结束
function C = F2C()
while 1
prompt = 'Please input the temperature in F:';
F = input(prompt);
if isempty(F)
break
end
C = (F - 32) .* (5 / 9);
disp(['Temperature in C: ' num2str(C)]);
end
Function Default Variables
自定义函数时,会遇到某些输入变量个数变化的情况,需要我们去进行定义,从而使用者在使用函数时,对于不同的输入形式能得到相应不同的结果:
见文档:输入输出参数
Function Handles(函数句柄)
%%
f = @(x) exp(-2*x);
x = 0:0.1:2;
plot(x,f(x));