如果你刚接触matlab,可以看这篇Matlab自定义函数详解

MATLAB自定义函数形式

function [a,b,c] = funname(x1,x2,x3)

输入变量

对于输入变量,MATLAB可以识别输入变量的个数,通过nargin来记录当前输入变量个数。

if nargin == 1
···
elseif nargin == 2
····
elseif nargin == 3
···
end

通过nargin判断变量个数,然后再写对应的程序。

输出变量

对于输出变量,MATLAB可以根据调用情况来输出结果

y = funname(x1)
[y1,y2] = funname(x1)
[y1,y2,y3] = funnamr(x1)

根据调用的格式,自动忽略没匹配上的输出结果。

函数调用帮助

函数做好之后,需要写好说明,否则代码的通用性会很差!matlab自动将函数下的注释当作函数说明,通过help来查看帮助文档

help funname
function y = mean(x,dim,flag,flag2)
%MEAN Average or mean value.
% S = MEAN(X) is the mean value of the elements in X if X is a vector.
% For matrices, S is a row vector containing the mean value of each
% column.
% For N-D arrays, S is the mean value of the elements along the first
% array dimension whose size does not equal 1.

上面是mean函数的帮助说明。

自己动手写一个函数

这里我们来动手写一个数据标准化的函数,具体要求是这样的

对于一组数据 $$ x_{1}, x_{2}, \cdots, x_{m} $$, 分高优指标(越大越好),低优指标(越小越好),中优指标(越趋近于某个值越好),均优指标(越趋近于某个区间越好),四种标准化方式对数据标准化。

function [x] = standlize(v,type,q)
%STANDLIZE 对列向量v 进行归一化 返回归一化后的向量 x
% x = STANDLIZE(v,'low') 对列向量按低优指标进行归一化
% x = STANDLIZE(v,'high') 对列向量按高优指标进行归一化
% x = STANDLIZE(v,'middle',q) 对列向量按中优指标进行归一化
% x = STANDLIZE(v,'between',q) 其中 q = [a , b] 对列向量按均优指标进行归一化
m = length(v);
if nargin==2
if strcmp(type,'low') %低优指标
for i=1:m
x(i) = (max(v)-v(i))/(max(v)-min(v));
end
elseif strcmp(type,'high') %高优指标
for i=1:m
x(i) = (v(i)-min(v))/(max(v)-min(v));
end
end
elseif nargin==3
if strcmp(type,'middle')&&length(q)==1 %中优指标
for i=1:m
if v(i) < q
x(i) = 1 - (q-v(i))/max([q-min(v),max(v)-q]);
elseif v(i) > q
x(i) = 1 - (v(i)-q)/max([q-min(v),max(v)-q]);
else
x(i) = 1;
end
end
elseif strcmp(type,'between')&&length(q)==2 %均优指标
for i=1:m
if v(i) < q(1)
x(i) = 1-(q(1)-v(i))/(max([q(1)-min(v),max(v)-q(2)]));
elseif v(i) > q(2)
x(i) = 1-(v(i)-q(2))/(max([q(1)-min(v),max(v)-q(2)]));
else
x(i)=1;
end
end
end
end
x = reshape(x,size(v));
end

运行测试

可以看到,对于1到10这样一组数据,通过standlize这个函数的不同调用方式,实现了数据的指标标准化。通过help可以查看用法。

