许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  【MATLAB入门指南二】结构化编程与函数实现

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

阅读数 4
点赞 0
article_banner

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 一键获取完整项目代码bash1234567 执行结果: 历时 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 一键获取完整项目代码bash12345678 执行结果: 历时 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')) 一键获取完整项目代码bash1

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:结构化编程和函数定义


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空