Day29_0.1基础学习MATLAB学习小技巧总结(29)——参数估计函数

利用空闲时间把碎片化的MATLAB知识重新系统的学习一遍,为了在这个过程中加深印象,也为了能够有所足迹,我会把自己的学习总结发在专栏中,以便学习交流。

参考书目:

1、《MATLAB基础教程 (第三版) (薛山)》

2、《MATLAB R2020a完全自学一本通》

3、《MATLAB官方帮助文档》

声明:文章内的代码和内容可以引用复制,只要标注出处即可

在本章中的代码,会以资源的形式发在我的博客里供大家免费下载学习

参数传递

在MATLAB中,参数传递采用值传递的方式。具体而言,在函数调用时,MATLAB将实际变量的值赋给形式参数,这些形式参数在函数的独立变量空间中存储, 与工作区的变量空间无关。每个函数调用都具备独立的变量环境。

例如:

function y = muyfun(x,y)

在命令行窗口中通过a=myfun(3,2)调用此函数,那么MATLAB首先会建立myfun函数的变量空间,把3 赋值给x,把2赋值给y,然后执行函数实现的代码。在执行完毕后,把myfun函数返回的参数y的值传递给工 作区变量a,调用过程结束后,函数变量空间被清除。

 

1.输入和输出参数的数目

MATLAB的函数可以接收多个输入和输出参数。调用时,需提供与函数声明中的输入参数一一对应的值,而输出参数的数量可以按需指定,也可以不指定。如果不指定输出参数进行调用,MATLAB会将第一个输出参数的值返回给工作区变量ans。

使用nargin和nargout函数可以确定实际传递的输入和输出参数数量,结合条件语句,可以灵活处理不同数量的输入和输出参数。

例:输入和输出参数数目的使用示例。

function [n1,n2]=demo24091801(m1,m2)
if nargin == 1n1=m1;if nargout == 2n2=m1;end
elseif nargout == 1n1=m1+m2;elsen1=m1;n2=m2;end
end

然后在命令行窗口依次输入参数:


指定输入和输出参数的数量比较容易理解,只需参考函数M文件中的相应if分支即可。而在不指定输出参数数量的情况下,MATLAB会按照全输出参数的调用格式执行函数,但仅将第一个输出参数的值赋给工作区变量ans。

2.可变数目的参数传递


使用nargin和nargout结合条件语句,可以处理不同数量的输入和输出参数,但这需要为每一种输入和输出参数组合单独编写代码。在某些情况下,用户可能无法确定实际传递的输入或输出参数数量,这时可以使用varargin和varargout实现可变数量的参数传递。这两个函数方便处理复杂的输入和输出参数组合。varargin和varargout会将实际传递的参数封装为元胞数组,因此在函数实现中,需要通过元胞数组的方法来访问varargin和varargout中的参数值。
 

例:可变数目的参数传递 

function y = demo24091801(x)
a = 0;
for i = 1:1:length(x)a = a+mean(x(i));
end
y = a/length(x);

 

3.返回被修改的输入参数

MATLAB函数拥有独立于工作区的变量空间,因此在函数内部对输入参数的修改仅在该函数的变量空间中有效。这些修改后的值在函数调用结束后将自动清除,除非显式将它们返回到工作区。

function y = demo24091801(x)
x=x+8
y = x.^pi

对于这个代码,在命令行输入对x先进行赋值,后对y进行计算 

 由此结果可见,调用结束后,函数变量区中的x在函数调用中被修改,但此修改只在函数变量区有效, 这并没有影响到MATLAB工作区变量空间中变量x的值,函数调用前后,MATLAB工作区中的变量x始终取值为7。

那么,如果用户希望函数内部对输入参数的修改也对MATLAB工作区的变量有效,就需要在函数输出 参数列表中返回此输入参数。

对于上面的例子,需要把函数修改成function[y,x] = demo24091801(x)

function [y,x] = demo24091801(x)
x=x+8
y = x.^pi

通过函数调用后,MATLAB工作区中变量x的取值从8变为17,可见通过[y,x]=demo24091801(x)调用,实现了函数对MATLAB工作区变量的修改。 

