mapminmax
语法
[Y,PS] = mapminmax(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')
remconst('pcheck',FP)
描述
mapminmax将矩阵中每一行规范化到[YMIN,YMAX]范围内。
mapminmax(X,YMIN,YMAX)中参数YMIN,YMAX是可选的。 Matlab中文论坛
X为N*Q的矩阵或者每一元素为1*TS细胞元组的N*Q的矩阵。
YMIN Y中每个行的最小值(默认为-1)
YMAX Y中每个行的最大值(默认为1) book.iLoveMatlab.cn
返回值:
Y M*Q的矩阵(M=Q)
PS 处理过程的设置,实现对数据的一致处理
mapminmax(X,FP) 参数为一个结构:FP.ymin, FP.ymax
mapminmax('apply',X,PS) 对X根据PS中的配置做同样的规范化,返回Y
mapminmax('reverse',Y,PS) 根据规范化后的Y及PS中的配置反归一化,返回X
mapminmax('dx',X,Y,PS) returns the M x N x Q derivative of Y with respect to X.
mapminmax('dx',X,[],PS) returns the derivative, less efficiently.
mapminmax('name') 返回处理方法的歼前名字
mapminmax('pdefaults') 返回默认的处理参数的结构
mapminmax('pdesc')返回处理参数的描述
mapminmax('pcheck'虚肆,FP) 如果任意一个参数非法返回错误信息
举例
下面是如何规范化一个矩阵的过程,这个规范化将每一行的最小值与最大值映射到区间[-1,1]
x1 = [1 2 41 1 13 2 20 0 0]
[y1,PS] = mapminmax(x1)
下一步,对新的值应用同样的处理方法 book.iLoveMatlab.cn
x2 = [5 2 31 1 16 7 30 0 0]
y2 = mapminmax('apply',x2,PS)
将y1反归一化回x1
x1_again = mapminmax('reverse',y1,PS)
算法
mapminmax假设x的值为实数,差改轿并且每一行的元素值不相等
y = (ymax - ymin)*(x - xmin)/(xmax - xmin) + ymin
参考如下代码:function [c,err,yc]=bisect(f,a,b,delta)
%二分法求根Matlab源代码
%f为所要求解的函数则姿晌,一般为匿名函数册镇、inline函数或者M文件
%a,b为求根区间
%delta为允许的误差精度
%c为近似解
%err为误差估计
%yc为函孙锋数f在c点的函数值
%EXAMPLE
%>>f=inline('x^4-x-1')bisect(f,1,2)
%by dynamic
%all rights preserved by www.matlabsky.cn
%2008.7.3
if nargin<4
delta=1e-6
end
ya=feval(f,a)
yb=feval(f,b)
if yb==0
c=b
return
elseif ya==0
c=a
return
end
if ya*yb>0
disp(['区间[' num2str(a) num2str(b) ']没有根,请重新选择求根区间'])
return
end
nn=1+round((log(b-a)-log(delta))/log(2))
for kk=1:nn
c=(a+b)/2
yc=feval(f,c)
if yc==0
a=c
b=c
break
elseif yb*yc>0
b=c
yb=yc
else
a=c
ya=yc
end
if (b-a)<delta
break
你的问题看得不是太懂,不过最小二乘法的函数是lsqcurvefit使大消孝用方法是:
lsqcurvefit(fun,a0,x,y)
其中fun为函数原型
a0为最优化的初始桥卜值
x,y为原始滚稿输入输出数据向量
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)