(1)如果是正则化项,一般用范数表示:
norm(X)默认等同于 norm(X,2),返回 X的2-范数;
norm(X,1) 返回 X的1-范数;
norm(X,Inf) 返回 X的无穷范数;
norm(X,'fro') 返回 X的F范数.
(2)如果是某一具体的正则化方法,估计需要自己编程,仿佛曾见过老外编的一个正则化工具箱,里面包括常见的正则化方法,例如:Tikhnove正则化。
MatLab归一化(正则化)函数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
下面是我自己编写的一个二分法的程序 我没有给全 具体你可以到 http://www.matlabsky.cn/viewthread.php?tid=518&extra=page%3D1&frombbs=1 查看全部代码 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欢迎分享,转载请注明来源:内存溢出
评论列表(0条)