【MATLAB 入门指南 二 】结构化编程与函数实现

1. MATLAB 界面

在这里插入图片描述

2. 结构化编程

2.1 控制流

控制语句作用
if, elseif, else如果 condition 为真,执行语句
switch, case, otherwise根据switch语句内容判断执行哪个子句
while重复执行子句直到while中的条件为假
for执行指定次数的语句
try, catch执行子句并捕获执行过程中的异常
break跳出循环
continue直接进入下一次循环
end结束子句
pause暂停程序
return将控制权返回给调用函数

控制语句实例:

  1. if 语句
if rem(a, 2) == 0
	disp('a is even');
else
	disp('a is odd');
end
  1. switch 语句
switch input_num
case -1
	disp('negative 1');
case 0
	disp('zero');
case 1
	disp('positive 1');
otherwise
	disp('other value');
end

  1. while 语句
n = 1;
while prod(1:n) < 1e100
	n = n + 1;
end
  1. for 语句
for n=1:10
	a(n)=2^n;
end
disp(a)
  1. 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));

Reference

[1] MATLAB(二)结构化程式与自定义函数

[2] MATLAB02:结构化编程和函数定义

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值