欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > Day29_0.1基础学习MATLAB学习小技巧总结(29)——参数估计函数

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

2024/10/25 2:26:19 来源:https://blog.csdn.net/qq_47248729/article/details/142322715  浏览:    关键词: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。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com