关于matlab无法调用mapmin解决办法_第1页
关于matlab无法调用mapmin解决办法_第2页
关于matlab无法调用mapmin解决办法_第3页
关于matlab无法调用mapmin解决办法_第4页
关于matlab无法调用mapmin解决办法_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实用文档关于matlab系列无法调用mapminmax函数的解决方法

matlab7.0/7.1以及以下版本的函数库中没有mapminmax函数,所以编程调用这个函数时会提示未定义该函数,查了写资料,但是网友回答的太不靠谱了,我自己做了下总结,方法如下:

1.matlab升级到7.8或者以上版本,这些版本的matlab中自带有mapminmax函数,可以直接调用。

2.不想升级的话,我们就要自己写mapminmax函数了,这里我提供mapminmax函数的源程序如下:

function[out1,out2]=mapminmax(in1,in2,in3,in4)%MPMINMAXMapmatrixrowminimumandmaximumvaluesto[-11].%

%Syntax

%

%[y,ps]=mapminmax(x,ymin,ymax)

%[y,ps]=mapminmax(x,fp)

%y=mapminmax('apply',x,ps)

%x=mapminmax('reverse',y,ps)

%dx_dy=mapminmax('dx',x,y,ps)

%dx_dy=mapminmax('dx',x,[],ps)

%name=mapminmax('name');

%fp=mapminmax('pdefaults');

%names=mapminmax('pnames');

%mapminmax('pcheck',fp);

%

%Description

%

%MAPMINMAXprocessesmatricesbynormalizingtheminimumandmaximumvalues

%ofeachrowto[YMIN,YMAX].

%

%MAPMINMAX(X,YMIN,YMAX)takesXandoptionalparameters,

%X-NxQmatrixora1xTSrowcellarrayofNxQmatrices.

%YMIN-MinimumvalueforeachrowofY.(Defaultis-1)

%YMAX-MaximumvalueforeachrowofY.(Defaultis+1)

%andreturns,

%Y-EachMxQmatrix(whereM==N)(optional).

%PS-Processsettings,toallowconsistentprocessingofvalues.

%

%MAPMINMAX(X,FP)takesparametersasstruct:FP.ymin,FP.ymax.

%MAPMINMAX('apply',X,PS)returnsY,givenXandsettingsPS.

%MAPMINMAX('reverse',Y,PS)returnsX,givenYandsettingsPS.

%MAPMINMAX('dx',X,Y,PS)returnsMxNxQderivativeofYw/respecttoX.

%MAPMINMAX('dx',X,[],PS)returnsthederivative,lessefficiently.

%MAPMINMAX('name')returnsthenameofthisprocessmethod.

%MAPMINMAX('pdefaults')returnsdefaultprocessparameterstructure.

%MAPMINMAX('pdesc')returnstheprocessparameterdescriptions.

%MAPMINMAX('pcheck',fp)throwsanerrorifanyparameterisillegal.

%

%Examples

%

%Hereishowtoformatamatrixsothattheminimumandmaximum

%valuesofeachrowaremappedtodefaultinterval[-1,+1].

%

%x1=[124;111;322;000]

%[y1,ps]=mapminmax(x1)

%

%Next,weapplythesameprocessingsettingstonewvalues.

%

%x2=[523;111;673;000]

%y2=mapminmax('apply',x2,ps)

%

%Herewereversetheprocessingofy1togetx1again.

%

%x1_again=mapminmax('reverse',y1,ps)

%

%Algorithm

%

%ItisassumedthatXhasonlyfiniterealvalues,andthat

%theelementsofeachrowarenotallequal.

%

%y=(ymax-ymin)*(x-xmin)/(xmax-xmin)+ymin;

%

%SeealsoFIXUNKNOWNS,MAPSTD,PROCESSPCA,REMOVECONSTANTROWS%Copyright1992-2006TheMathWorks,Inc.

%$Revision:$

%Processfunctionboilerplatescript

