Matlab程序设计基础

news2025/6/3 21:52:48

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 ~= 2
        error('需要两个输入参数');
    end
    if ~isnumeric(a) || ~isnumeric(b)
        error('输入参数必须是数值类型');
    end
    result = a + b;
end

调用方法:

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

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

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

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

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

    n = 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;
end

function z = helperfunc(x)
    z = x^2;
end

流程控制

1. if 条件语句

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

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

示例:

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

2. switch 多分支选择语句

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

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

示例:

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

3. try-catch 异常处理语句

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

语法:

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

示例:

>> try
     result = 10 / a
   catch ME
     disp('发生错误:');
     disp(ME);
   end
发生错误:
  MException - 属性:

    identifier: 'MATLAB:UndefinedFunction'
       message: '函数或变量 'a' 无法识别。'
         cause: {}
         stack: [0x1 struct]
    Correction: []

>> 
ME与lasterr

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

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

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

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

try
    result = 10 / 0;
catch ME
    disp('发生错误:');
    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 <= 5
    disp(['当前 i = ', num2str(i)]);
    i = i + 1;
end
当前 i = 1
当前 i = 2
当前 i = 3
当前 i = 4
当前 i = 5

5. for 循环语句

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

语法:

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

示例:

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

break和continue

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

示例:

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

     3

     5

     7

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2395237.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MIT 6.S081 2020 Lab6 Copy-on-Write Fork for xv6 个人全流程

文章目录 零、写在前面一、Implement copy-on write1.1 说明1.2 实现1.2.1 延迟复制与释放1.2.2 写时复制 零、写在前面 可以阅读下 《xv6 book》 的第五章中断和设备驱动。 问题 在 xv6 中&#xff0c;fork() 系统调用会将父进程的整个用户空间内存复制到子进程中。**如果父…

第304个Vulnhub靶场演练攻略:digital world.local:FALL

digital world.local&#xff1a;FALL Vulnhub 演练 FALL (digitalworld.local: FALL) 是 Donavan 为 Vulnhub 打造的一款中型机器。这款实验室非常适合经验丰富的 CTF 玩家&#xff0c;他们希望在这类环境中检验自己的技能。那么&#xff0c;让我们开始吧&#xff0c;看看如何…

Unity 模拟高度尺系统开发详解——实现拖动、范围限制、碰撞吸附与本地坐标轴选择

内容将会持续更新&#xff0c;有错误的地方欢迎指正&#xff0c;谢谢! Unity 模拟高度尺系统开发详解——实现拖动、范围限制、碰撞吸附与本地坐标轴选择 TechX 坚持将创新的科技带给世界&#xff01; 拥有更好的学习体验 —— 不断努力&#xff0c;不断进步&#xff0c;不…

万字详解RTR RTSP SDP RTCP

目录 1 RTSP1.1 RTSP基本简介1.2 RSTP架构1.3 重点内容分析 2 RTR2.1 RTR简介2.2 RTP 封装 H.2642.3 RTP 解封装 H.2642.4 RTP封装 AAC2.5 RTP解封装AAC 3 SDP3.1 基础概念3.2 SDP协议示例解析3.3 重点知识 4 RTCP4.1 RTCP基础概念4.2 重点 5 总结 1 RTSP 1.1 RTSP基本简介 一…

云服务器如何自动更新系统并保持安全?

云服务器自动更新系统是保障安全、修补漏洞的重要措施。下面是常见 Linux 系统&#xff08;如 Ubuntu、Debian、CentOS&#xff09;和 Windows 服务器自动更新的做法和建议&#xff1a; 1. Linux 云服务器自动更新及安全维护 Ubuntu / Debian 系统 手动更新命令 sudo apt up…

[paddle]paddle2onnx无法转换Paddle3.0.0的json格式paddle inference模型

使用PDX 3.0rc1 训练时序缺陷检测后导出的模型无法转换 Informations (please complete the following information): Inference engine for deployment: PD INFERENCE 3.0-->onnxruntime Why convert to onnx&#xff1a;在端侧设备上部署 Paddle2ONNX Version: 1.3.1 解…

React项目在ios和安卓端要做一个渐变色背景,用css不支持,可使用react-native-linear-gradient

以上有个模块是灰色逐渐到白的背景色过渡 如果是css&#xff0c;以下代码就直接搞定 background: linear-gradient(180deg, #F6F6F6 0%, #FFF 100%);但是在RN中不支持这种写法&#xff0c;那应该写呢&#xff1f; 1.引入react-native-linear-gradient插件&#xff0c;我使用的是…

【数据分析】特征工程-特征选择

【数据分析】特征工程-特征选择 &#xff08;一&#xff09;方差过滤法1.1 消除方差为0的特征1.2 保留一半的特征1.3 特征是二分类时 &#xff08;二&#xff09;相关性过滤法2.1 卡方过滤2.2 F检验2.3 互信息法 &#xff08;三&#xff09;其他3.1 包装法3.2 嵌入法3.3 衍生特…

uni-app 安卓消失的字符去哪里了?maxLength失效了!

