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

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
http://www.xdnf.cn/news/10197.html

相关文章:

  • DeepSeek-R1-0528,官方的端午节特别献礼
  • PostgreSQL ERROR: out of shared memory处理
  • QT6引入QMediaPlaylist类
  • 进程同步:生产者-消费者 题目
  • cf每日刷题
  • RFID技术深度剖析:从原理、协议到S50卡与FM17550读写
  • 多类别分类中的宏平均和加权平均
  • SOC-ESP32S3部分:22-分区表
  • springMVC-9数据格式化
  • rtpinsertsound:语音注入攻击!全参数详细教程!Kali Linux教程!
  • CppCon 2014 学习:Multiplatform C++
  • 具有离散序列建模的统一多模态大语言模型【AnyGPT】
  • 可灵2.1 vs Veo 3:AI视频生成谁更胜一筹?
  • 【数据结构】——二叉树--链式结构
  • 定制开发开源AI智能名片S2B2C商城小程序:数字营销时代的话语权重构
  • elasticsearch低频字段优化
  • ubuntu/windows系统下如何让.desktop/.exe文件 在开机的时候自动运行
  • java程序从服务器端到Lambda函数的迁移与优化
  • 普中STM32F103ZET6开发攻略(一)
  • SAP学习笔记 - 开发15 - 前端Fiori开发 Boostrap,Controls,MVC(Model,View,Controller),Modules
  • Java 单例模式详解
  • Redis最佳实践——安全与稳定性保障之数据持久化详解
  • 2025-5-31-C++ 学习 字符串(终)
  • Springcloud Alibaba自定义负载均衡详解
  • 某航参数逆向及设备指纹分析
  • 告别硬编码!用工厂模式优雅构建可扩展的 Spring Boot 应用 [特殊字符]
  • STM32CubeMX定时器配置
  • 如何在 Ubuntu22.04 上安装并开始使用 RabbitMQ
  • QuickJS 在生物化学计算中的应用
  • MATLAB实战:实现数字调制解调仿真