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 变量case 值1% 变量等于值1时执行case 值2% 变量等于值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
相关文章:
Matlab程序设计基础
matlab程序设计基础 程序设计函数文件1.函数文件的基本结构2.创建并使用函数文件的示例3.带多个输出的函数示例4.包含子函数的函数文件 流程控制1. if 条件语句2. switch 多分支选择语句3. try-catch 异常处理语句ME与lasterr 4. while 循环语句5. for 循环语句break和continue…...

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 中,fork() 系统调用会将父进程的整个用户空间内存复制到子进程中。**如果父…...

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

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

万字详解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 系统(如 Ubuntu、Debian、CentOS)和 Windows 服务器自动更新的做法和建议: 1. Linux 云服务器自动更新及安全维护 Ubuntu / Debian 系统 手动更新命令 sudo apt up…...
训练中常见的运动强度分类
概述 有氧运动是耐力基础,乳酸阈值是耐力突破的关键,提升乳酸阈值可以延缓疲劳,无氧运动侧重速度和力量,混氧和最大摄氧量用于细化训练强度和评估潜力。 分类强度供能系统乳酸浓度训练目标有氧运动低(60%-80% HR&…...
java 递归地复制文件夹及其所有子文件夹和文件
java 递归地复制文件夹及其所有子文件夹和文件 根据你的需求,下面是一个 Java 代码示例,用于递归地复制文件夹及其所有子文件夹和文件。由于你提到文件夹是数据层面的,这里假设你可以通过 folderById 来获取文件夹的相关信息,并且…...

[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:在端侧设备上部署 Paddle2ONNX Version: 1.3.1 解…...

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

【数据分析】特征工程-特征选择
【数据分析】特征工程-特征选择 (一)方差过滤法1.1 消除方差为0的特征1.2 保留一半的特征1.3 特征是二分类时 (二)相关性过滤法2.1 卡方过滤2.2 F检验2.3 互信息法 (三)其他3.1 包装法3.2 嵌入法3.3 衍生特…...
第4节 Node.js NPM 使用介绍
本文介绍了 Node.js 中 NPM 的使用,我们先来了解什么是 NPM。 NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种: 允许用户从NPM服务器下载别人编写的第三方包到本地使用。允许…...
RK3399 Android7.1增加应用安装白名单机制
通过设置应用包名白名单的方式限制未授权的应用软件安装。 diff --git a/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java b/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java index af9a533..ca…...

uni-app 安卓消失的字符去哪里了?maxLength失效了!
前情提要 皮一下~这个标题我还蛮喜欢的嘿嘿嘿【附上一个自行思考的猥琐的笑容】 前段时间不是在开发uni-app的一个小应用嘛,然后今天测试发现,有一个地方在苹果是没有问题的,但是在安卓上出现了问题,附上安卓的截图 在这里我是有限制maxLength=50的,而且,赋值字符串到字…...
#AI短视频制作完整教程
目录 前期准备AI工具选择制作流程后期优化发布策略 前期准备 1. 确定视频主题和风格 内容定位:教育、娱乐、商业推广、个人分享目标受众:年龄、兴趣、平台偏好视频时长:15-60秒(根据平台调整)风格调性:…...

嵌入式STM32学习——串口USART 2.0(printf重定义及串口发送)
printf重定义: C语言里面的printf函数默认输出设备是显示器,如果要实现printf函数输出正在串口或者LCD显示屏上,必须要重定义标准库函数里调用的与输出设备相关的函数,比如printf输出到串口,需要将fputc里面的输出指向…...

【大模型】情绪对话模型项目研发
一、使用框架: Qwen大模型后端Open-webui前端实现使用LLamaFactory的STF微调数据集,vllm后端部署, 二、框架安装 下载千问大模型 安装魔塔社区库文件 pip install modelscope Download.py 内容 from modelscope import snapshot_downlo…...
Git 教程 | 如何将指定文件夹回滚到上一次或某次提交状态(命令详解)
在日常开发中,我们经常会遇到这样的情况: “我想把某个文件夹恢复到之前的状态,但又不想影响整个项目,怎么办?” 别担心!这篇文章就教你如何用 Git 把项目中某个特定文件夹(或文件)回…...

【PCI】PCI入门介绍(包含部分PCIe讲解)
先解释一下寻址空间: 机器是32bit的话,意味着4G(2的32次方)寻址空间,内存条作为它的实际物理存储设备。大部分在跑内存程序运行,少部分用来存放其他东西。这是一个常见的4G寻址空间分布(不一定是…...
Cloudera Manager 学习笔记
目录 1 基础概念与原理1.1 Cloudera Manager的主要作用是什么?1.2 与Ambari有何区别?1.3 Cloudera Manager 的核心功能和架构是什么?1.4 解释一下 Cloudera Manager 中的服务模型和角色?1.5 Cloudera Manager 是如何实现对 CDH 集群的集中管…...
Deepin 23.10安装Docker
个人博客地址:Deepin 23.10安装Docker | 一张假钞的真实世界 Deepin 是基于 Debian 的国产 Linux 发行版,安装 Docker Desktop 可能会遇到兼容性问题,因为 Docker Desktop 官方主要支持 Ubuntu/Debian/Red Hat/Fedora/Arch 等主流发行版&…...

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

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

深入剖析Java类加载机制:双亲委派模型的突破与实战应用
引言:一个诡异的NoClassDefFoundError 某金融系统在迁移到微服务架构后,突然出现了一个诡异问题:在调用核心交易模块时,频繁抛出NoClassDefFoundError,但类明明存在于classpath中。经过排查,发现是由于不同…...
Kotlin JVM 注解详解
前言 Kotlin 作为一门现代 JVM 语言,提供了出色的 Java 互操作性。为了更好地支持与 Java 代码的交互,Kotlin 提供了一系列 JVM 相关注解。这些注解不仅能帮助我们控制 Kotlin 代码编译成 Java 字节码的行为,还能让我们的 Kotlin 代码更好地…...
将 node.js 项目作为后台进程持续运行
将 node.js 项目作为后台进程持续运行 方法 1:使用 pm2(生产环境推荐) 安装 pm2(Node.js 进程管理器):npm install pm2 -g启动应用:pm2 start hd/src/app.js --name "my-app"常用命…...
【PhysUnits】15.5 引入P1后的标准化表示(standardization.rs)
一、源码 这段代码实现了一个类型级别的二进制数标准化系统,主要用于处理二进制数的前导零和特殊值的简化。 use super::basic::{Z0, P1, N1, B0, B1, NonNegOne, NonZero};/// 处理 B0<H> 类型的标准化 /// Standardization for B0<H> types /// ///…...
MySQL-5.7 修改密码和连接访问权限
一、MySQL-5.7 修改密码和连接权限设置 修改密码语法 注意:rootlocalhost 和 root192.168.56.% 是两个不同的用户。在修改密码时,两个用户的密码是各自分别保存,如果两个用户密码设置不一样则登陆时注意登陆密码 GRANT ALL PRIVILEGES ON …...

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

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