MATLAB基础:函数与函数控制语句
今天我们继续学习Matlab中函数相关知识。
API的查询和调用
help 命令是最基本的查询方法,可查询所有目录、指定目录、命令、函数。
我们直接点击帮助菜单即可查询所需的API函数。

lookfor 关键字用于搜索相关的命令和函数。
如,我们输入lookfor input,MATLAB就会显示所有关于input的API函数

type M 文件名用于显示文件代码。
如果想显示以.m扩展名结尾的就要加通配符
type *.m
which M 文件名用于显示指定文件的路径。
返回一个路径
demo 用于演示matlab功能。
如图,我们可以获取各种演示代码来解决实际问题

数据的输入和输出
input函数
输入函数
A=input('提示文字',数据类型);
如
str = input('请输入一段文字: ', 's');
's' 表示用户输入的是字符串。如果没有 's',MATLAB 默认期望用户输入的是数字或数组。
disp函数
disp(X)
X可以是一个字符串、数字、数组、结构体或单元数组。disp函数会自动添加一个换行符,因此不需要在字符串末尾添加\n来换行。- 如果
disp用于显示一个变量,它不会显示变量名,只显示变量的值。 - 与
fprintf函数不同,disp不会允许格式化输出。如果你需要更精细地控制输出格式,应该使用fprintf。
流程控制语句
分支语句包括
if(条件式),语句;
end;if(条件式1),语句1;
elseif(条件式2),语句2;…;
else,语句;
end;switch(分支变量)
case(值1),语句1;
case(值2),语句2;…;
otherwise 语句;
end
循环语句包括
for 循环变量=初值:增量:终值,
语句;
end;while(条件式),
语句;
end。
其他语句包括
pause,暂停执行,直到用户按任意键继续
pause(seconds),暂停执行几秒后继续
break,跳出当前循环
return,结束函数执行并返回一个值
error,error函数用于终止当前函数的执行并返回到调用函数,或者如果error在脚本中使用,则终止脚本的执行。使用error时,可以提供一个错误消息来描述发生了什么问题。
error('This is an error message');
脚本文件与函数文件
主要区别有:
- M脚本文档没有参数传递功能;函数文件具有参数传递功能。
- M脚本文档中的变量是全局的,在命令窗口也可用;函数文件中的变量是局部的。
脚本文件相当于一段写好的代码可以随时调用,省去了很多麻烦
在调用脚本文件时,直接在命令窗口中输入文件名即可
函数文件则相当于一个函数,调用时需要传参
function [输出参数列表] = 函数名(输入参数列表)
例:
函数定义
function area = calculateCircleArea(radius)% calculateCircleArea 计算圆的面积% 输入参数:% radius - 圆的半径% 输出参数:% area - 圆的面积% 声明PI常量PI = 3.141592653589793;% 计算面积area = PI * radius^2;
end
函数调用
[输出参数] = 函数文件名(输入参数1, 输入参数2, ..., 输入参数N)S=calculateCircleArea(23)
注意:MATLAB调用函数文件时只认函数文件名,不认函数名,所以要保持函数文件名与函数名的统一以防止调用失败
函数句柄与匿名函数
函数句柄
用@作为取地址符将函数作为值赋给变量
首先,我们定义一个简单的函数
function result = square(x)result = x^2;
end
接下来,我们可以使用 @ 符号来创建一个指向 square 函数的句柄:
% 创建函数句柄
fHandle = @square;
现在 fHandle 是一个指向 square 函数的句柄。我们可以使用这个句柄来调用函数,并传入参数:
% 使用函数句柄调用函数
num = 5;
squaredNum = fHandle(num); % 这将计算 5 的平方
disp(squaredNum); % 显示结果
使用函数句柄的好处是,它可以像变量一样传递,使得函数调用更加灵活。例如,你可以将函数句柄传递给其他函数,或者存储在一个数组中,稍后调用。
feval函数
feval(fun, arg1, arg2, ..., argN)
其中fun是要调用的函数的名称(字符串或函数句柄),arg1, arg2, ..., argN是传递给该函数的参数。
用处:
使用字符串调用函数
% 调用 'sin' 函数
result = feval('sin', pi/2);
disp(result); % 显示结果,应该是 1
使用函数句柄调用函数
% 创建函数句柄
fHandle = @sin;% 使用 feval 和函数句柄调用函数
result = feval(fHandle, pi/2);
disp(result); % 显示结果,应该是 1
注意事项
- 当函数名称是字符串时,
feval非常有用。如果你已经有了函数的句柄,直接调用通常更简单,例如result = fHandle(pi/2);。 - 在MATLAB的新版本中,
feval已经不推荐使用,推荐的做法是直接使用函数句柄或者使用str2func将字符串转换为函数句柄,然后进行调用。
使用str2func替代feval
如果你有一个函数的名称作为字符串,并且想要调用这个函数,可以使用str2func来将字符串转换为函数句柄,然后直接调用该函数:
% 将字符串转换为函数句柄
fHandle = str2func('sin');% 使用函数句柄调用函数
result = fHandle(pi/2);
disp(result); % 显示结果,应该是 1
这种用法比使用feval更符合现代MATLAB的编码风格。
eval函数
基本语法
eval(expression)
其中 expression 是一个包含 MATLAB 表达式、语句或函数调用的字符串。
示例
执行表达式
% 定义一个字符串,其中包含 MATLAB 表达式
str = 'a = 5; b = 10;';% 使用 eval 执行字符串中的表达式
eval(str);% 显示结果
disp(['a = ', num2str(a)]);
disp(['b = ', num2str(b)]);
在上面的示例中,eval 会执行字符串 str 中的语句,从而定义了变量 a 和 b。
调用函数
% 定义一个字符串,其中包含对函数的调用
str = 'disp(''Hello, World!'')';% 使用 eval 执行字符串中的函数调用
eval(str);
在这个例子中,eval 执行了字符串 str 中的 disp 函数调用,输出了 “Hello, World!”。
注意事项
eval应该谨慎使用,因为它会执行字符串中的任何代码,包括可能有害的代码。- 使用
eval可能会影响代码的性能,因为它需要解析和执行字符串中的代码。 - 在可能的情况下,使用函数句柄、匿名函数或其他编程结构来避免
eval是更好的做法。
匿名函数
匿名函数是MATLAB中一种创建简单函数的便捷方式,无需为其编写单独的函数文件。匿名函数可以定义在一个变量中,并且通常在单个表达式中使用。它们非常适合快速定义简单的操作或作为回调函数传递给其他函数。
基本语法
functionVariable = @(inputVariables) expression
functionVariable:存储匿名函数的变量名。@:匿名函数的创建运算符。inputVariables:匿名函数的输入参数,可以是单个变量或多个变量。expression:使用输入参数计算的结果表达式。
创建一个计算两个数之和的匿名函数:
add = @(x, y) x + y;
result = add(3, 4); % 计算 3 和 4 的和
disp(result); % 显示结果:7
arrayfun 与 cellfun 函数
在MATLAB中,arrayfun 是一个非常有用的函数,它经常与匿名函数结合使用,允许你对数组中的每个元素应用一个函数,并返回结果数组。这对于需要对数组中的每个元素执行相同操作的情况非常有用。
基本语法
B = arrayfun(func, A)
B:输出数组,其中包含对输入数组A中每个元素应用函数func后的结果。func:一个函数句柄,它定义了要对输入数组A中每个元素执行的操作。A:输入数组,可以是数值数组、元胞数组或结构体数组。
下面的例子使用 arrayfun 来计算一个数值数组中每个元素的平方:
A = 1:5; % 创建一个行向量
B = arrayfun(@(x) x.^2, A); % 对每个元素求平方
disp(B); % 显示结果
cellfun函数与arrayfun函数类似,只不过处理值、返回值为一个元胞数组。
函数重载
在MATLAB中,函数重载是通过编写多个同名函数,每个函数处理不同的情况来实现的。这种方式使得代码更加灵活,可以根据不同的输入情况执行不同的操作。
基于参数数量重载
1、重写函数
function result = myfunc(a)result = a^2;
endfunction result = myfunc(a, b)result = a^2 + b^2;
end
2、使用nargin与nargout
nargin:记录调用函数时输入变量个数;
nargout:记录调用函数时输出变量的个数。
示例:
function [f1, f2] = exam_arg(a, b, c)if nargin == 1f1 = a;elseif nargin == 2f1 = (a + b)/2;elseif nargin == 3f1 = (a + b + c)/3;endif nargout == 0error('没有输出参数。');elseif nargout == 2f2 = '计算平均值';end
end
根据参数类型重载
function result = myfunc(a)if ischar(a)result = 'String: ' + a;elseif isnumeric(a)result = a^2;elseerror('Unsupported type');end
end
注意事项
- MATLAB中的函数重载不是传统意义上的重载,因为它不支持基于参数类型的重载,而是通过参数数量和
varargin(可变数量输入参数)来实现类似的功能。 - 当调用一个函数时,MATLAB会根据提供的参数数量和类型来选择最合适的函数实现。
- 使用
isa函数或class函数可以在函数内部检查参数的类型。 - 如果没有找到匹配的函数实现,MATLAB将抛出一个错误。
今天就学习到这里,我们明天继续学习MATLAB。
相关文章:
MATLAB基础:函数与函数控制语句
今天我们继续学习Matlab中函数相关知识。 API的查询和调用 help 命令是最基本的查询方法,可查询所有目录、指定目录、命令、函数。 我们直接点击帮助菜单即可查询所需的API函数。 lookfor 关键字用于搜索相关的命令和函数。 如,我们输入lookfor inpu…...
2024.7.30 搜索插入位置(二分法)
题解 二分法 left和right标记二分区间 ans标记n,因为存在大于所有数的可能。 var searchInsert function(nums, target) {const n nums.length;let left 0, right n - 1, ans n;while (left < right) {//计算中位数let mid ((right - left) >> 1)…...
Socket通信(C++)
文章目录 什么是SocketSocket通信过程C Socket通信APIint socket(int domain, int type, int protocol);int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);struct sockaddrstruct sockaddr_unstruct sockaddr_in / struct sockaddr_in6 int connect(int …...
小白学大模型:LLaMA-Factory 介绍与使用
最近这一两周看到不少互联网公司都已经开始秋招提前批了。 不同以往的是,当前职场环境已不再是那个双向奔赴时代了。求职者在变多,HC 在变少,岗位要求还更高了。 最近,我们又陆续整理了很多大厂的面试题,帮助一些球友…...
java算法day26
java算法day26 207 课程表208 实现Trie(前缀树) 207 课程表 这题对应的知识是图论里的拓扑排序的知识。从题意就可以感受出来了。题目说如果要学习某课程,那么就需要先完成某课程。 这里我描述比较复杂的情况:课程与课程之间也有可能是多对一的场景或者…...
docker笔记7-dockerfile
docker笔记7-dockerfile 一、dockerfile介绍二、dockerfile指令三、构建自己的镜像 一、dockerfile介绍 Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。 以下是常用的 Dockerfile 关键字的完整列表和说明: 二、docker…...
Spring-cloud Alibaba组件--Dubbo
远程调用技术 RestFul风格 基于HTTP协议实现,而HTTP是一种网络传输协议,基于TCP,规定了数据传输的格式。 RPC协议 Remote Produce Call 远程过程调用,类似的还有 RMI ( remote method invoke)。自定义数…...
右值引用--C++11
左值引用和右值引用 传统的C语法中就有引用的语法,而C11中新增了的右值引用语法特性,所以从现在开始我们 之前学习的引用就叫做左值引用。无论左值引用还是右值引用,都是给对象取别名。 什么是左值?什么是左值引用?…...
这样做外贸报价表,客户看了才想下单
报价,是外贸业务中最重要的一步,作为外贸人,不会做报价表可不行。有人说,直接在邮件里回复价格不就好了?是的,产品简单的可以这么做,但你也不能忽视报价表的价值,一份完美的价格表对…...
Swift学习入门,新手小白看过来
😄作者简介: 小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD 如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。 😊 座右铭:不…...
【Ant Design Pro】快速上手
初始化 初始化脚手架:快速开始 官方默认使用 umi4,这里文档还没有及时更新(不能像文档一样选择 umi 的版本),之后我选择 simple。 然后安装依赖。 在 package.json 中: "start": "cross-e…...
Hive3:Hive初体验
1、创建表 CREATE TABLE test(id INT, name STRING, gender STRING);2、新增数据 INSERT INTO test VALUES(1, 王力红, 男); INSERT INTO test VALUES(2, 钉钉盯, 女); INSERT INTO test VALUES(3, 咔咔咔, 女);3、查询数据 简单查询 select * from test;带聚合函数的查询 …...
blender顶点乱飞的问题解决
初学blender,编辑模式下移动某些顶点,不管是移动还是滑动都会出现定点乱飞的问题,后来才发现是开了吸附工具的原因!!!! 像下面这样,其实我只是在Z轴上移动,但是就跑的很…...
Elasticsearch(ES) 集群脑裂
脑裂问题(split-brain problem)是指一个分布式系统中,当网络分裂(network partition)发生时,导致系统内部的两个或多个节点相互独立地认为自己仍然与其他节点连接,每个节点组都试图执行操作,这可能会导致数…...
spark 3.0.0源码环境搭建
环境 Spark版本:3.0.0 java版本:1.8 scala版本:2.12.19 Maven版本:3.8.1 编译spark 将spark-3.0.0的源码导入到idea中 执行mvn clean package -Phive -Phive-thriftserver -Pyarn -DskipTests 执行sparksql示例类SparkSQLExam…...
3.3、matlab彩色图和灰度图的二值化算法汇总
1、彩色图和灰度图的二值化算法汇总原理及流程 彩色图和灰度图的二值化算法的原理都是将图像中的像素值转化为二值(0或1),以便对图像进行简化或者特定的图像处理操作。下面分别介绍彩色图和灰度图的二值化算法的原理及流程: 1)彩色图的二值化算法原理及流程 (1)原理:…...
新手必看:Elasticsearch 入门全指南
Elasticsearch 入门介绍 Elasticsearch 是一个开源的分布式搜索和分析引擎,广泛应用于处理大规模数据和实时搜索需求。它基于 Apache Lucene 构建,具备高可扩展性和分布式特性,能够快速、可靠地存储、搜索和分析大量数据。本文将介绍 Elasti…...
【Linux】TCP全解析:构建可靠的网络通信桥梁
文章目录 前言1. TCP 协议概述2. TCP报头结构3. 如何理解封装和解包呢?4. TCP的可靠性机制4.1 TCP的确认应答机制4.2 超时重传机制 5. TCP链接管理机制5.1 经典面试题:为什么建立连接是三次握手?5.2 经典面试题:为什么要进行四次挥…...
图像处理 -- ISP中的3DNR与2DNR区别及实现原理
ISP中的3DNR与2DNR区别及实现原理 2DNR(2D Noise Reduction) 2DNR的原理: 2DNR主要针对单帧图像进行降噪处理。它利用空间域内的像素值,采用空间滤波的方法来减少噪声。常用的方法包括均值滤波、中值滤波和高斯滤波等。这些方法…...
硬盘分区读不出来的解决之道:从自救到专业恢复
在日常的计算机使用过程中,硬盘分区读不出来的问题常常令人头疼不已。这一问题不仅阻碍了用户对数据的正常访问,还可能预示着数据安全的潜在威胁。硬盘分区读不出来,通常是由于分区表损坏、文件系统错误、物理扇区损坏、驱动程序冲突或硬件连…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...
elementUI点击浏览table所选行数据查看文档
项目场景: table按照要求特定的数据变成按钮可以点击 解决方案: <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...
c# 局部函数 定义、功能与示例
C# 局部函数:定义、功能与示例 1. 定义与功能 局部函数(Local Function)是嵌套在另一个方法内部的私有方法,仅在包含它的方法内可见。 • 作用:封装仅用于当前方法的逻辑,避免污染类作用域,提升…...
API网关Kong的鉴权与限流:高并发场景下的核心实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中,API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关,Kong凭借其插件化架构…...
2025.6.9总结(利与弊)
凡事都有两面性。在大厂上班也不例外。今天找开发定位问题,从一个接口人不断溯源到另一个 接口人。有时候,不知道是谁的责任填。将工作内容分的很细,每个人负责其中的一小块。我清楚的意识到,自己就是个可以随时替换的螺丝钉&…...
【Java多线程从青铜到王者】单例设计模式(八)
wait和sleep的区别 我们的wait也是提供了一个还有超时时间的版本,sleep也是可以指定时间的,也就是说时间一到就会解除阻塞,继续执行 wait和sleep都能被提前唤醒(虽然时间还没有到也可以提前唤醒),wait能被notify提前唤醒…...
