關于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

提交評論