设为首页收藏本站

EPS数据狗论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1491|回复: 0

MATLAB自定义函数

[复制链接]

8

主题

93

金钱

152

积分

入门用户

发表于 2019-10-30 16:14:10 | 显示全部楼层 |阅读模式

MATLAB自定义函数形式
  1. function [a,b,c] = funname(x1,x2,x3)
复制代码


输入变量
对于输入变量,MATLAB可以识别输入变量的个数,通过nargin来记录当前输入变量个数。
  1. if nargin == 1
  2.     ···
  3. elseif nargin == 2
  4.     ····
  5. elseif nargin == 3
  6.     ···
  7. end
复制代码

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

输出变量
对于输出变量,MATLAB可以根据调用情况来输出结果
  1. y = funname(x1)
  2. [y1,y2] = funname(x1)
  3. [y1,y2,y3] = funnamr(x1)
复制代码

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

函数调用帮助
函数做好之后,需要写好说明,否则代码的通用性会很差!matlab自动将函数下的注释当作函数说明,通过help来查看帮助文档
  1. help funname
复制代码
  1. function y = mean(x,dim,flag,flag2)
  2. %MEAN   Average or mean value.
  3. %   S = MEAN(X) is the mean value of the elements in X if X is a vector.
  4. %   For matrices, S is a row vector containing the mean value of each
  5. %   column.
  6. %   For N-D arrays, S is the mean value of the elements along the first
  7. %   array dimension whose size does not equal 1.
复制代码

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

自己动手写一个函数
这里我们来动手写一个数据标准化的函数,具体要求是这样的
对于一组数据
x1,x2,⋯,xm
, 分高优指标(越大越好),低优指标(越小越好),中优指标(越趋近于某个值越好),均优指标(越趋近于某个区间越好),四种标准化方式对数据标准化。

  1. function [x] = standlize(v,type,q)
  2. %STANDLIZE   对列向量v 进行归一化 返回归一化后的向量 x
  3. %  x = STANDLIZE(v,'low') 对列向量按低优指标进行归一化
  4. %  x = STANDLIZE(v,'high') 对列向量按高优指标进行归一化
  5. %  x = STANDLIZE(v,'middle',q) 对列向量按中优指标进行归一化
  6. %  x = STANDLIZE(v,'between',q) 其中 q = [a , b] 对列向量按均优指标进行归一化
  7. m = length(v);
  8. if nargin==2
  9.     if strcmp(type,'low') %低优指标
  10.         for i=1:m
  11.             x(i) = (max(v)-v(i))/(max(v)-min(v));
  12.         end
  13.     elseif  strcmp(type,'high') %高优指标
  14.         for i=1:m
  15.             x(i) = (v(i)-min(v))/(max(v)-min(v));
  16.         end
  17.     end
  18. elseif nargin==3
  19.     if strcmp(type,'middle')&&length(q)==1 %中优指标
  20.         for i=1:m
  21.             if v(i) < q
  22.                 x(i) = 1 - (q-v(i))/max([q-min(v),max(v)-q]);
  23.             elseif  v(i) > q
  24.                 x(i) = 1 - (v(i)-q)/max([q-min(v),max(v)-q]);
  25.             else
  26.                 x(i) = 1;
  27.             end
  28.         end
  29.     elseif strcmp(type,'between')&&length(q)==2 %均优指标
  30.         for i=1:m
  31.             if v(i) < q(1)
  32.                 x(i) = 1-(q(1)-v(i))/(max([q(1)-min(v),max(v)-q(2)]));
  33.             elseif v(i) > q(2)
  34.                 x(i) = 1-(v(i)-q(2))/(max([q(1)-min(v),max(v)-q(2)]));
  35.             else
  36.                 x(i)=1;
  37.             end
  38.         end
  39.     end
  40. end
  41. x = reshape(x,size(v));
  42. end
复制代码



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

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

客服中心
关闭
在线时间:
周一~周五
8:30-17:30
QQ群:
653541906
联系电话:
010-85786021-8017
在线咨询
客服中心

意见反馈|网站地图|手机版|小黑屋|EPS数据狗论坛 ( 京ICP备09019565号-3 )   

Powered by BFIT! X3.4

© 2008-2028 BFIT Inc.

快速回复 返回顶部 返回列表