1. MATLAB
界面
2. 结构化编程
2.1 控制流
控制语句 | 作用 |
---|---|
if, elseif, else | 如果 condition 为真,执行语句 |
switch, case, otherwise | 根据switch语句内容判断执行哪个子句 |
while | 重复执行子句直到while中的条件为假 |
for | 执行指定次数的语句 |
try, catch | 执行子句并捕获执行过程中的异常 |
break | 跳出循环 |
continue | 直接进入下一次循环 |
end | 结束子句 |
pause | 暂停程序 |
return | 将控制权返回给调用函数 |
控制语句实例:
if
语句
if rem(a, 2) == 0
disp('a is even');
else
disp('a is odd');
end
switch
语句
switch input_num
case -1
disp('negative 1');
case 0
disp('zero');
case 1
disp('positive 1');
otherwise
disp('other value');
end
while
语句
n = 1;
while prod(1:n) < 1e100
n = n + 1;
end
for
语句
for n=1:10
a(n)=2^n;
end
disp(a)
break
语句:
x = 2; k = 0; error = inf;
error_threshold = 1e-32;
while error > error_threshold
if k > 100
break
end
x = x - sin(x)/cos(x);
error = abs(x - pi);
k = k + 1;
end
2.2 预分配空间给变量
-
程序一:
tic for ii = 1:2000 for jj = 1:2000 A(ii,jj) = ii + jj; end end toc
执行结果:
历时 5.221820 秒。
-
程序二:
tic A = zeros(2000, 2000); % 预先为变量分配内存空间 for ii = 1:size(A,1) for jj = 1:size(A,2) A(ii,jj) = ii + jj; end end toc
执行结果:
历时 0.071947 秒。
-
程序一比程序二所用的时间更长。因为对于程序一,没有预先为变量
A
分配内存,因此每当A
的形状发生改变时,都需要重新为A
分配内存地址。
3. 脚本与函数
脚本 | 函数 |
---|---|
没有输入参数 | 有输入参数 |
没有输出参数 | 有输出参数 |
对全局工作区中的数据进行操作 | 对本地工作区中的数据进行操作 |
3.1 编写脚本时应注意的问题
① 在脚本开头应添加语句清空工作区:
clear all % 清空工作区内存中的变量
close all % 关闭之前程序绘制的图像
clc % 清空之前程序在终端的输出
② 在运算和赋值语句后应添加分号;
抑制输出
③ 使用省略号...
拼接多行语句,提高代码可读性
annPoints_sampled = annPoints(annPoints(:,1)>x1 & ...
annPoints(:,1) < x2 & ...
annPoints(:,2) > y1 & ...
annPoints(:,2) < y2);
3.1 脚本
创建脚本,请使用 edit 命令。
edit mysphere % 该命令会打开一个名为 mysphere.m 的空白文件,edit 后若为存在的脚本名,则会优先打开已存在的脚本
3.2 实时脚本
3.2.1 创建可执行记事本
创建组合了代码、输出和格式化文本的脚本。将代码划分成易于管理、可以单独运行的代码节。查看代码旁边所产生的结果和可视化内容。使用格式化文本、标题、图像和超链接增强您的代码和结果。使用交互式编辑器插入方程,或者使用 LaTeX 创建方程。将代码、结果和格式化文本保存到一个可执行文档中。
3.2.2 分享您的工作成果
添加交互式控件,让其他人能试验您代码中的参数。隐藏您的代码,以创建简单的应用程序和控制板。以 HTML、PDF、LaTeX 或 Microsoft Word 的形式发布实时脚本。使用格式化文本、图像、超链接和方程创建实时函数的说明文档。
3.2.3 更快获得所需结果
MATLAB 提供函数参数、文件名等上下文提示,帮助您编写代码。使用交互式工具探索输出的图窗和表。借助自动生成的代码,您可以轻松重现所做的更改。选择代码块来创建可重用的函数。使用完全集成的调试器排查您的代码问题。
3.2.4 交互式完成各个步骤
使用实时编辑器中的任务完成分析中的各个步骤。交互式探索参数和选项,并立即看到结果。在脚本中为已完成的任务生成代码并预览。将实时编辑器任务另存为实时脚本的一部分,以便共享或后续使用。
3.2.5 使用实时脚本进行教学
创建生动的讲义,集说明文本、数学方程式、代码和结果于一体。您可以逐节运行代码、步步深入主题,并可临时修改代码以演示概念。开发示例以用于说明工程师如何使用数学来解决实际和复杂的问题
3.2.6 实时脚本的创建
通过选择另存为并将文件类型更改为 MATLAB 实时代码文件 (*.mlx),将 mysphere 转换为实时脚本。然后,用格式化文本替换代码注释。例如:
要使用 edit
命令创建新的实时脚本,在文件名中包含 .mlx
扩展名:
edit newfile.mlx
3.3 函数
-
可以使用
which
命令查看内置函数源代码文件的位置,与edit
命令结合可以查看内置函数的源代码.edit(which('mean.m'))
3.3.1 定义函数
函数嵌入命令:
- 初等函数:help elfun
- 高等函数:help specfun
- 矩阵函数:help elmat
格式如下:
function [输出变量名] = 函数名(输入变量名)
% 函数的文档
函数代码
function
是一个关键字,声明该文件中保存的是一个函数.- 输入变量和输出变量是非必须的,函数既可以没有输入变量,也可以没有输出变量.
- 函数名应与
.m
文件名相同,且不包含特殊字符(不要有中文).
MATLAB函数定义示例1
function x = freebody(x0,v0,t)
% calculation of free falling
% x0: initial displacement in m
% v0: initial velocity in m/sec
% t: the elapsed time in sec
% x: the depth of falling in m
x = x0 + v0.*t + 1/2*9.8*t.*t;
执行:
MATLAB函数定义示例2
无输入输出
function F2C()
while 1
F_degree = input('tempreature in Fahrenheit: ', 's');
F_degree = str2num(F_degree);
if isempty(F_degree)
return
end
C_degree = (F_degree-32)*5/9;
disp(['tempreature in Celsius: ' num2str(C_degree)])
end
执行:
MATLAB函数定义示例3
多输入多输出
function [a, F] = acc(v2,v1,t2,t1,m)
a = (v2-v1)./(t2-t1);
F = m.*a;
%命令行窗口
>> [Acc Force] = acc(20,10,5,4,1)
3.3.2 以函数句柄形式定义函数
我们也可以使用函数句柄的形式定义函数,这更接近数学上的函数定义,其语法如下:
函数句柄 = @(输入变量) 输出变量
函数句柄 = @(输入变量) 输出变量
f = @(x) exp(-2*x);
x = 0:0.1:2;
plot(x, f(x));