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

文章目录


前言

此篇文章是我在B站学习时所做的笔记,语句部分为亲自动手演示过的,方便复习用。此篇文章仅供学习参考。


提示:以下是本篇文章正文内容,下面案例可供参考

一、脚本编辑器

新建脚本文件、两种运行方式
MATLAB(二)结构化程式与自定义函数
在命名上,不能以数字开头字母大小写有区别MATLAB(二)结构化程式与自定义函数
MATLAB(二)结构化程式与自定义函数

常用功能

断点、分节、注释、运行
MATLAB(二)结构化程式与自定义函数
智能缩进
MATLAB(二)结构化程式与自定义函数

二、脚本流

通常脚本从第一行运行到最后一行
MATLAB(二)结构化程式与自定义函数
应用结构化编程技术(子程序、循环、条件等)使程序看起来整洁

1. 控制流

if, elseif, else 如果condition为真,执行语句
for 执行指定次数的语句
switch, case, otherwise 执行几组语句中的一个
try, catch 执行语句并捕获结果错误
while 当条件为真时重复执行语句
break 终止for或while循环的执行
continue 将控制传递给for或while循环的下一次迭代
end 终止代码块,或指示最后一个数组索引
pause 暂时停止执行
return 将控制权返回给调用函数

2.关系(逻辑)操作符

MATLAB(二)结构化程式与自定义函数
rem(a,2):返回a除以2后的余数
disp:显示变量的值

if elseif else

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

switch

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

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

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

while

MATLAB(二)结构化程式与自定义函数
1e100=1x10^100
prod(1:n)=n!

n = 1;
while prod(1:n) < 1e100
    n = n + 1;
end

在命令行输入n,点击enter输出得70,表示n=70是小于1e100的最大的阶乘数

Exercise练习

使用while循环来计算序列的总和1+2+3+…+999

sum = 0;
n=0;
while n < 1000
    sum = n + sum;
    n=n+1;
end

%命令行窗口:

>> Untitled
>> sum

sum =

      499500

或者直接在end;后面加个disp(sum),就不用另外输入了。
MATLAB(二)结构化程式与自定义函数

3. 预分配空间给变量

在前面的例子中,我们没有预先分配空间给vector a,而是让MATLAB在每次迭代时调整它的大小。

哪种方法更快?
B中有预分配矩阵(A=zeros(2000,2000);),就不用总是在计算大小
MATLAB(二)结构化程式与自定义函数
MATLAB(二)结构化程式与自定义函数

Exercise练习

使用结构化编程:

  1. 把矩阵A中的元素复制到矩阵B中
  2. 如果它们在矩阵A中的对应项是负的,改变矩阵B中的值
    MATLAB(二)结构化程式与自定义函数

break

终止for或while循环的执行
用于不能保证收敛的迭代
MATLAB(二)结构化程式与自定义函数

4. 技巧

  • Clear all以删除以前的变量。
  • close all以关闭所有的数字。
  • 在命令末尾使用分号来禁止不需要的输出。
  • 使用省略号…让脚本更具可读性:
>> A=[1 2 3 4 5 6;...
        6 5 4 3 2 1]
%等价于
>> A=[1 2 3 4 5 6;6 5 4 3 2 1]
  • 按ctrl+C在结论之前终止脚本
 tic
 for n=1 : 1000000
     for ii = 1:2000
         for jj = 1:2000
             A( ii,jj) = ii + jj;
         end
     end
 end
 toc

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

5. 脚本与函数

脚本和函数都是包含MATLAB命令的。
m文件函数是在需要执行例程时编写的。

脚本 功能
没有输入参数 有输入参数
没有输出参数 有输出参数
对全局工作区中的数据进行操作 对本地工作区中的数据进行操作

MATLAB内置函数的内容

蓝色代表关键字
MATLAB(二)结构化程式与自定义函数

用户定义函数

写一个函数,计算给定初始位移xo,初始速度vo,下落时间t的*落体位移:
MATLAB(二)结构化程式与自定义函数

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(二)结构化程式与自定义函数

具有多个输入和输出的函数

质点的加速度和作用在它上的力是:
MATLAB(二)结构化程式与自定义函数

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)

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

函数的默认变量

inputname 函数输入的变量名称
mfilename 当前正在运行的代码的文件名
nargin 函数输入参数数目
nargout 函数输出参数数目
varargin 可变长度输入参数列表
varargout 可变长度的输出参数列表
function [volume]=pillar(Do,Di,height)
if nargin==2,
    height=1;
end
volume=abs(Do.^2-Di.^2).*height*pi/4;

%命令行窗口
>> pillar(1,1)

ans =

     0

>> pillar(2,1)

ans =

    2.3562

函数处理

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

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

如若侵权,请及时与我联系。
此篇文章仅供学习参考,禁止转载!

上一篇:TM1629A LED驱动控制专用电路 51驱动


下一篇:2021数模学习系列笔记-第一讲-2 Matlab使用基础