前情提要 皮一下~这个标题我还蛮喜欢的嘿嘿嘿【附上一个自行思考的猥琐的笑容】 前段时间不是在开发uni-app的一个小应用嘛,然后今天测试发现,有一个地方在苹果是没有问题的,但是在安卓上出现了问题,附上安卓的截图 在这里我是有限制maxLength=50的,而且,赋值字符串到字…

嵌入式STM32学习——串口USART 2.0(printf重定义及串口发送)

printf重定义&#xff1a; C语言里面的printf函数默认输出设备是显示器&#xff0c;如果要实现printf函数输出正在串口或者LCD显示屏上&#xff0c;必须要重定义标准库函数里调用的与输出设备相关的函数&#xff0c;比如printf输出到串口&#xff0c;需要将fputc里面的输出指向…

【大模型】情绪对话模型项目研发

一、使用框架&#xff1a; Qwen大模型后端Open-webui前端实现使用LLamaFactory的STF微调数据集&#xff0c;vllm后端部署&#xff0c; 二、框架安装 下载千问大模型 安装魔塔社区库文件 pip install modelscope Download.py 内容 from modelscope import snapshot_downlo…

【PCI】PCI入门介绍(包含部分PCIe讲解)

先解释一下寻址空间&#xff1a; 机器是32bit的话&#xff0c;意味着4G&#xff08;2的32次方&#xff09;寻址空间&#xff0c;内存条作为它的实际物理存储设备。大部分在跑内存程序运行&#xff0c;少部分用来存放其他东西。这是一个常见的4G寻址空间分布&#xff08;不一定是…

使用PowerBI个人网关定时刷新数据

使用PowerBI个人网关定时刷新数据 PowerBI desktop连接mysql&#xff0c;可以设置定时刷新数据或在PowerBI服务中手动刷新数据,步骤如下&#xff1a; 第一步&#xff1a; 下载网关。以个人网关为例&#xff0c;如图 第二步&#xff1a; 双击网关&#xff0c;点击下一步&…

数字人引领政务新风尚:智能设备助力政务服务

在信息技术飞速发展的今天&#xff0c;政府机构不断探索提升服务效率和改善服务质量的新途径。实时交互数字人在政务服务中的应用正成为一大亮点&#xff0c;通过将“数字公务员”植入各种横屏智能设备中&#xff0c;为民众办理业务提供全程辅助。这种创新不仅优化了政务大厅的…

深入剖析Java类加载机制:双亲委派模型的突破与实战应用

引言&#xff1a;一个诡异的NoClassDefFoundError 某金融系统在迁移到微服务架构后&#xff0c;突然出现了一个诡异问题&#xff1a;在调用核心交易模块时&#xff0c;频繁抛出NoClassDefFoundError&#xff0c;但类明明存在于classpath中。经过排查&#xff0c;发现是由于不同…

tauri2项目打开某个文件夹,类似于mac系统中的 open ./

在 Tauri 2 项目中打开文件夹 在 Tauri 2 项目中&#xff0c;你可以使用以下几种方法来打开文件夹&#xff0c;类似于 macOS 中的 open ./ 命令功能&#xff1a; 方法一&#xff1a;使用 shell 命令 use tauri::Manager;#[tauri::command] async fn open_folder(path: Strin…

企业文件乱、传输慢?用群晖 NAS 构建安全高效的共享系统

在信息化办公不断加速的今天&#xff0c;企业对文件存储、共享与安全管理的需求愈发严苛。传统文件共享方式效率低下、权限混乱、远程访问困难&#xff0c;极大影响了协同办公效率。此时&#xff0c;一套可靠、高效、安全的文件共享解决方案便成为众多企业的“刚需”。 这正是…

防爆手机VS普通手机,区别在哪里?

在加油站掏出手机接打电话、在化工厂车间随手拍照记录……这些看似寻常的行为&#xff0c;实则暗藏致命风险。普通手机在易燃易爆环境中可能成为“隐形炸弹”&#xff0c;而防爆手机却能安全护航。这两者看似相似&#xff0c;实则从底层基因到应用场景都存在着本质差异&#xf…

在RTX5060Ti上进行Qwen3-4B的GRPO强化微调

导语 最近赶上618活动&#xff0c;将家里的RTX 4060显卡升级为了RTX 5060Ti 16GB版本&#xff0c;显存翻了一番&#xff0c;可以进行一些LLM微调实验了&#xff0c;本篇博客记录使用unsloth框架在RTX 5060Ti 16GB显卡上进行Qwen3-4B-Base模型的GRPO强化微调实验。 简介 GPU性…

武汉火影数字VR大空间制作

VR大空间是一种利用空旷的物理空间&#xff0c;结合先进的虚拟现实技术&#xff0c;让用户能够在其中自由移动并深度体验虚拟世界的创新项目方式。 在科技飞速发展的当下&#xff0c;VR大空间正以其独特的魅力&#xff0c;成为科技与娱乐领域的耀眼新星&#xff0c;掀起了一股沉…