在写《用Matlab演示Parzen窗法》的时候,我还不知道怎样在m中设计可变参数函数。

后来阅读一些m自带函数源码时发现了它的秘密,只要将最后一个参数设置为varargin,就可以实现。

例如,写了一个函数:function test(varargin)

那么在这个函数里,varargin就是一个cell数组,它包含了用户输入的参数。下面是一个例子:

function test(varargin)
disp(['nargin is ' num2str(nargin)]);
for v=1:numel(varargin)
      disp(['varargin{' num2str(v) '} class is ' class(varargin{v})]);
end

完全就是使用cell数组的方法来处理用户输入的个数不定的参数,如果我们这样调用这个函数:

>> test()

会得到结果:

nargin is 0

表示用户输入参数个数为0个,就是没有输入参数。

如果这样调用:

>> test(1,'a',uint8(32),'123456');

会得到结果:

nargin is 4
varargin{1} class is double
varargin{2} class is char
varargin{3} class is uint8
varargin{4} class is char

表示用户输入了4个参数,第一个是double类型,第二个是char类型,第三个是uint8类型,第四个也是char类型。

也就是说,只要把函数的参数列表的最后一个参数写成varargin,就可以在函数内部以访问cell数组的方式来获取可变参数的信息。

有了这个varargin,我们就可以改写原来那个Parzen函数了。原来的Parzen函数的最后一个参数是函数句柄,用来传入窗函数,但是也可不指定窗函数,那么Parzen会自动使用正态窗,但是那时不知道使用varargin,于是在使用默认的正态窗时,最后一个参数依然得指定,输入一个[]。这样也凑合,能用,但毕竟不优雅。

这几天忙于做最简单的雷达信号仿真(不知道为什么在最繁忙的时候事情总是最多),需要使用Parzen窗法估计接收信号的概率密度函数,以使用贝叶斯来确定门限。趁此机会把Parzen函数改写了,如下:

function p=Parzen(xi,x,h1,varargin)
%xi为样本,x为概率密度函数的自变量的取值,
%h1为样本数为1时的窗宽,
%最后一个参数为窗函数句柄,
%不指定则使用正态窗
%返回x对应的概率密度函数值
n=numel(varargin);
if 0==n
    %若没有指定窗的类型,就使用正态窗函数
    f=@(u)(1/sqrt(2*pi))*exp(-0.5*u.^2);
elseif 1==n
    if isa(varargin{1},'function_handle')
        f=varargin{1};
    else
        disp('The last param must be function handle');
        p=[];
        return;
    end
else
    disp('too many param');
    p=[];
    return;
end;
N=size(xi,2);
hn=h1/sqrt(N);
[X Xi]=meshgrid(x,xi);
p=sum(f((X-Xi)/hn)/hn)/N;

