matlab学习笔记(二)结构化程式与自定义函数


参考课程:台大郭彦甫教授MATLAB课程

脚本编写 & 结构化编程

新建脚本文件

新建脚本文件,保存到自己的项目工作空间:
在这里插入图片描述
在这里插入图片描述

【注】

  • 选中代码段,使用智能缩进(Smart Indent)
  • 使用%可进行每一行的注释
  • 使用%%将代码段分成区块
  • 选中某一区块,运行节(Run section),只执行该区块代码
  • 运行(Run),执行所有代码

控制流语句

程序按照一定的语句逻辑顺序执行

控制流语句说明
if,elseif,else条件为 true 时执行语句
for循环特定次数,并通过递增的索引变量跟踪每次迭代
switch,case,otherwise执行多组语句中的一组
try,catch执行语句并捕获产生的错误
while循环语句,条件仍然为 true 就进行循环
break终止执行 for 或 while 循环,结束整个循环迭代
continue结束本次循环迭代,下一次正常进行
end结束语句块,形成一个区块,与其他区块区分开来
pause暂停程序执行
return返回至调用脚本或函数处

逻辑运算符

在这里插入图片描述
【注】

  • matlab中的不等于是“~=”,而不是“!=”

if elseif else

语法格式:

if 条件1
 语句1
elseif 条件2
 语句2
else
 语句3
end

【测试】
在这里插入图片描述

switch

语法格式:

switch expression(可能有很多种变化的数值变量)
 case 值1
  语句1
 case 值2
  语句2
.
.
 otherwise
  语句n
end

【测试】

%%
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

在这里插入图片描述

while

语法格式:

while 表达式
 语句
end

【测试】

%%
n = 1;
while prod(1:n) < 1e100 % prod函数:连乘操作 n!<= 10的100次方
    n = n + 1;
end
disp(n)

在这里插入图片描述
【练习1】

%%
i = 1;
sum = 0;
while i <= 999
    sum = sum + i
    i = i + 1
end
disp(sum)

在这里插入图片描述

for

语法格式:

for 变量名=start:increment(增量;步长):end
 语句
end

【测试1】
在这里插入图片描述
【注】
要记得时刻注意我们的变量此时工作空间的情况,直接改变某些代码并不能改变原来变量的数据,它会保存原来旧的数据,我们必须要同过clear指令清楚掉变量的旧数据,才能得到修改代码后更新的结果。

【练习2】求2的奇数次方

%%
for n = 1:2:10
    a(n) = 2^n;
end
k = 1;
for i = 1:size(a)
    if a(i) == 0
        continue
    end
    b(k) = a(i);
    k = k + 1;
end
disp(b)

在这里插入图片描述

使用循环语句可以尽量预先分配内存空间,这样的话会提升效率

  • Pre-allocation(预先声明需要的变量所占的内存空间大小)

【例】
在这里插入图片描述
【练习3】

在这里插入图片描述
【测试】

在这里插入图片描述

编写脚本文件的小tips

  • clc:清空命令行窗口
  • close all:关掉所有figure结果
  • 使用“…+Enter”:换行,对于一行语句过长的情况
  • Ctrl+C:程序宕机 / 循环进行时,跳出循环指令

函数

在这里插入图片描述
查看matlab的内建函数:

  • edit(which(‘函数名.m’))

在这里插入图片描述

用户自定义函数

【例1】自由落体(一个输出
x = x 0 + v 0 t + 1 2 g t 2 x=x_0+v_0t+\frac{1}{2}gt^2 x=x0+v0t+21gt2

function x = freebody(x0,v0,t)
x = x0 + v0 .* t + 1 / 2 * 9.8 * t .* t;

在这里插入图片描述

【例2】加速度(多个输出
a = v 2 − v 1 t 2 − t 1 a=\frac{v_2-v_1}{t_2-t_1} a=t2t1v2v1 F = m a F=ma F=ma

function [a F] = acc(v2,v1,t2,t1,m)
a = (v2 - v1) ./ (t2 - t1);
F = m .* a;

在这里插入图片描述
【练习4】
输入一个华氏温度,函数将其转换成摄氏温度,并显示转换结果,函数要求一直可以输入温度,直到输入的不是数字(直接输入回车),程序结束

function C = F2C()
while 1
    prompt = 'Please input the temperature in F:';
    F = input(prompt);
    if isempty(F)
        break
    end
    C = (F - 32) .* (5 / 9);
    disp(['Temperature in C: ' num2str(C)]);
end

在这里插入图片描述

Function Default Variables
自定义函数时,会遇到某些输入变量个数变化的情况,需要我们去进行定义,从而使用者在使用函数时,对于不同的输入形式能得到相应不同的结果:
在这里插入图片描述
见文档:输入输出参数

Function Handles(函数句柄)

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

在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值