4. 全局变量

通过返回修改后的输入参数,可以在函数内部实现对MATLAB工作区变量的修改;另一种相似的方法是使用全局变量。声明全局变量时需使用global关键词,格式为global variable。

全局变量允许MATLAB工作区和多个函数之间共享同一变量,这样任何对全局变量的更改都会直接影响其值。

在应用全局变量时,通常在各个函数内部通过global variable 语句声明,在命令行窗口或脚本M文件中 也要先通过global声明,然后进行赋值。

例:全局变量的使用示例

function y = demo24091801(x)
global a;
a = a+9;
y = cos(x);

 

用global将a声明为全局变量后,函数内部对a的修改也会直接作用到MATLAB工作区 中。函数调用一次后,a的值从8变为17。

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

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

相关文章

【AI工作流】选择AI问答还是AI工作流:提升Python开发效率的最佳实践与应用场景

许多学习者在获取Python知识时,常常会遇到一个问题:在询问某个函数或概念时,可能会得到与所需语言不符的答案。这种情况不仅浪费了时间,还可能导致学习上的误解。因此,找到一个高效的学习工具显得尤为重要。 在这篇文…

2024年9月12日美国Embarcadero公司正式发布RAD Studio Delphi/C++ Builder 12.2 雅典

Embarcadero 非常高兴地宣布,从今天开始,RAD Studio 12.2 Athens 以及 Delphi 12.2 和 CBuilder 12.2 可供客户使用。RAD Studio 12.2 Athens 版本提供了我们在 IDE 中的第一次生成式 AI 集成、用于 Web 开发的新模板库、基于 C Win64 Clang 的新编译器和…

Java | Leetcode Java题解之第416题分割等和子集

题目&#xff1a; 题解&#xff1a; class Solution {public boolean canPartition(int[] nums) {int n nums.length;if (n < 2) {return false;}int sum 0, maxNum 0;for (int num : nums) {sum num;maxNum Math.max(maxNum, num);}if (sum % 2 ! 0) {return false;}…

Linux驱动开发 ——架构体系

只读存储器&#xff08;ROM&#xff09; 1.作用 这是一种非易失性存储器&#xff0c;用于永久存储数据和程序。与随机存取存储器&#xff08;RAM&#xff09;不同&#xff0c;ROM中的数据在断电后不会丢失&#xff0c;通常用于存储固件和系统启动程序。它的内容在制造时或通过…

计算机的错误计算(九十七)

摘要 讨论 的计算精度问题。 由计算机的错误计算&#xff08;九十六&#xff09;知&#xff0c;IEEE754-2019标准中含有 运算。 另外&#xff0c;似乎没有语言直接编程实现内置了该运算。 例1. 已知 x-0.9999999999076 . 计算 不妨用 Python的 math库与 numpy库中的 …

PC端远程连接交换机(思科模拟器)

建立远程连接交换机&#xff08;简单版 新手放心食&#xff09; **任务驱动&#xff1a;**实现PC端可以远程登陆交换机&#xff0c;交换机型号是2950-24&#xff0c;拓扑图如下&#xff1a; 一、配置交换机 代码块如下&#xff1a; Switch>enable Switch#config terminal…

html+css+js网页设计 旅游 穷游10个页面

htmlcssjs网页设计 旅游 穷游10个页面 网页作品代码简单&#xff0c;可使用任意HTML辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 获取源码 1&#xff…

Python编码系列—Python桥接模式:连接抽象与实现的桥梁

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

【常用集合】深入浅出Map集合

HashMap HashMap 主要用来存放键值对&#xff0c;它基于哈希表的 Map 接口实现&#xff0c;是常用的 Java 集合之一&#xff0c;是非线程安全的。 HashMap 可以存储 null 的 key 和 value&#xff0c;但 null 作为键只能有一个&#xff0c;null 作为值可以有多个。 底层实现…

C# 找到给定点集的简单闭合路径(Find Simple Closed Path for a given set of points)