MATLAB自定义函数的更多相关文章

  1. matlab 自定义函数及调用

    这一篇博客主要学习了: 第一,自定义函数优点有很多,比如可重复利用:容易纠错,以后直接装入大工程里(更重要的是,实参是复制给形参的,在自定义函数中运行时形参独立显示,这一点和C不一样). 第二,通过h ...

  2. matlab自定义函数的五种表示(前2种重点)

    1.命令文件/函数文件+函数文件:多个M文件 2.函数文件+子函数:一个M文件 3. inline:无需M文件 4.符号表达式+subs方式:无需M文件 5.字符串+subs方式:无需M文件 第一种: ...

  3. Matlab中函数定义方法

    Matlab自定义函数的六种方法 n1.函数文件+调用函数(命令)文件:需单独定义一个自定义函数的M文件: n2.函数文件+子函数:定义一个具有多个自定义函数的M文件: n3.Inline:无需M文件 ...

  4. Matlab基本功能:自定义函数、添加块注释、定时器的试用

    1.自定义函数 新建一个m文件 在m文件里面第一行输入function [X,Y]=pll(X1,Y1,X2,Y2),这里x1 x2 y1 y2是你函数的输入值, x y是输出值,接着定义你要实现的功 ...

  5. matlab 子函数的使用

    本文参考了该篇博客:http://www.cnblogs.com/MarshallL/p/4048846.html 对其进行学习,为我所用吧. 一. 在matlab的函数定义中,如果函数如果函数较长或 ...

  6. Origin使用自定义函数拟合曲线函数

    (2019年2月19日注:这篇文章原先发在自己github那边的博客,时间是2016年10月28日) 最近应该是六叔的物化理论作业要交了吧,很多人问我六叔的作业里面有两道题要怎么进行图像函数的拟合.综 ...

  7. Mysql - 存储过程/自定义函数

    在数据库操作中, 尤其是碰到一些复杂一些的系统, 不可避免的, 会用到函数/自定义函数, 或者存储过程. 实际项目中, 自定义函数和存储过程是越少越好, 因为这个东西多了, 也是一个非常难以维护的地方 ...

  8. Entity Framework 6 Recipes 2nd Edition(10-5)译 -> 在存储模型中使用自定义函数

    10-5. 在存储模型中使用自定义函数 问题 想在模型中使用自定义函数,而不是存储过程. 解决方案 假设我们数据库里有成员(members)和他们已经发送的信息(messages) 关系数据表,如Fi ...

  9. mysql 常用自定义函数解析

    -- /* -- * 用于获取一记录数据,根据传入的分隔字符delim,索引位置pos,返回相对应的value -- * SELECT Json_getKeyValue({"A": ...

随机推荐

  1. Boring counting HDU - 3518 (后缀数组)

    Boring counting \[ Time Limit: 1000 ms \quad Memory Limit: 32768 kB \] 题意 给出一个字符串,求出其中出现两次及以上的子串个数,要 ...

  2. Hibernate——离线查询

    1.Criteria查询方式: (1)一般方式: 缺点:每一次查询dao层都需要书写对应的方法,离线查询可以解决这个问题. (2)离线方式: 2.离线查询 用DetachedCriteria来构造查询 ...

  3. vuex传递数据的流程

    当组件修改数据的时候必须通过store.dispatch来调用actions中的方法,当actions中的方法被触发的时候通过调用commit的方法来触发mutations里面的方法,mutation ...

  4. 中国大学生计算机系统与程序设计竞赛 CCF-CCSP-2016 选座( ticket_chooser )

    选座( ticket_chooser ) 不会正解,欢迎讨论 //60分 #include<cstdio> #define max(a,b) (a)>(b)?a:b #define ...

  5. .NET总结--泛型与泛型集合,应用场景

    泛型优点 1.提高代码复用性,代码简洁直观 2.直接存储数据类型免去数据类型之间得隐式转换 3.免去拆箱装箱过程,提高效率 4.数据类型安全,存储时会验证是否对应该类型 泛型集合 一. ArrayLi ...

  6. lintcode- 22.平面表

    题目描述 22. 平面列表 给定一个列表,该列表中的每个要素要么是个列表,要么是整数.将其变成一个只包含整数的简单列表. 样例 给定 [1,2,[1,2]],返回 [1,2,1,2]. 给定 [4,[ ...

  7. 如何新建WebAPI,生成注释,TestAPI的项目

    一.新建WebAPI的项目 1. 在Web下,ASP.NET Web 应用程序,点击确定 2. 点击确定 3. 如图所示, 新建Controller 4 . 运行项目 二.注释 1. 在生成中,勾选x ...

  8. HustOJ二次开发之修改数据库连接池

    有的时候我们会因为某种业务需要的情况下,需要修改hustoj默认的数据库连接池之类的. 修改数据库连接池步骤 进入到对应的目录 /home/judge/src/web/include 找到db_inf ...

  9. Guava Cache 缓存实现与源码分析

    目录 一.概述 1.内存缓存 2.核心数据结构 二.具体实现 0.一览众山小 1.CacheBuilder 构建器 2.LocalCache 一.概述 1.内存缓存 可看作一个jdk7的concurr ...

  10. [BUAA软工]提问回顾与个人总结

    提问回顾与个人总结 项目 内容 所属课程 2019春季计算机学院软件工程(任健) 所属作业 提问回顾与问题总结 课程目标 理解软件工程的作用和重要性,提升工程能力,团队协作能力 作业目标 回顾软工课程 ...