1、解方程
最近有多人问如何用matlab解方程组的问题,其实在matlab中解方程组还是很方便的,例如,对于代数方程组Ax=b(A为系数矩阵,非奇异)的求解,MATLAB中有两种方法:
(1)x=inv(A)b — 采用求逆运算解方程组;
(2)x=A — 采用左除运算解方程组。
例:
x1+2x2=8
2x1+3x2=13
>>A=[1,2;2,3];b=[8;13];
>>x=inv(A)b
x =
200
300
>>x=A
x =
200
300;
即二元一次方程组的解x1和x2分别是2和3。
对于同学问到的用matlab解多次的方程组,有符号解法,方法是:先解出符号解,然后用vpa(F,n)求出n位有效数字的数值解具体步骤如下:
第一步:定义变量syms x y z ;
第二步:求解[x,y,z,]=solve('eqn1','eqn2',,'eqnN','var1','var2','varN');
第三步:求出n位有效数字的数值解x=vpa(x,n);y=vpa(y,n);z=vpa(z,n);。
如:解二(多)元二(高)次方程组:
x^2+3y+1=0
y^2+4x+1=0
解法如下:
>>syms x y;
>>[x,y]=solve('x^2+3y+1=0','y^2+4x+1=0');
>>x=vpa(x,4);
>>y=vpa(y,4);
结果是:
x =
1635+3029i
1635-3029i
-283
-2987
y =
1834-3301i
1834+3301i
-3600
-3307。
二元二次方程组,共4个实数根;
还有的同学问,如何用matlab解高次方程组(非符号方程组)?举个例子好吗?
解答如下:
基本方法是:solve(s1,s2,…,sn,v1,v2,…,vn),即求表达式s1,s2,…,sn组成的方程组,求解变量分别v1,v2,…,vn。
具体例子如下:
x^2 + xy + y = 3
x^2 - 4x + 3 = 0
解法:
>> [x,y] = solve('x^2 + xy + y = 3','x^2 - 4x + 3 = 0')
运行结果为
x =
1 3
y =
1 -3/2
即x等于1和3;y等于1和-15
或
>>[x,y] = solve('x^2 + xy + y = 3','x^2 - 4x + 3= 0','x','y')
x =
1 3
y =
1 -3/2
结果一样,二元二方程都是4个实根。
通过这三个例子可以看出,用matlab解各类方程组都是可以的,方法也有多种,只是用到解方程组的函数,注意正确书写参数就可以了,非常方便。
cite from:http://bbsseueducn/pc/pcconphpid=950&nid=14498&tid=0
2、变参数非线性方程组的求解
对于求解非线性方程组一般用fsolve命令就可以了,但是对于方程组中某一系数是变化的,该怎么求呢?
%定义方程组如下,其中k为变量
function F = myfun(x,k)
H=032;
Pc0=023;W=018;
F=[Pc0+H(1+15(x(1)/W-1)-05(x(1)/W-1)^3)-x(2);
x(1)-ksqrt(x(2))];
%求解过程
H=032;
Pc0=023;W=018;
x0 = [2W; Pc0+2H]; % 取初值
options = optimset('Display','off');
k=0:001:1; % 变量取值范围[0 1]
for i=1:1:length(k)
kk=k(i);
x = fsolve(@(x) myfun(x,kk), x0, options);%求解非线性方程组
x1(i)=x(1);
x2(i)=x(2);
end
plot(k,x1,'-b',k,x2,'-r');
xlabel('k')
legend('x1','x2')
cite from:http://forumsimwecom/archiver/tid-836299html
3、非线性方程数值求解
matlab里solve如何使用,是否有别的函数可以代替它
matlab里我解y=9/17exp(-1/2t)17^(1/2)sin(1/217^(1/2)t)=0这样的方程为什么只得到0这一个解,如何可以的到1/217^(1/2)t=n(pi)这样一族解
在matlab里面solve命令主要是用来求解代数方程(即多项式)的解,但是也不是说其它方程一个也不能解,不过求解非代数方程的能力相当有限,通常只能给出很特殊的实数解。(该问题给出的方程就是典型的超越方程,非代数方程)
从计算机的编程实现角度讲,如今的任何算法都无法准确的给出任意非代数方程的所有解,但是我们有很多成熟的算法来实现求解在某点附近的解。matlab也不例外,它也只能给出任意非代数方程在某点附近的解,函数有两个:fzero和fsolve,具体用法请用help或doc命令查询吧。如果还是不行,你还可以将问题转化为非线性最优化问题,求解非线性最优化问题的最优解,可以用的命令有:fminbnd, fminsearch, fmincon等等。
非线性方程数值求解
单变量非线性方程求解
在MATLAB中提供了一个fzero函数,可以用来求单变量非线性方程的根。该函数的调用格式为:
z=fzero('fname',x0,tol,trace)
其中fname是待求根的函数文件名,x0为搜索的起点。一个函数可能有多个根,但fzero函数只给出离x0最近的那个根。tol控制结果的相对精度,缺省时取tol=eps,trace 指定迭代信息是否在运算中显示,为1时显示,为0时不显示,缺省时取trace=0。
例 求f(x)=x-10x+2=0在x0=05附近的根。
步骤如下:
(1) 建立函数文件funxm。
function fx=funx(x)
fx=x-10^x+2;
(2) 调用fzero函数求根。
z=fzero('funx',05)
z =
03758
非线性方程组的求解
对于非线性方程组F(X)=0,用fsolve函数求其数值解。fsolve函数的调用格式为:
X=fsolve('fun',X0,option)
其中X为返回的解,fun是用于定义需求解的非线性方程组的函数文件名,X0是求根过程的初值,option为最优化工具箱的选项设定。最优化工具箱提供了20多个选项,用户可以使用optimset命令将它们显示出来。如果想改变其中某个选项,则可以调用optimset()函数来完成。例如,Display选项决定函数调用时中间结果的显示方式,其中‘off’为不显示,‘iter’表示每步都显示,‘final’只显示最终结果。 optimset(‘Display’,‘off’)将设定Display选项为‘off’。
例 求下列非线性方程组在(05,05) 附近的数值解。
(1) 建立函数文件myfunm。
function q=myfun(p)
x=p(1);
y=p(2);
q(1)=x-06sin(x)-03cos(y);
q(2)=y-06cos(x)+03sin(y);
(2) 在给定的初值x0=05,y0=05下,调用fsolve函数求方程的根。
x=fsolve('myfun',[05,05]',optimset('Display','off'))
x =
06354
03734
将求得的解代回原方程,可以检验结果是否正确,命令如下:
q=myfun(x)
q =
10e-009
02375 02957
可见得到了较高精度的结果。
cite from:http://blogsinacomcn/s/blog_56ef652d0100ebewhtml
4、fsolve函数解方程
[X,FVAL,EXITFLAG,OUTPUT,JACOB]=FSOLVE(FUN,X0,) returns the
Jacobian of FUN at X
Examples
FUN can be specified using @:
x = fsolve(@myfun,[2 3 4],optimset('Display','iter'))
where myfun is a MATLAB function such as:
function F = myfun(x)
F = sin(x);
FUN can also be an anonymous function:
x = fsolve(@(x) sin(3x),[1 4],optimset('Display','off'))
If FUN is parameterized, you can use anonymous functions to capture the
problem-dependent parameters Suppose you want to solve the system of
nonlinear equations given in the function myfun, which is parameterized
by its second argument c Here myfun is an M-file function such as
function F = myfun(x,c)
F = [ 2x(1) - x(2) - exp(cx(1))
-x(1) + 2x(2) - exp(cx(2))];
To solve the system of equations for a specific value of c, first assign the
value to c Then create a one-argument anonymous function that captures
that value of c and calls myfun with two arguments Finally, pass this anonymous
function to FSOLVE:
c = -1; % define parameter first
x = fsolve(@(x) myfun(x,c),[-5;-5])
cite from:
下载地址:
http://wwwmathworkscn/products/optimization/description3html
Optimization Toolbox 311
产品说明
简介
定义、求解和评估优化问题
非线性优化
非线性最小二乘、数据拟合及非线性方程
二次规划和线性规划
二进制整数规划
非线性优化
无约束非线性优化
优化工具箱使用三种方法求解无约束非线性最小化问题:拟牛顿法、Nelder-Mead 法和信赖域法。
拟牛顿法使用二次和三次线搜索法与 BFGS 公式的结合更新海赛矩阵的近似值。
Nelder-Mead 法是只使用函数值(不要求导数)的直接搜索方法,用于处理非平滑目标函数。
信赖域法用于可以提取稀疏性或结构的大规模问题。信赖域法基于内部映射牛顿法,可以在函数内计算海赛乘向量的乘积而无需另行排列海赛矩阵。此外还可调整牛顿迭代中使用的预条件子的带宽。
约束非线性优化
约束非线性优化问题由非线性目标函数构成并可能受到线性和非线性约束。优化工具箱使用两种方法求解这些问题:信赖域法和动态序列逐次二次规划。
信赖域法仅用于受限约束问题或线性等式。
动态序列逐次二次规划则用于一般的非线性优化。
多目标优化
多目标优化涉及受一组约束的多个目标函数的最小化。优化工具箱提供的函数可求解以下两种多目标优化问题的公式:目标达到和极小极大。
目标达到问题求解减小线性或非线性向量函数的值,以达到 goal 向量中规定的目标值。目标的相对重要性则使用 weight 向量说明。目标达到问题也可能受到线性和非线性约束。
最小最大问题求解最小化一组多元函数的最差情况值,可能受到线性和非线性约束。
优化工具箱将两种多目标问题都转换为标准的约束优化问题,然后使用逐次二次规划对其求解
最近想挖掘一下自己项目的理论深度,于是找到了老师。在老师的建议下,我们开始了漫长的研读老师的论文的旅程(论文名:Optimal Design of Adaptive Robust Control for Fuzzy Swarm Robot Systems 模糊群自适应鲁棒控制的优化设计机器人系统)。这篇文章写的是关于群体智能控制在机器人群中的运用,提到了许多控制理论。诸如李雅普诺夫方程,模糊群分析,优化理论等等。作为一个理论白痴我选择将这些理论的东西的学习理解交给我的大佬队友。然后我选择了学习最后的simulation(实验仿真)。这里面的simulation用到了一种求解隐式微分方程的方法。于是就有了这篇文章的由来。
求解常微分方程组的方法
1、dsolve 函数
dsolve函数用于求常微分方程组的精确解,也称为常微分方程的符号解。如果没有初始条件或边界条件,则求出通解;如果有,则求出特解。
1)函数格式
Y = dsolve(‘eq1,eq2,…’ , ’cond1,cond2,…’ , ’Name’)
其中,‘eq1,eq2,…’:表示微分方程或微分方程组;
’cond1,cond2,…’:表示初始条件或边界条件;
‘Name’:表示变量。没有指定变量时,matlab默认的变量为t;
2)例程
例11(dsolve 求解微分方程)
求解微分方程:
\frac{dy}{dx}=3x^{2}
在命令行输入: dsolve('Dy=3x^2','x') ,摁下enter键后输出运行结果。
例12(加上初始条件)
求解微分方程:
只需要在命令行添加初始条件即可,此时求出的即为方程的特解。可以看到上例中的C9变为了2。
例2(dsolve 求解微分方程组)
求解微分方程组:
由于x,y均为t的导数,所以不需要在末尾添加’t’。
2、ode函数
在上文中我们介绍了dsolve函数。但有大量的常微分方程,虽然从理论上讲,其解是存在的,但我们却无法求出其解析解,此时,我们需要寻求方程的数值解。
怎么理解数值求解呢?数值分析是一门专门的学科,在此不过多介绍。我主要想通过一个简单的例子来向大家阐述数值求解的思想。
比如,求解微分方程 。我们就可以转化为,那么。因此,我们可以通过迭代的方式来求解y。即可理解为步长。
ode是Matlab专门用于解微分方程的功能函数。该求解器有变步长(variable-step)和定步长(fixed-step)两种类型。不同类型有着不同的求解器。
然后我又从其他大佬那ctrl+v了一份具体点的ODE求解器的整理。
在工程实践中,我们经常遇到一些ODEs,其中某些解变换缓慢,另一些变化很快,且相差悬殊的微分方程,这就是所谓的刚性问题(Stiff),对于所有解的变化相当我们则称为非刚性问题(Nonstiff)。
变步长模式解法器有:ode45,ode23,ode113,ode15s,ode23s,ode23t,ode23tb和discrete。
a) ode45:缺省值,四/五阶龙格-库塔法,适用于大多数连续或离散系统,但不适用于刚性(stiff)系统。它是单步解法器,也就是,在计算y(tn)时,它仅需要最近处理时刻的结果y(tn-1)。一般来说,面对一个仿真问题最好是首先试试ode45。
b) ode23:二/三阶龙格-库塔法,它在误差限要求不高和求解的问题不太难的情况下,可能会比ode45更有效。也是一个单步解法器。
c) ode113:是一种阶数可变的解法器,它在误差容许要求严格的情况下通常比ode45有效。ode113是一种多步解法器,也就是在计算当前时刻输出时,它需要以前多个时刻的解。
d) ode15s:是一种基于数字微分公式的解法器(NDFs)。也是一种多步解法器。适用于刚性系统,当用户估计要解决的问题是比较困难的,或者不能使用ode45,或者即使使用效果也不好,就可以用ode15s。
e) ode23s:它是一种单步解法器,专门应用于刚性系统,在弱误差允许下的效果好于ode15s。它能解决某些ode15s所不能有效解决的stiff问题。
f) ode23t:是梯形规则的一种自由插值实现。这种解法器适用于求解适度stiff的问题而用户又需要一个无数字振荡的解法器的情况。
g)ode23tb:是TR-BDF2的一种实现, TR-BDF2 是具有两个阶段的隐式龙格-库塔公式。
h)discrtet:当Simulink检查到模型没有连续状态时使用它。
固定步长模式解法器有:ode5,ode4,ode3,ode2,ode1和discrete。
a) ode5:缺省值,是ode45的固定步长版本,适用于大多数连续或离散系统,不适用于刚性系统。
b) ode4:四阶龙格-库塔法,具有一定的计算精度。
c) ode3:固定步长的二/三阶龙格-库塔法。
d) ode2:改进的欧拉法。
e) ode1:欧拉法。
f) discrete:是一个实现积分的固定步长解法器,它适合于离散无连续状态的系统。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^分割线^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
其中,ode45求解器属于变步长的一种,采用Runge-Kutta算法;其他采用相同算法的变步长求解器还有ode23。ode45表示采用四阶-五阶Runge-Kutta算法,它用4阶方法提供候选解,5阶方法控制误差,是一种自适应步长(变步长)的常微分方程数值解法,其整体截断误差为(Δx)^5。解决的是Nonstiff(非刚性)常微分方程。
ode45是解决数值解问题的首选方法,若长时间没结果,应该就是刚性的,可换用ode15s试试。
下面将以ode45为例具体介绍函数的使用方法。
1)函数格式
[T,Y] = ode45(‘odefun’,tspan,y0)
[T,Y] = ode45(‘odefun’,tspan,y0,options)
[T,Y,TE,YE,IE] = ode45(‘odefun’,tspan,y0,options)
sol = ode45(‘odefun’,[t0 tf],y0)
其中: odefun是函数句柄,可以是函数文件名,匿名函数句柄或内联函数名;
tspan 是求解区间 [t0 tf],或者一系列散点[t0,t1,,tf];
y0 是初始值向量
T 返回列向量的时间点
Y 返回对应T的求解列向量
options 是求解参数设置,可以用odeset在计算前设定误差,输出参数,事件等
TE 事件发生时间
YE 事件发生时之答案
IE 事件函数消失时之指针i
2)微分方程标准化
利用ode45求解高阶微分方程时,需要做变量替换。下面说明替换的基本思路。
微分方程为
初始条件
首先做变量替换
原微分方程可以转换为下面的微分方程组的格式:
下面就可以利用转换好的微分方程组来编写odefun函数。
实战运用
例31(编写odefun函数)
在matlab中新建脚本文件,编写函数如下:
本例中只需在例31的基础上编写主函数,加上求解区间和边值条件即可。需要注意的是,ode45的运行结果以列向量形式给出。因此在本例中,x的第一列为y,第二列为y’。如果遇到变量不是列向量形式的,可以考虑利用reshape函数做矩阵变换。
则,plot(t,x(:,1))画出来的是x的第一列数据,即为y;
plot(t,x(:,2))画出来的是x的第二列数据,即为y’;
得到的结果如下:
这算是ode45的一个小实战了吧
那么这个时候咱们来看看ode15s。
咱就是说,对于一个理论白痴而言,这个ode15s的用法不就跟ode45的用法一样嘛(后来我看了下好像好几个ode求解器的用法都一个样子)。想要运用这个那还不简单hhh。直接开搞
还是用上面那个例子:
没错,就是把ode45更改成ode15s就行了(其余求解器同理hhh)。
对比一下两个图像,发现仅仅就是点集的密集程度不同,还没有很大的差别。
然后感觉这个小例子不太好玩,想玩点更高级的。
混沌
混沌运动的直观形象,在随能量不断耗散而自由度降低的耗散系统中看得更清楚。1963年美国气象学家E洛伦茨在研究对天气至关紧要的热对流问题时,把包含无穷多自由度的热对流偏微分方程简化为三个变量的一阶非线性常微分方程组:
dx/dt=-σx+σy
dy/dt=rx-y-xz
dz/dt=bz+xy
式中变量x表示大气对流强度,y表示上升流与下降流温差,z表示垂直温度剖面变化。系数σ为普朗特数,r为瑞利数,b为量度水平温度结构与垂直温度结构衰减率之差异。洛伦茨选定σ=10,r=28,b=8/3,然后数值求解方程组。结果发现,这极度简化了的系统,出现了极为复杂的运动形式。起始值的细微变化,足以使轨道全然改观。把数值计算结果在由x,y,z支撑的三维相空间中画出来。这是一条在三维空间似乎无序地左右回旋的连续光滑曲线,它并不自我相交,呈现复杂的结构纹样。无论初始值选取在哪里,系统轨道有同一归宿,形成所谓奇异吸引子。在奇异吸引子上,如果选取任意接近的两个点为初始值,其运动轨迹以指数方式迅速分离,表现出对初值的极端敏感。具体的是,轨道左右跳动的顺序和次数完全不同。计算表明,初始位置几乎会聚在一起的10,000个点,稍后便会在图中所示的吸引子上到处分布,说明这样的系统中,由于初值的细微不同,运动是不可预测的。(更多的在这)
看不懂没关系,因为我也看不太懂hhh(不愧是理论白痴),咱就来看看这个微分方程,自己用求解器解着玩一玩呗。
\frac{dx}{dt}=\delta (y-x) (1)
\frac{dy}{dt} = rx-y-xz (2)
\frac{dz}{dt}=xy-bz (3)
(咱就是说,里的这个式子少了个负号,我跑matlab发现没负号是跑不出来的。无论哪个求解器都不行。然后看了看其他地方的混沌理论的式子,确实是-bz)
没问题了那就跑呗。
为啥代这几个值(我看的视频),不过我查了一下hhh这几个参数是来源于某个地方: 奇异吸引子(Strange Attractor)——非线性系统的一大杰作(这是我看的资料来源)
然后接着敲代码:
先跑一跑一阶的x。
已经有点混沌的影子了;
二阶:
这里是用y和z跑的图像。用x,y;x,z跑出来又不一样:
有点内味了叭!
下面将隆重推出三阶最终的图像:
有没有感觉像一个蝴蝶?哈哈,没错。告诉大家一个秘密,其实这才是蝴蝶效应名字的由来。
以上代码是用ode45跑的,用另外一个求解器同理。
总结
真没啥总结。整理下来证明了自己还是学了东西的hhh。老师说,我们后面在跑证明的时候会出现用ode45解不出来的式子,而用ode15s和其他几个求解器能跑出来。这是由于不同的求解器内部都有不同的算法,能求解不同的式子,达到不同的精度。就是说有点子好奇与期待了!
放一张老师论文里的仿真图:
下次文章如果大家能看到我把以上4个图里的3个参数变成5个,那就说明我对于自己项目的理论的仿真部分算是成功了哈哈哈!
现 代控制系统对传感器的准确度、稳定性和工作条件等方面提出了很高的要求。然而,从严格意义上来说,目前绝大多数传感器特性都不理想,其输入输出特性大多为 非线性关系。为此,人们通过一些方法来进行非线性补偿和修正。特别是近年来,随着神经网络的发展,有不少学者提出了基于神经网络进行非线性传感特性校正的 方法。这些方法一般是用一个多层的前馈神经网络去映射传感器特性曲线的反函数作为校正环节,算法相对简单,实现容易。 但是通过分析神经网络的基本工作原理,笔者认为该方法依然存在一些不足[1、6]:1)在训练过程中神经网络极容易陷入局部最小,而不能得到全局最小;2)神经网络过分依赖训练数据的质量和数量,但大多数情况下样本数据十分有限,由于噪声影响,存在数据不一致情况,对神经网络的训练结果影响较大;3)输入数据往往是高维的,而训练结果仅是输入空间的稀疏分布,所以大量的高维数据必然会大大增加算法的训练时间。 支持向量机SVM[4,5](Support Vector Machine)是基于统计学习理论的一种新的学习方法,最早由Vapnik教授及其合作者于上世纪90年 代中期提出。由于其优良特性,最近引起了许多研究者的兴趣。支持向量机主要用于模式识别,目前在该方面成功的范例较多;与模式识别相比,支持向量机用于函 数拟合的成功应用较少。和神经网络相比,支持向量机是基于统计学习理论的小样本学习方法,采用结构风险最小化原则,具有很好的泛化性能;而神经网络是基于 大样本的学习方法,采用经验风险最小化原则。 将支持向量机函数拟合技术应用于传感器非线性特性校正的研究刚起步,国内尚无先例。如何在传感器非线性特性校正领域充分发挥支持向量机函数拟合的技术优势,解决神经网络方法中的缺陷是一个值得研究的问题。 1支持向量机拟合基本理论 11线性函数拟合问题 与支持向量机的研究最初是针对模式识别中的线性可分问题[5]相似,先分析线性样本点的线性函数拟合问题,拟合函数以线性函数的特性出现,可用形式=ωTx+b表示。假设所有训练数据{xi,yi}能在精度ε下无误差地用线性函数拟合,即 统计学理论指出,在这一优化目标是最小化ωTω/2时可取得较好的推广能力。考虑到实际应用中允许拟合误差的情况,则支持向量机优化目标可以表示为[3] 式中c为平衡因子,为惩罚因子,惩罚函数L(·)通常采用如下的离散定义形式(如图1所示) n,进一步采用对偶优化方法,最大化目标函数 小部分不为0,它们对应在不灵敏区边界上或外 式中,偏移量b可由支持向量(xi,yi)及精度ε求得,SVs表示支持向量集。 12非线性函数拟合问题 对于非线性函数拟合基本思想是:可以通过非线性变换x→φ(x)将原拟合问题映射到某个高维特征空间中,然后在该空间中进行线性拟合,即 在支持向量机中,引入核函数(Kernel function)来简化非线性逼近。在高维特征空间中,线性问题中的内积运算可用核函数来代替。核函数满足k(x,x′)=〈φ(x),φ(x′)〉,这样目标函数式(4)就变成了式(6)所示的形式: 2传感器非线性误差校正原理[6] 大多数传感系统都可用y=f(x),x∈(ζα,ζb)表示,其中y表示传感系统的输出,x表示传感系统的输入,ζα,ζb为输入信号的范围。y信号可经过电子设备进行测量,目的是根据测得的y信号求得未知的变量x,即表示为x=y-1(y)。在实际应用过程中,绝大多数传感器传递函数为非线性函数。 为了消除或补偿传感系统的非线性特性,可使其输出y通过一个补偿环节。该模型的特性函数为u=g(y),其中u为非线性补偿后的输出,它与输入信号x呈线性关系。很明显函数g()也是一个非线性函数,并使得补偿后的传感器具有理想特性。在实际应用中,非线性补偿函数g()的表达式难以准确求出,但可以通过建模来实现,补偿模型的建立就成了校正传感器非线性特性的关键。 笔者根据支持向量机的函数拟合能力,提出了基于支持向量机的传感器非线性特性校正方法。 3仿真与应用研究 该文使用支持向量机对两个非线性传感系统的非线性误差进行校正,取得了较满意的效果。 31一维传感器非线性校正 用实验法得出一组训练样本(见表1),在表1中x表示传感系统的输入量,其值由精度较高的设备产生,在这里可作为标准量,y值为传感系统的输出量。 设计支持向量机对该传感系统进行非线性校正,传感器输出信号y经过该SVM的处理相当于进行了一个逆传感模型,支持向量机的输出u作为非线性补偿后的输出,它与输入信号x的误差应更小。 由此可得到一组训练样本(yi,xi),其中yi表示支持向量机的输入,xi为拟合的目标。 设计支持向量机时,精度ε=002,核函数选用多项式k(xi,x)=(xi·x+1)6,传感器非线性校正曲线如图3所示,由此可见用该方法提高了传感器的精度。 32二维图像传感器非线性校正 有二维图像传感器,其校正前的输出如图4a所示,而实际像点应在栅格线的交叉点。从图4a不难看出,该传感器存在着严重的非线性,且这种非线性不能以解析式表达。 如式(1)所示,文中介绍的支持向量机每个学习样本的输入数据xi是一个多维向量,样本输出yi是一个数而非向量。待校正的二维图像传感器校正样本{(xa,xb),(ya,yb)}是二维输入二维输出的数据,因此,不能直接用支持向量机进行校正。 笔者设计两个SVM来解决该问题,一个SVMa用于校正a方向上的误差,其学习样本为{(xa,xb),ya};另一个SVMb用于校正b方向上的误差,其学习样本为{(xa,xb),yb}。两个SVM设ε=001,核函数均选用多项式k(xi,x)=(xi·x+1)4。 用SVMa和SVMb分别校正样本数据在a和b方向非线性误差,校正结果如图4b所示。 比较图4b与图4a,校正后的二维图像传感器的非线性已得到校正,精度令人满意。 4结束语 将SVM技术应用于传感器非线性特性校正的研究刚起步,国内尚无此 类文献。毕竟支持向量机理论和应用还是一个较新的领域,仍处于理论和实验研究 阶段。笔者认为支持向量机今后的研究应该集中在以下几个方面:①核函数的构造与选择; ②大样本条件下SVM算法研究;③惩罚函数的改进。
支持向量机(Suport Vector Machine,常简称为SVM),是一个监督式学习的方式。支持向量机属于一般化线性分类器,这类分类器的特点是能够同时最小化经验误差与最大化几何边缘区,因此支持向量机机也被称为最大边缘区分类器。
蓝色和红色的线圈出来的点就是所谓的支持向量,离分界线最近的点,如果去掉这些点,直线多半要改变位置。Classifier Boundary就是决策函数f(x),在两个类的中间。红色和蓝色之间的间隙就是我们要的最大化分类的间隙。
有拉格朗日乘子法的地方,必然是一个组合优化问题。比如
这是一个带等式约束的优化问题,有目标值,有约束条件,不能直接求导。可以使用拉格朗日方法,把这个约束乘以一个系数加到目标函数中去,这样相当与既考虑了原目标函数,也考虑了约束条件。然后分别对x求导等于0,
把它带点菜约束条件中去,可以看到,2个变量两个等式,最终可再带回去求x就可以了。更高一层,带有不等式的约束问题怎么办?需要用更一般化的拉格朗日乘子法,即KKT条件,来求解这个问题。
任何原始问题约束条件无非最多三种,等式约束,大于号约束,小于号约束,而这三种最终通过将约束方程简化成两类:约束方程等于0和约束方程小于0。
假设原始问题约束条件为下例所示:
那么把约束条件变个样子
现在拿到目标函数中去变成
那么KKT条件的定理是什么呢?就是如果一个优化问题在转变成
其中g是不等式约束,h是等式约束。那么KKT条件就是函数的最优值,它必定满足下面条件:
这三个等式很好理解,重点是第三个句子不好理解,因为我们知道在约束条件变完或,所有的 ,且求和还要为0。那么为什么KKT的条件是这样的呢?
某次的g(x)在为最优解起作用,那么它的系数值(可以)不为0,如果某次g(x)没有为下一次的最优解起作用,那么它的系数就必须为0。
函数间隔
对于给定的训练数据集T合超平面(w,b),定义超平面(w,b)关于样本点 的函数间隔为
函数间隔可以表示分类预测的正确性及确信度。但是选择超平面时,只有函数间隔是不够的,因子只要成比较改变 和b,超平面并没有改变,但函数间隔却扩大了。
几何间隔
对于给定的训练数据集T和超平面 ,定义超平面 关于样本点 的几何间隔为 ,其中 为 的 范数。
如果 ,那么函数间隔和几何间隔相等。如果超平面参数 成比例地改变(超平面没有改变),函数间隔也成比例改变,而几何间隔不变。
支持向量机的基本想法是求解能够正确分训练数据集并且几何间隔最大的分离超平面。对线性可分的训练数据集而言,线性可分分离超平面有无穷多个(等价于感知机),但是几何间隔最大的分离超平面时唯一的。这里的间隔最大化被称为硬间隔最大化。
间隔最大化的直观解释是:对训练数据集找到几何间隔最大的超平面意味着以充分大的确信度对训练数据进行分类。也就是说,不仅将正负实例点分开,而且对最难分的实例点(离超平面最近的点)也有足够大的确信度将他们分开。这样的超平面应该对未知的新实例有很好的分类预测能力。
下面考虑如何求一个几何间隔最大的分离超平面,即最大间隔分离超平面。具体地,这个问题可以表示为下面的约束最优化问题:
即我们希望最大化超平面 关于训练数据集的集合间隔 ,约束条件表示的是超平面 关于每个训练样本点的集合间隔至少是
考虑几何间隔和函数间隔的关系式,可将这个问题改成为
函数间隔 并不影响最优化问题的解。事实上,假设将 成比例改变为 ,这时函数间隔变成 。函数间隔的改变对最优化问题的不等式约束没有影响,对目标函数的优化也没有影响,也就事实说,它产生一个等价的最优化问题。这样,就可以取 。将 代入上面的最优化问题。注意最大化 和最小化 是一样的。
于是就得到下面的线性可分支持向量机学习的最优化问题
这是一个凸二次规划问题(contex quadratic programming)问题。
凸优问题是指约束最优化问题
其中,目标函数 和约束函数 都是 上的可连续可微的凸函数,约束函数 是 的仿射函数。当木匾函数是 是二次函数且约束函数 是仿射函数时,上述的凸优化问题成为凸二次规划问题。
如果求出约束最优化问题的解 ,那么就可以得出最大间隔分离超平面 及决策函数 ,即线性可分支持向量机模型。
为了求解线性可分支持向量机的最优化问题,将它作为原始最优化问题,应用到拉格朗日对偶性,通过求解对偶问题得到原始问题的最优解,这就是线性可支持向量机的对偶算法(dual algorithm)。这样做的优点,一是对偶问题往往根据容易求解;二是自然引入核函数,进而推广到非线性可分类问题。
首先构建拉格朗日函数(Lagrange function)。为此,对每一个不等式约束引入拉格朗日乘子(Lagrange multiplier) 定义拉格朗日函数:
其中 为拉格朗日乘子向量。
根据拉格朗日对偶性,原始问题的对偶问题是极大极小问题
为了得到对偶函数问题的解,需要先求 对 的极小,再求 的极大
(1)求
将拉格朗日函数 分别对 求偏导数并令其等于0
将(1)代入拉格朗日函数,并利用(2),即可得
即
(2)求 对 的极,即对偶问题
将公式(3)的目标函数由极大值转换成求极小,就得到下面与之等价的对偶最优化问题
(3)解
假设 是对偶最优化问题的解,则存在下标使得 ,并求按下式求得原始最优化的解
根据KKT条件成立,即得
因此
,且至少存在一个 ,假设 ,那么 不是原始问题的解,所以
那么分离的超平面可以写成
决策函数可以写成
由此可以看出,分类决策函数只依赖于输入x和训练样本输入的内积,式(8)称为线性可分支持向量机的对偶形式。
案例
训练数据正例点是 ,负例点是 ,试用线性可分支持向量机
解:根据所给数据,对偶问题是
解这一优化问题,将 代入目标函数并记为
对 求偏导令其为0,易知 处取极值,该点不满足约束条件 ,所以最小值应在边界上达到。
当 ,当 ,于是
这样, 对应的实例点 是支持向量,计算可得 ,
分离超平面为
分离决策函数为
线性可分问题的支持向量机学习方法,对线性不可分训练数据是不适用的,因为这时上述方法中的不等式约束不能都成立。 线性不可分意味着不能满足函数间隔大于等于1的约束条件 。为了解决这个问题,对每个样本点 都引入一个松弛变量 ,使得函数间隔加上变量大于等于1,这样约束条件变为
同时对于每个松弛变量 ,支付一个代价 ,目标函数由原来的 变成
C>0为惩罚参数,一般由应用问题解决,C值大时对误分类的惩罚增大,C值小时对误分类的惩罚减小。最小化木匾函数有2层意思:使得 尽量小,即间隔尽量大,同时使误分类点的个数尽量小,C是调和两者的系数
非线性分类问题是指通过非线性模型才能很好地进行分类的问题。非线性问题往往不好求解,希望通过线性分类问题的方法解决这个问题,所采取的方法是进行一个非线性变换,将非线性问题变成线性问题,通过解变换后的线性问题的方法求解原来的非线性问题。
用线性分类方法求解非线性分类问题分两步:首先使用一个变换将原来空间的数据映射到新空间;然后在新空间里用线性分类学习方法从训练数据中学习分类模型。核技巧就属于这样的方法。
设X是输入空间(欧氏空间 的子集或离散集合),又设H为特征向量(希伯而空间H),如果存在一个从X到H的映射
使得对所有 ,函数 满足条件
则称K(x,z)为核函数, 为映射函数, 。通常计算K(x,z)比较容易,而通话 计算K(x,z)并不容易。
是输入空间到特征空间的迎神,特征空间一般是高维的,甚至是无穷维,可以看到,对于给定的核K(x,z),特征空间H和映射函数 的取法并不唯一,可以取不同的特征空间,即便是在同一特征空间也可以取不同的映射。
在对偶目标函数中的内积 可以用核函数 来代替,此时对偶问题的目标函数成为
这等价于经过映射函数 将原来的输入空间变换到一个新的特征空间,将输入空间中的内积 变换成特征空间中的内积 ,在新的特征空间里从训练样本中学习线性支持向量机。学习是隐式地在特征空间进行的,不需要显式地定义特征空间和营业日函数。在实际应用中,往往依赖领域知识直接选择核函数。
对应的支持向量机是一个p次多项式分类器,在此情形下,分类决策函数成为
对应的支持向量机是高斯径向基函数(radial basis function)分类器。在此情形下,分类决策函数成为
核函数不仅可以定义在欧式空间,还可以定义在离散数据的集合上。比如,字符串核函数是定义在字符串集合上的核函数。字符串核函数在文本分类、信息检索、生物信息学等方面都有应用。
两个字符串s和t上的字符串核函数是基于映射 的特征空间中的内积:
字符串核函数 给出了字符串s和t中长度等于n的所有子串组成的特征向量的余弦相似度。直观上看,两个字符串相同的字串越多,它们就越相似,字符串核函数的值就越大。字符串核函数可以由动态规划快速地计算。
支持向量机的学习问题可以形式化为求解凸二次规划问题,这样的凸二次规划问题具有全局最优解,并且有许多最优化算法可以用于这一问题的求解。但是当训练样本容量很大时,这些算法往往变得非常低效,以至无法使用。
序列最小最优化(sequential minimal optimization,SMO)算法,是一种启发式算法,其基本思路是:如果所有变量的解都满足此最优化问题的KKT条件,那么这个最优化问题的解就得到了。因为KKT条件是该最优化问题的充分必要条件。否则,选择两个变量,固定其他变量,针对这两个变量构建一个二次规划问题。这个二次规划问题的目标是使函数值变得更小。重要的是,这时子问题可以通过解析方法求解,这样就可以大大提高整个算法的计算速度。子问题有两个变量,一个是违反KKT条件最严重的那一个,另一个由约束条件自动确定。如此,SMO算法将原问题不断分解为子问题并对子问题求解,进而达到求解原问题的目的。
假设两个变量是 ,其他变量 是固定的,于是SNO的最优化问题的子问题可以写成。
其中, 是常数,目标函数中省略不含 的常数项。
为了求解两个变量的二次规划问题,约束可以用二维空间中的图形表示
不等式约束(73)使得 在盒子[0,C] [0,C]内,等式约束(72)使 在平行于盒子[0,C] [0,C]的对角线的直线上。因此要求的是目标函数在一条平行于对角线的线段上最优值。这使得两个变量的最优化问题成为实质上的单变量最优化文图,不访考虑为变量 的最优化问题。
假设初始化可行解为 ,最优化解为 ,并且假设沿着约束方向未经剪辑时 的最优解为
由于 需满足不等式约束(73),所以最优值 的取值范围必须满足条件
其中,L与H是 所在对角线段端点的界,如果
如果 ,则
下面首先要求沿着约束方向未经剪辑即未考虑不等式约束(73)时 的最优解 ,然后在解决剪辑后 的解 ,我们用定理来描述这个结果
令
当i=1,2时, 为函数g(x)对输入 的预测值与真实输出 之差
定理 最优化问题(71)~(73)沿着约束方向未经剪辑时的解是
其中
是输入空间到特征空间的映射
经剪辑后的 的解是
由 是
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)