Matlab中使用varargin来实现参数可变的函数相关推荐

  1. 【C语言进阶深度学习记录】三十九 C语言中的可变参数(参数可变的函数)

    用过printf()函数的热都知道,printf的参数可以有多个,它是可变的,根据我们输出参数的类型以及个数的不同来确定参数.今天来学习C语言中参数可变的函数是如何实现的. 文章目录 1 可变参数 2 ...

  2. MATLAB中使用LIBSVM进行SVM参数寻优

    MATLAB中使用LIBSVM进行SVM参数寻优 一些资源网站 配置 svmtrain svmParams -t:表示选择的核函数类型 -g为核函数的参数系数 -c为惩罚因子系数 -v为交叉验证的数, ...

  3. [Matlab] Matlab中rand,randn,rands和randi函数使用

    工业过程数据建模QQ群: 516473179 (欢迎交流) rand(m,n) 生成m行n列均匀分布在(0~1)之间的伪随机数 randn (m,n) 生成m行n列标准正态分布的伪随机数(均值为0,方 ...

  4. 如何在MATLAB中调用(运行)“用Python写成的函数或脚本”

    如何在MATLAB中调用"用Python写成的函数或脚本",首先要确保MATLAB知道咱们的Python解释器的位置在哪里. 如果安装了Python的时候把Python加入了系统环 ...

  5. matlab 第一类修正贝塞尔函数,零阶贝塞尔函数 在MATLAB中怎样画出零阶修正贝塞尔函数...

    第二类修正贝塞尔函数的零阶和一阶,分别怎样用mat回忆终究只是回忆,它只代表一段过去,一段历史,回忆再美也只是曾经,告别过去,期待未来. 书上说 (0和1都是下标) K0(z), the zeroth ...

  6. MATLAB中的varargin,varargout在函数中运用

    varargin,表示用在一个函数中,输入参数不确定的情况,这增强了程序的灵活性.               例如:function g=fun(f,varargin)               ...

  7. MATLAB中曲线拟合方法总结(包括对数正态分布函数)

    鉴于最近遇到非线性函数拟合问题,本人对网上有关matlab多种类型的线性.非线性曲线拟合的方法进行了总结,希望对各位朋友有所帮助. 1. Matlab有一个功能强大的曲线拟合工具箱 cftool ,使 ...

  8. MATLAB输入x标签,matlab中xlabel,ylabel,legend和text函数中使用latex

    Matlab中巧用LaTex众所周知,大多数科研工作者(大Boss或者象我们一样的学术打工仔)都会用到Matlab生成图片,图片的title或者legend最好有相应的说明,经常用到公式,比方说α,β ...

  9. matlab中antoine方程应用,五参数antoine方程

    饱和蒸汽压曲线(五参数含图表示例)_能源/化工_工程科技_专业资料.Antoine常数数据库为 Excel版本,内容包括了 4958种有机化合物的Antoine常数数据库,它是从事化工...... 常 ...

  10. matlab中变压器的励磁阻抗参数设置,【请教变压器零序阻抗与正序或负序阻抗之间的比例关系,如1台变压器的阻抗4.5%,哪他的零序阻抗通常是多少?】_阻抗 变压器_全球新能源网...

    热心网友:变压器负序阻抗=正序阻抗变压器的零序阻抗的理论值计算较为复杂,零序阻抗与绕组的连接组别有关,也与绕组和铁芯之间的结构布置.铁芯结构型式有关,精确计算时需要进行电磁场计算,在工程上没有必要.工 ...

最新文章

  1. SQLIOSim 模拟SQLServer的行为来测试IO性能
  2. Java工具类--Map集合与Java对象相互转换
  3. Qt Creator和Visual Studio双环境开发技能攻略
  4. 小强升职记思维导图_你学会用 “思维导图” 学英语了吗?
  5. 如果我使用Docker,是否需要OpenStack?
  6. BOM(浏览器对象模型)
  7. ssms中怎么设置自增_如何在SSMS状态栏中设置自定义颜色
  8. 41.字符串函数(三)
  9. 如何设计会员体系中心
  10. 常见机器视觉软件OpenCV/Halcon/VisionPro/MIL的区别
  11. 解决jmeter5.4.3在高分辨率下的显示问题
  12. 9、Vue自定义指令
  13. response Headers字段详解
  14. 人脸识别门禁项目总结(STM32部分)
  15. 开源的微信个人号接口 itchat 使用
  16. 群晖Transmission的RSS订阅功能
  17. 电磁兼容入门篇之”分贝“,你理解的不过是冰山一角
  18. 直播带货系统,带货直播系统中发布商品的逻辑处理流程
  19. 如何找到一个好的学习率
  20. 完了,二哥网站的图片挂了

热门文章

  1. Spring Boot 系列(七)Swagger2-生成RESTful接口文档
  2. Android高级控件(一)——ListView绑定CheckBox实现全选,添加和删除等功能
  3. Instruments工具的使用
  4. 【转】windows下GSL的配置
  5. BZOJ1941: [Sdoi2010]Hide and Seek
  6. 【Oracle】常用SQL
  7. js获取谷歌浏览器版本
  8. 使用phpExcel实现Excel数据的导入导出(完全步骤)
  9. What is “Deploy applications configured in Tomcat instance” in IntelliJidea
  10. oracle使用between and边界问题