boiler_process%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Name

functionn=name

n='MapMinimumandMaximum';%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%ParameterDefaults

functionfp=param_defaults(values)iflength(values)>=1,fp.ymin=values{1};elsefp.ymin=-1;end

iflength(values)>=2,fp.ymax=values{2};elsefp.ymax=fp.ymin+2;end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%ParameterNames

functionnames=param_names()

names={'MininumvalueforeachrowofY.','MaximumvalueforeachrowofY.'};%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%ParameterCheck

functionerr=param_check(fp)mn=fp.ymin;

mx=fp.ymax;

if~isa(mn,'double')||any(size(mn)~=[11])||~isreal(mn)||~isfinite(mn)

err='yminmustbearealscalarvalue.';

elseif~isa(mx,'double')||any(size(mx)~=[11])||~isreal(mx)||~isfinite(mx)||(mx<=mn)

err='ymaxmustbearealscalarvaluegreaterthanymin.';

else

err='';

end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%NewProcess

function[y,ps]=new_process(x,fp)ifany(any(~isfinite(x)))

error('UseFIXUNKNOWNStoreplaceNaNvaluesinX.');

='mapminmax';

ps.xrows=size(x,1);

ps.yrows=ps.xrows;

ps.xmax=max(x,[],2);

ps.xmin=min(x,[],2);

ps.ymax=fp.ymax;

ps.ymin=fp.ymin;ifany(ps.xmax==ps.xmin)

warning('UseREMOVECONSTANTROWStoremoverowswithconstantvalues.');

endy=apply_process(x,ps);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%ApplyProcess

functiony=apply_process(x,ps)Q=size(x,2);

oneQ=ones(1,Q);

rangex=ps.xmax-ps.xmin;

rangex(rangex==0)=1;%Avoiddivisionsbyzero

rangey=ps.ymax-ps.ymin;

y=rangey*(x-ps.xmin(:,oneQ))./rangex(:,oneQ)+ps.ymin;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%ReverseProcess

functionx=reverse_process(y,ps)Q=size(y,2);

oneQ=ones(1,Q);

rangex=ps.xmax-ps.xmin;

rangey=ps.ymax-ps.ymin;

x=rangex(:,oneQ).*(y-ps.ymin)*(1/rangey)+ps.xmin(:,oneQ);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%DerivativeofYw/respecttoX

functiondy_dx=derivative(x,y,ps);Q=size(x,2);

rangex=ps.xmax-ps.xmin;

rangey=ps.ymax-ps.ymin;

d=diag(rangey./rangex);

dy_dx=d(:,:,ones(1,Q));

复制以上代码,在matlab中生成M文件,文件名取为mapminmax.m,然后放到currentDirectory路径中的work文件夹里面(这是我的工作空间),你们也可以放到自己的工作空间文件夹里面,这还没完,编译程序是还会提示木有boiler_process函数的提示,boiler_process函数源程序如下:%PROCESSFUNCTIONBOILERPLATECODE%Copyright2005-2007TheMathWorks,Inc.%TODO-AddsizecheckingforXandYif(nargin<1),error('NNET:Arguments','Notenougharguments.');endifisstr(in1)

switchlower(in1)

case'name',

ifnargin>1,error('NNET:Arguments','Toomanyinputargumentsfor''name''action'),end

if(nargout>1),error('NNET:Arguments','Toomanyoutputargumentsfor''name''action'),end

out1=name;

case'pdefaults'

ifnargin>2,error('NNET:Arguments','Toomanyinputargumentsfor''pdefaults''action'),end

ifnargin<2,in2={};end

if(nargout>1),error('NNET:Arguments','Toomanyoutputargumentsfor''pdefaults''action'),end

out1=param_defaults(in2);

case'pnames'

ifnargin>1,error('NNET:Arguments','Toomanyinputargumentsfor''pnames''action'),end

if(nargout>1),error('NNET:Arguments','Toomanyoutputargumentsfor''pnames''action'),end

