当前位置: 首页 > news >正文

Matlab程序设计基础

matlab程序设计基础

  • 程序设计
    • 函数文件
      • 1.函数文件的基本结构
      • 2.创建并使用函数文件的示例
      • 3.带多个输出的函数示例
      • 4.包含子函数的函数文件
    • 流程控制
      • 1. `if` 条件语句
      • 2. `switch` 多分支选择语句
      • 3. `try-catch` 异常处理语句
        • ME与lasterr
      • 4. `while` 循环语句
      • 5. `for` 循环语句
      • break和continue

程序设计

函数文件

在 MATLAB 中,函数文件(Function File) 是用于定义自定义函数的基本方式,扩展名为 .m。它可以接收输入参数,执行一系列操作并返回结果。

1.函数文件的基本结构

函数文件以 function 开头,其基本结构如下:

function [输出1, 输出2, ...] = 函数名(输入1, 输入2, ...)% 函数说明% 执行语句
end
  • 文件名必须和函数名一致,例如函数叫 myadd,文件名必须是 myadd.m
  • 可定义多个输入和多个输出。
  • 一个函数文件只能有一个主函数,可以包含多个子函数

2.创建并使用函数文件的示例

定义一个加法函数 myadd.m

function result = myadd(a, b)% myadd: 返回 a + b 的结果% 输入检查if nargin ~= 2error('需要两个输入参数');endif ~isnumeric(a) || ~isnumeric(b)error('输入参数必须是数值类型');endresult = a + b;
end

调用方法:

>> r = myadd(3, 5)
r =8

需要注意函数文件必须在当前工作路径中,否则索引不到

3.带多个输出的函数示例

定义一个计算平均值与标准差的函数 mystat.m

function [avg, s] = mystat(x)% mystat: 返回平均值和标准差if nargin ~= 1error('需要一个输入向量');endif ~isvector(x) || ~isnumeric(x)error('输入必须是数值向量');endn = length(x);avg = sum(x) / n;s = sqrt(sum((x - avg).^2) / (n - 1));
end

调用方法:

>> [mean_val, std_val] = mystat([1 2 3 4 5])
mean_val =3
std_val =1.5811

4.包含子函数的函数文件

一个函数文件中可以包含多个函数,但只有**第一个函数(主函数)**是对外可见的,其他的是子函数,仅供主函数调用。

function y = mainfunc(x)y = helperfunc(x) + 1;
endfunction z = helperfunc(x)z = x^2;
end

流程控制

1. if 条件语句

用于执行满足条件的代码块。
语法:

if 条件1% 条件1为真时执行的语句
elseif 条件2% 条件2为真时执行的语句
else% 所有条件不满足时执行
end

示例:

x = 5;
if x > 10disp('x 大于 10');
elseif x == 5disp('x 等于 5');
elsedisp('x 小于或等于 10 且不等于 5');
end
x 等于 5

2. switch 多分支选择语句

根据变量的值选择执行哪个代码块,适用于多个固定值的判断。
语法:

switch 变量case1% 变量等于值1时执行case2% 变量等于值2时执行otherwise% 所有情况都不匹配时执行
end

示例:

day = 'Monday';
switch daycase 'Monday'disp('今天是星期一');case 'Tuesday'disp('今天是星期二');otherwisedisp('不是星期一也不是星期二');
end
今天是星期一

3. try-catch 异常处理语句

用于捕捉运行时错误,使程序即使遇到异常也不会中断运行。

语法:

try% 尝试执行的代码
catch 异常变量% 出错时执行的代码
end

示例:

>> tryresult = 10 / acatch MEdisp('发生错误:');disp(ME);end
发生错误:MException - 属性:identifier: 'MATLAB:UndefinedFunction'message: '函数或变量 'a' 无法识别。'cause: {}stack: [0x1 struct]Correction: []>> 
ME与lasterr

在早期 MATLAB 版本中,catch 子句不接变量名,错误信息由内置变量 lasterr 存储。示例如下:

>> tryresult = 10 / a;
catchdisp('出错:');disp(lasterr);  % 显示最后一条错误信息
end
出错:
函数或变量 'a' 无法识别。

lasterr 是一个全局变量,保存最后发生的错误信息。

在新版本 MATLAB 中(R2010+),推荐使用结构化异常对象 MException 处理错误。catch 后可以接一个变量(如 ME),此变量就是一个 MException 对象。

tryresult = 10 / 0;
catch MEdisp('发生错误:');disp(ME.message);        % 错误消息字符串disp(ME.identifier);     % 错误标识符(如'MATLAB:divideByZero')disp(ME.stack(1));       % 错误发生的位置(文件、行号、函数)
end

MException 对象详解:
当错误发生时,MATLAB 会创建一个 MException 类型的对象,常用属性如下:

属性名说明
ME.message错误的文本描述
ME.identifier错误的唯一标识符
ME.stack一个结构数组,描述错误发生的函数、文件和行号
ME.cause若是嵌套异常或 rethrow,可追踪根本原因

4. while 循环语句

当条件为真时反复执行某段代码。

语法:

while 条件% 循环体
end

示例:

i = 1;
while i <= 5disp(['当前 i = ', num2str(i)]);i = i + 1;
end
当前 i = 1
当前 i = 2
当前 i = 3
当前 i = 4
当前 i = 5

5. for 循环语句

用于对已知范围的变量进行迭代。

语法:

for 变量 = 向量或数组% 循环体
end

示例:

for i = 1:5disp(['i = ', num2str(i)]);
end
i = 1
i = 2
i = 3
i = 4
i = 5

break和continue

控制语句说明
break终止当前循环
continue跳过当前循环的剩余部分,直接进入下一轮

示例:

for i = 1:10if mod(i, 2) == 0continue;  % 跳过偶数endif i > 7break;     % 超过 7 时跳出循环enddisp(i);
end1357

相关文章:

  • simulink mask、sfunction和tlc的联动、接口
  • Java 文件操作 和 IO(5)-- 综合案例练习 -- 示例一
  • 复数三角不等式简介及 MATLAB 演示
  • 嵌入式(C语言篇)Day13
  • 华为计试——刷题
  • LeetCode 1524. 和为奇数的子数组数目
  • 38.springboot使用rabbitmq
  • 【AUTOSAR OS】计数器Counter机制解析:定义、实现与应用
  • 注销微软账户
  • 医疗多模态共情推理与学习一体化网络构成初探
  • AppTrace 视角下 App 一键拉起:提升应用转化率的高效方案​
  • 腾讯云推出云开发AI Toolkit,国内首个面向智能编程的后端服务
  • 【Unity】AudioSource超过MaxDistance还是能听见
  • 保持本地 Git 项目副本与远程仓库完全同步
  • 利用nginx完成iframe请求的身份认证
  • kafka核心组件
  • 系统思考:化繁为简的艺术
  • lstm 长短期记忆 视频截图 kaggle示例
  • 202403-02-相似度计算 csp认证
  • 矩阵快速幂算法快速上手
  • 做网站玩玩/站长之家是干什么的
  • 企业网站自己可以做吗/新手如何做网上销售
  • 怎么注册公司比较好/西安百度快照优化
  • 十个有趣又好玩的网页/济南网站seo哪家公司好
  • wordpress默认模板目录在哪里/长沙关键词优化公司电话
  • 网络推广建设期的网站/网站百度收录秒收方法