针对不同的情况,MATLAB将采用不同的算法来求解。
・恰定方程组恰定方程组由n个未知数的n个方程构成,方程有唯一的一组解,其一般形式可用矩阵,向量写成如下形式:
Ax二b其中A是方阵,b是一个列向量;
在线性代数教科书中,最常用的方程组解法有:
1)利用cramer公式来求解法;
利用矩阵求逆解法,即x=A-lb;
利用gaussian消去法;
利用lu法求解。
一般来说,对维数不高,条件数不大的矩阵,上面四种解法所得的结果差别不大。
前三种解法的真正意义是在其理论上,而不是实际的数值计算。
MATLAB中,出
于对算法稳定性的考虑,行列式及逆的计算大都在lu分解的基础上进行。
在MATLAB中,求解这类方程组的命令十分简单,直接米用表达式:
在x=A\boMATLAB的指令解释器在确认变量A非奇异后,就对它进行lu分解,并最
终
给出解X;若矩阵A的条件数很大,MATLAB会提醒用户注意所得解的可靠性。
如果矩阵A是奇异的,则Ax二b的解不存在,或者存在但不唯一;如果矩阵A接近奇异时,MATLAB将给出警告信息;如果发现A是奇异的,则计算结果为inf,并且给出警告信息;如果矩阵A是病态矩阵,也会给出警告信息。
注意:
在求解方程时,尽量不要用in讥A)*b命令,而应采用A\b的解法。
因为后者的计算速度比前者快、精度高,尤其当矩阵A的维数比较大时。
另外,除法命令的适用行较强,对于非方阵A,也能给出最小二乘解。
2.超定方程组对于方程组Ax二b,A为nXill矩阵,如果A列满秩,且n>m。
则方程组没有精确
解,此时称方程组为超定方程组。
线性超定方程组经常遇到的问题是数据的曲线拟合。
对于超定方程,在MATLAB中,禾I」用左除命令(x=A\b)来寻求它的最小
二乘解;还可以用广义逆来求,即x二pinv⑷所得的解不一定满足Ax二b,x只是
最小二乘意义上的解。
左除的方法是建立在奇异值分解基础之上,由此获得的解最口J靠;广义逆法是建立在对原超定方程直接进行householder变换的基础上,其算法可靠性稍逊与奇异值求解,但速度较快;
求解超定方程组
A二[2-13;31-5;4-11;13-13]
A二
2-13
31-5
4-1113-13b=[303一6]';rank(A)ans二
xl=A\bxl=x2=pinv(A)*bx2二
A*xl-bans二
可见X1并不是方程Ax二b的精确解,用x2=pinv(A)*b所得的解与xl相同。
3.欠定方程组
欠定方程组未知量个数多于方程个数,但理论上有无穷个解。
MATLAB将寻求一
个基本解,其中最多只能有m个非零元素。
特解由列主元qr分解求得。
解欠定方程组
A=[1-211;1-21-1;1-215]
1-21
1-21-1
1-21-1
1-21b二[1-15]'
xl二A\b
Warning:
Rankdeficient,rank二2tol二xl二x2二pinv(A)*bx2=
4.方程组的非负最小二乘解在某些条件下,所求的线性方程组的解出现负数是没有意义的。
虽然方程组可以得到精确解,但却不能取负值解。
在这种情况下,其非负最小二乘解比方程的精确解更有意义。
在MATLAB中,求非负最小二乘解常用函数nnls,其调用格式为:
(1)X=nnls(A,b返回方程Ax二b的最小二乘解,方程的求解过程被限制在x的条
件下;
(2)X=nnls(A,b,T01指定误差TOL来求解,TOL的默认值为
TOL=max(size⑷)*norm(A,l)*eps矩阵的一1范数越大,求解的误差越大;
(3)[X,W]二nnls(A,b)当x(i)二0时,w(i)〈0;当下x(i)>0时,w(i)0,同时返回一个双向量w。
例9]求方程组的非负最小二乘解
A=[
];b=[];
[X,W]=nnls(A,b)
W二xl二A\bxl二
A*X~bans二
A*xl-bans=
关于采用matlab进行指定非线性方程拟合的问题
(1)
探1。
优化工具箱的利用
函数描述
LSQLIN有约束线性最小二乘优化
LSQNONNEG非负约束线性最小二乘优化问题
当有约束问题存在的时候,应该采用上面的方法代替Polyfit与反斜线()。
具体例子请参
阅优化工具箱文档中的相应利用这两个函数的例子。
d.非线性曲线拟合
利用MATLAB的内建函数
函数名描述
FMINBND只解决单变量固定区域的最小值问题
FMINSEARCH多变量无约束非线性最小化问题(Nelder-Mead方法)。
面给出一个小例子展示一下如何利用FMINSEARCH
1・首先生成数据
>>t=0:
.1:
10;
»t=t(:
);
»Data=40*exp*t)+rand(size(t));%将数据加上随机噪声
2.写一个m文件,以曲线参数作为输入,以拟合误差作为输出
functionsse=myfit(params,1nput,Actural_0utput)
A二params
(1);
lamda=params
(2);
Fitted_Curve二A・*exp(-lamda*lnput);
Error_Vector=Fi11ed_Curve~Actural_0utput;
%当曲线拟合的时候,一个典型的质量评价标准就是误差平方和sse=sum(Error_Vector.A2);
%当然,也可以将sse写作:
sse=Error_Vector(:
)*Error_Vector(:
);
3.调用FMINSEARCH»Strarting=rand(l,2);
>>options二optimsetCDisplay'Jite门;
〉>Estimates=fiminsearch(@myfit,Strarting,options,t,Data);
»plot(t,Data,';
»holdon>>plot(t,Estimates(l)*exp(-Estimates
(2)*t)JF);
Estimates将是一个包含了对原数据集进行估计的参数值的向量。
附图见后面:
$r>2
FMINSEARCH通常能够用来解决不连续情况,特别是如果他们不出现在解的附近的时候。
它得到的通常也是局部解。
FMINSEARCH只能够最小化实数值(也就是说,解的域必须只能包
括实数,函数的输出只能够为实数值)。
当感兴趣的是复数变量的域的时候,他们必须被分割为实部与虚部。
※的FIGURE窗口:
最基本的拟合界面与数据统计工具
MATLAB通过基本的拟合界面也支持基本曲线拟合。
利用这个界面,你可以快速地在简单易
用的环境中实现许多基本的曲线拟合。
这个界面可以实现以下功能:
a.通过比样条插值(splineinterpolant)、hermite插值、或者是高达10阶的多项式插值实现数据的拟合;
b.对给定数据同时实现多样插值的绘制;
c.绘制残差图;
d.检查拟合结果的残差的数值;
e.通过内插值或者外推插值评价一个拟合结果;
f.对拟合结果和残差的模进行图形绘制;
g.将拟合结果保存入MATLAB工作空间。
数,也可以同时作用。
你可以通过基本拟合界面只能够实现
2-D数据的拟合。
然而,如果
你用subplot绘制多个数据集,只要有至少一个数据集是
2D的,那么就可以用基本拟合界
开发你的拟合应用的时候,你可以通过基本拟合(
BasicFitting)界面,也可以通过命令行函
面
可以通过如下步骤激活基本拟合界面:
1.绘制数据;
2.从figure窗口的Tools菜单条下面选择BasicFitting菜单项;
有关BasicFitting界面的更多信息,请查阅MATLAB帮助文档的相应部分。
注意:
对于HP,IBM以及SGI平台,()以及的基本拟合界面不受支持。
统计界面激活:
1.制数据;
2.从figure窗口的Tools菜单条下面选择DataStatistics菜单项;
关于采用matlab进行指定非线性方程拟合的
问题
(2)
一。
优化工具箱函数
LSQNONLIN解决非线性最小二乘法问题,包括非线性数据拟合问题
LSQCURVEFIT解决非线性数据拟合问题
面给出利用这两个函数的例子:
LSQNONLIN禾U用这个函数最小化连续函数只能够找到句柄解。
下面的例子说明利用
LSQNONLIN函数用下面的函数进行拟合:
f=A+Bexp(C*x)+D*exp(E*