out1=param_names;

case'pcheck'

if(nargin<2),error('NNET:Arguments','Notenoughinputargumentsfor''pcheck''action'),end

ifnargin>2,error('NNET:Arguments','Toomanyinputargumentsfor''pcheck''action'),end

if(nargout>1),error('NNET:Arguments','Toomanyoutputargumentsfor''pcheck''action'),end

if~isa(in2,'struct'),error('NNET:Arguments','Parametersarenotastruct.');end

names1=fieldnames(param_defaults({}));

names2=fieldnames(in2);

iflength(names1)~=length(names2),error('NNET:Arguments','Incorrectnumberofparameters.');end

names1=sort(names1);

names2=sort(names2);

fori=1:length(names1)

if~strcmp(names1{i},names2{i}),error('NNET:Arguments',['Parameterfieldnameisnotcorrect:'names2{i}]);end

end

out1=param_check(in2);

if(nargout==0)&&~isempty(out1)

error('NNET:Arguments',out1);

end

case'apply'

if(nargin<3),error('NNET:Arguments','Notenoughinputargumentsfor''apply''action.');end

if(nargin>3),error('NNET:Arguments','Toomanyinputargumentsfor''apply''action'),end

if(nargout>1),error('NNET:Arguments','Toomanyoutputargumentsfor''apply''action'),end

c=iscell(in2);

ifc

if(size(in2,1)~=1)

error('NNET:Arguments','CellarrayXmusthaveonlyonerow')

end

cols=size(in2,2);

colSizes=zeros(1,cols);

fori=1:cols

colSizes(i)=size(in2{1,i},2);

end

in2=cell2mat(in2);

elseif~isa(in2,'double')

error('NNET:Arguments','Xmustbeamatrixorarowcellarray')

end

out1=apply_process(in2,in3);

ifc

out1=mat2cell(out1,size(out1,1),colSizes);

end

case'reverse'

if(nargin<3),error('NNET:Arguments','Notenoughinputargumentsfor''reverse''action.');end

if(nargin>3),error('NNET:Arguments','Toomanyinputargumentsfor''reverse''action'),end

if(nargout>1),error('NNET:Arguments','Toomanyoutputargumentsfor''reverse''action'),end

c=iscell(in2);

ifc

if(size(in2,1)~=1)

error('NNET:Arguments','CellarrayXmusthaveonlyonerow')

end

cols=size(in2,2);

colSizes=zeros(1,cols);

fori=1:cols,colSizes(i)=size(in2{1,i},2);end

in2=cell2mat(in2);

elseif~(isnumeric(in2)||islogical(in2))

error('NNET:Arguments','Ymustbeamatrixorarowcellarray')

end

out1=reverse_process(in2,in3);

ifc

out1=mat2cell(out1,size(out1,1),colSizes);

end

out2=in3;

case'dx'

if(nargin<4),error('NNET:Arguments','Notenoughinputargumentsfor''dx''action.');end

if(nargout>1),error('NNET:Arguments','Toomanyoutputargumentsfor''dx''action'),end

ifisempty(in3)

in3=apply_process(in2,in4);

end

out1=derivative(in2,in3,in4);

case'dx_dy'

if(nargin<4),error('NNET:Arguments','Notenoughinputargumentsfor''dx''action.');end

if(nargout>1),error('NNET:Arguments','Toomanyoutputargumentsfor''dx''action'),end

ifisempty(in3)

in3=apply_process(in2,in4);

end

out1=reverse_derivative(in2,in3,in4);

case'simulink_params'

out1=simulink_params(in2);

case'simulink_reverse_params'

out1=simulink_reverse_params(in2);

otherwise

error('NNET:Arguments',['Firstargumentisanunrecognizedactionstring:'in1]);

end

return

endif(nargin<2)

in2=param_defaults({});

elseifisa(in2,'struct')

if(nargin>2)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论