给定一组点&#xff0c;将这些点连接起来而不相交 例子&#xff1a; 输入&#xff1a;points[] {(0, 3), (1, 1), (2, 2), (4, 4), (0, 0), (1, 2), (3, 1}, {3, 3}}; 输出&#xff1a;按以下顺序连接点将 不造成任何交叉 {(0, 0), (3, …

前端分段式渲染较长文章

实现思路&#xff1a; 1. 后端返回整篇文章。 2. JavaScript 分段处理&#xff1a;将文章按一定的字符或段落长度分割&#xff0c;然后逐步将这些段落追加到页面上。 3. 定时器或递归调用&#xff1a;使用 setInterval 或 setTimeout 来控制段落的逐步渲染。 代码实现示例 …

Linux(6)--CentOS目录

文章目录 1. 根目录2. cd目录切换命令3. CentOS目录介绍4. pwd命令介绍5. ls命令介绍5.1 ls5.2 ls -a5.3 ls -l 1. 根目录 Windows电脑的根目录是计算机(我的电脑)&#xff0c;然后C盘、D盘。 Linux系统的根目录是/&#xff0c;我们可以使用cd /进入根目录&#xff0c;然后使…

Java访问一口气讲完!o(*≧▽≦)ツ┏━┓

Java this关键字 Java面向对象设计 - Java this关键字 什么是 this&#xff1f; Java有一个名为 this 的关键字。它是对类的当前实例的引用。 它只能在实例的上下文中使用。 以下代码显示如何使用this关键字。 public class Main {int varA 1;int varB varA; // Assign …

深入探索Docker核心原理:从Libcontainer到runC的演化与实现

随着容器技术的发展&#xff0c;Docker从早期的Libcontainer逐步演化到runC&#xff0c;推动了容器运行时的标准化进程。Libcontainer是Docker容器的核心管理工具&#xff0c;而runC则在此基础上发展成为符合OCI&#xff08;Open Container Initiative&#xff09;标准的轻量级…

8.2Roberts算子边缘检测

基本概念 Roberts算子是一种简单的一阶导数边缘检测算子&#xff0c;它通过计算图像在水平和垂直方向上的梯度来检测边缘。在OpenCV中&#xff0c;Roberts算子可以通过手动应用卷积核来实现。Roberts算子是一组2x2的小型滤波器&#xff0c;用于检测图像中的垂直和水平边缘。 …

GEE 案例:利用sentinel-2数据计算的NDVI指数对比植被退化情况

目录 简介 NDVI指数 数据 函数 ui.Chart.image.series(imageCollection, region, reducer, scale, xProperty) Arguments: Returns: ui.Chart 代码 结果 简介 利用sentinel-2数据计算的NDVI指数对比植被退化情况 NDVI指数 NDVI&#xff08;Normalized Difference Ve…

遥感图像目标检测数据集-DOTA数据集

DOTA数据集(v1.0版本和v1.5版本)&#xff0c;训练集1411张&#xff0c;验证集458张&#xff0c;测试集若干&#xff0c;共16种类别。数据集图片大小不一&#xff0c;需要进行裁剪&#xff0c;可设置裁剪重叠大小以及裁剪图片大小。此处按照默认参数裁剪&#xff0c;重叠200像素…

二极管选型

稳压二极管&#xff08;齐纳二极管&#xff09; 肖特基二极管 发光二极管 TVS二极管

记录一下ElementUI 3 在浏览器导入, table表格显示问题

当时问题忘了截图, 现在通过文字记录一下问题 我直接在html了引入 vue3 和 ElementUI 3 , 使用了table组件, 但是表格的td 总是只显示一列, 问题是我的 el-table-column 标签 没有结束标签 , 在vue文件模块化里写不需要结束标签, 在浏览器里无法直接识别出来, 所以他是渲染了第…

基于yolov8的肉鸡健康状态检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的肉鸡健康状态检测系统是一个先进的目标检测应用&#xff0c;旨在通过图像分析实现对肉鸡健康状态的快速、准确评估。该系统利用了YOLOv8模型的尖端技术&#xff0c;该模型由Ultralytics公司开发&#xff0c;具有卓越的检测精度和速度。 YOLOv8模型采…