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

pdf版本笔记的下载地址: MATLAB02_结构化编程和函数定义(访问密码:3834)

学习一门技术最好的方式就是阅读官方文档,可以查看MATLAB官方文档

结构化编程

流程控制语句和逻辑运算符

与大多数编程语言相同,MATLAB有以下流程控制语句:

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

上述所有循环和条件语句都要在末尾以end闭合.

MATLAB还有以下逻辑运算符:

运算符意义
<小于
<=小于或等于
>大于
>=大于或等于
==等于
~=不等于
&&
||

&&||运算符支持逻辑短路功能.

流程控制语句示例

下面演示各流程控制语句:

  1. if语句:

    if语句的用法

    if rem(a, 2) == 0
    	disp('a is even');
    else
    	disp('a is odd');
    end
    
  2. switch语句:

    switch语句的用法

    switch input_num
    case -1
    	disp('negative 1');
    case 0
    	disp('zero');
    case 1
    	disp('positive 1');
    otherwise
    	disp('other value');
    end
    
  3. while语句:

    while语句的用法

    n = 1;
    while prod(1:n) < 1e100
    	n = n + 1;
    end
    
  4. for语句:

    for语句的用法

    for n=1:10
    	a(n)=2^n;
    end
    disp(a)
    
  5. 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
    

使用循环语句应尽量预先分配内存空间

若一个变量所需要的内存空间是一个可预测的定值,我们应尽量提前为其分配内存空间.

以下面两段程序为例,演示这一点:

  • 程序一:

    tic
    for ii = 1:2000
        for jj = 1:2000
            A(ii,jj) = ii + jj;
        end
    end
    toc
    

    程序输出Elapsed time is 4.616199 seconds.

  • 程序二:

    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
    

    程序输出Elapsed time is 2.786401 seconds.

可以看到,程序一比程序二所用的时间更长.这是因为: 对于程序一,没有预先为变量A分配内存,因此每当A的形状发生改变时,都需要重新为A分配内存地址,这花费了更多的时间.

编写脚本时应注意的问题

在脚本开头应添加语句清空工作区

在每个脚本的开头,应添加下述语句,清空工作区缓存以及之前程序运行的痕迹:

clear all	% 清空工作区内存中的变量
close all 	% 关闭之前程序绘制的图像
clc			% 清空之前程序在终端的输出

在运算和赋值语句后应添加分号;抑制输出

在所有运算和赋值语句都应该添加分号;抑制输出,若需要向终端输出一个变量,应对其调用disp方法.

使用省略号...拼接多行语句

在MATLAB中,省略号...可以将多行语句拼接为一行,灵活使用该语句可以提高代码可读性.

annPoints_sampled = annPoints(annPoints(:,1)>x1 & ...
    annPoints(:,1) < x2 & ...
    annPoints(:,2) > y1 & ...
    annPoints(:,2) < y2);

函数

与其他语言相似,MATLAB也可以定义函数.与脚本类似,函数可以被存入函数名.m文件中,也可以以函数句柄的形式定义在内存中.

查看内置函数

我们可以使用which命令查看内置函数源代码文件的位置,与edit命令结合可以查看内置函数的源代码.

运行下面语句可以打开MATLAB内置的mean函数的源文件:

edit(which('mean.m'))

可以在编辑器中看到mean函数的源代码如下:

mean函数源代码

函数名.m文件形式定义函数

在MATLAB文件中定义函数的格式如下:

function [输出变量名] = 函数名(输入变量名) 
% 函数的文档

函数代码
  • function是一个关键字,声明该文件中保存的是一个函数.
  • 输入变量输出变量是非必须的,函数既可以没有输入变量,也可以没有输出变量.
  • 函数名应与.m文件名相同,且不包含特殊字符(最好不要有中文).

MATLAB内置的函数参数

在MATLAB中,内置了一些函数参数如下:

函数参数意义
imputname输入变量名列表
mfilename函数源代码文件名
nargin输入变量数
nargout输出变量个数
varargin可变长输入参数列表
varargout可变长输出参数列表

MATLAB不提供其他高级语言的指定默认参数值以及函数重载等语法,但灵活使用上述内置的函数参数,可以在一定程度上实现指定默认参数值以及方法重载:

function [volume]=pillar(Do,Di,height)
if nargin==2,
	height=1;
end
volume=abs(Do.^2-Di.^2).*height*pi/4;

MATLAB函数定义示例1

下面程序用来计算自由落体运动中位移量:
x = x 0 + v 0 t + 1 2 g t 2 x = x_0 + v_0 t + \frac{1}{2} g t^2 x=x0+v0t+21gt2

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编程技巧: 计算乘法时应尽量使用.*而非*,因为前者不仅对参数t为标量的情况可用,也对变量t为向量或矩阵的情况可用.

freebody(0, 0, 2)			% 得到 19.6000
freebody(0, 0, [0 1 2 3])	% 得到 [0 4.9000 19.6000 44.1000]
freebody(0, 0, [0 1; 2 3])	% 得到 [0 4.9000; 19.6000 44.1000]

MATLAB函数定义示例2

下面函数实现了从华氏温度到摄氏温度的转换,该函数可以识别输入的待转换样例的个数,当输入的待转换样例个数为0时,退出函数.

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

F2C函数执行结果
(需要按Ctrl+C退出程序)

以函数句柄形式定义函数

我们也可以使用函数句柄的形式定义函数,这更接近数学上的函数定义,其语法如下:

函数句柄 = @(输入变量) 输出变量 

可以直接通过函数句柄调用该方法.

f = @(x) exp(-2*x);
x = 0:0.1:2;
plot(x, f(x));

pdf版本笔记的下载地址: MATLAB02_结构化编程和函数定义(访问密码:3834)

  • 635
    点赞
  • 1882
    收藏
    觉得还不错? 一键收藏
  • 48
    评论
二、考试范围   考试科目1:计算机与网络基础知识   1. 计算机科学基础   1.1 数制及其转换     二进制、十进制和十六进制等常用数制及其相互转换   1.2 数据的表示     数的表示(原码、反码、补码表示,整数和实数的机内表示)     非数值表示(字符和汉字表示、声音表示、图像表示)     校验方法和校验码(奇偶校验)   1.3 算术运算     计算机的二进制数运算方法   2. 计算机系统基础知识   2.1 硬件基础知识     计算机系统的结构和工作原理     CPU的结构、特征、分类及发展     存储器的结构、特征分类及发展     I/O接口、I/O设备和通信设备   2.2 软件基础知识     操作系统的类型、配置     操作系统的功能     数据库系统基础知识     应用软件的安装与配置     网络管理软件的功能   3. 计算机网络基础知识   3.1 数据通信基础知识     数据信号、信道的基本概念     数据通信模型的构成     数据传输基础知识      数据编码的分类和基本原理     多路复用技术的分类、基本原理和应用领域     数据交换技术的分类、基本原理和性能特点   3.2 计算机网络基础知识     计算机网络的概念、分类和构成     协议的概念,开放系统互连参考模型的结构及各层的功能     TCP/IP协议的概念及IP数据报的格式、IP地址、子网掩码和域名   3.3 局域网技术基础     IEEE802参考模型     局域网拓扑结构     局域网媒体访问控制技术CSMA/CD     以太网的发展历程     以太网的分类及各种以太网的性能特点     以太网技术基础、IEEE802.3帧结构、以太网跨距     交换型以太网、全双工以太网的基本原理和特点   4. 计算机网络应用基础知识   4.1 因特网应用基础知识     因特网的概念、起源和提供的基本服务,以及我国的因特网现状     通过PSTN、ISDN、ADSL和局域网拉入因特网的基本原理和特性     WWW、页、超级链接、HTML的概念及应用     电子邮件、FTP、Telnet、BBS、ICQ、网络新闻组、网络传真、网络视频会议、电子商务和电子政务的概念及应用   4.2 网络操作系统基础知识     网络操作系统的概念、结构和特点     Windows操作系统的安装、配置和基本应用     Linux操作系统的安装、配置和基本应用、KDE环境和Linux操作命令   4.3 应用服务器基础知识     DNS服务的基本原理     WWW服务的基本原理     FTP服务的基本原理     电子邮件服务的基本原理 等等

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 48
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值