Matlab求解非线性超定方程组-恰定方程组-欠定方程组_第1页
Matlab求解非线性超定方程组-恰定方程组-欠定方程组_第2页
Matlab求解非线性超定方程组-恰定方程组-欠定方程组_第3页
Matlab求解非线性超定方程组-恰定方程组-欠定方程组_第4页
Matlab求解非线性超定方程组-恰定方程组-欠定方程组_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Matlab求解非线性超定方程组

3x+2/(5+y)=6,

4x+4/(5+y)=7,

9x+4/(8+y)=12

llx+2/(4+y)=15

x,y就是未知数

clcjclear;

%其实楼主得问题可以等效为求最小值得问题,我使用得指标就是典型得平方与

最小

xtt=[l,1];

f=(x)(3*x(l)+2/(5+x(2))-6厂2+(4*x⑴+4/(5+x(2))-7)"2+(9*x(l)+4/(8-x(2

))-12)*2+(ll*x(1)+2/(4+x(2))-15厂2;

[x,fval]=fminsearchIf,xtt)

求解线性方程组

solve,linsolve

例:

A=[5042;1-121;4120;1111];

%矩阵得行之间用分号隔开,元素之间用逗号或空格

B=[3;1;1;0]

X=zeros(4,1);%建立一个4元列向量

X=linsolve(A,B)

dff(fun,var,n):对表达式fun中得变量var求n阶导数。

例如:F=symCu(x,y)*v(x,y));%sym()用来定义一个符号表达式

diff(F);%matlab区分大小写

pretty(ans)%pretty():用习惯书写方式显示变量;ans就是答案表达式

非线性方程求解

fsolve(fun,xO,options)

其中fun为待解方程或方程组得文件名;

xO位求解方程得初始向量或矩阵;

option为设置命令参数

建立文件fun、m:

functiony=fun(x)

y=[x(1)-0>5*sin(x(1))-0>3*cos(x(2)),>、、

x⑵・0、5*cos(x(1))+0>3*sin(x(2))];

»clear;x0=[0>1,0>1];fsolve(fun,x0,optimset(,fsolve,))

注:

、、、为续行符

m文件必须以function为文件头,调用符为;文件名必须与定义得函数名相

同;fsolve()主要求解复杂非线性方程与方程组,求解过程就是一个逼近过程。

Matlab求解线性方程组

AX=B或XA=B

在MATLAB中,求解线性方程组时,主要采用前面章节介绍得除法运算符与

如:

X=A\B表示求矩阵方程AX=B得解;

X=B/A表示矩阵方程XA=B得解。

对方程组X=A\B,要求A与B用相同得行数,X与B有相同得列数,它得行数等于

矩阵A得列数,方程X=B/A同理。

如果矩阵A不就是方阵,其维数就是mxn,则有:

m=n恰定方程,求解粕确解;

m>n超定方程,寻求最小二乘解;

m<n不定方程,寻求基本解,其中至多有m个非零元素。

针对不同得情况,MATLAB将采用不同得算法来求解。

一.恰定方程组

恰定方程组由n个未知数得n个方程构成,方程有唯一得一组解,其一般形式可用

矩阵,向量写成如下形式:

Ax=b其中A就是方阵,b就是一个列向量;

在线性代数教科书中,最常用得方程组解法有:

(1)利用cramer公式来求解法;

(2)利用矩阵求逆解法,即x=A-1b;

(3)利用gaussian消去法;

(4)利用lu法求解。

一般来说,对维数不高,条件数不大得矩阵,上面四种解法所得得结果差别不大。前

三种解法得真正意义就是在其理论上,而不就是实际得数值计算。MATLAB中,

出于对算法稳定性得考虑,行列式及逆得计算大都在lu分解得基础上进行。

在MATIAR中,求解这类方程组得命令十分简单,直接采用表达式:x=A\>

在MATLAB得指令解释器在确认变量A非奇异后,就对它进行lu分解,并最终给

出解x;若矩阵A得条件数很大,MATLAB会提醒用户注意所得解得可靠性。

如果矩阵A就是奇异得,则Ax=b得解不存在,或者存在但不唯一;如果矩阵A接近

奇异时,MATLAB将给出警告信息;如果发现A就是奇异得,则计算结果为inf,并且

给出警告信息;如果矩阵A就是病态矩阵,也会给出警告信息。

注意:在求解方程时,尽量不要用inv(A)*b命令,而应采用A\b得解法。因为后者得

计算速度比前者快、精度高,尤其当矩阵A得维数比较大时。另外,除法命令得适

用行较强,对于非方阵A,也能给出最小二乘解。

二.超定方程组

对于方程组Ax=b,A为nxm矩阵,如果A列满秩,且n>m。则方程组没有精确解,

此时称方程组为超定方程组。线性超定方程组经常遇到得问题就是数据得曲线拟

合。对于超定方程,在MATLAB中,利用左除命令(x=A\b)来寻求它得最小二乘解;

还可以用广义逆来求,即x=pinv(A),所得得解不一定满足Ax=b,x只就是最小二乘

意义上得解。左除得方法就是建立在奇异值分解基础之上,由此获得得解最可靠;

广义逆法就是建立在本原超定方程直接进行householder变换得基础上,其算法

可靠性稍逊与奇异值求解,但速度较快;

【例7】

求解超定方程组

A=[2-13;31-5;4-11;13-13]

A=

2-13

31-5

4-11

13-13

b=[303-6]';

rank(A)

ans=

3

x1=A\b

x1=

1、0000

2、0000

1、0000

x2=pinv(A)*b

x2=

1、0000

2、0000

1、0000

A*x1-b

ans=

1、0e-014

-0、0888

-0、0888

■0、1332

0

可见x1并不就是方程Ax=b得精确解,用x2=pinv(A)*b所得得解与x1相同。

三.欠定方程组

欠定方程组未知量个数多于方程个数,但理论上有无穷个解。MATLAB将寻求一

个基本解,其中最多只能有m个非零元素。特解由列主元qr分解求得。

【例8】

解欠定方程组

A=[1-211;1-21-1;1-215]

A=

1-211

1-21-1

1-21-1

1-215

b=[1-15『

x1=A\b

Warning:Rankdeficient,rank=2tol=4>6151e-015

x1=

0

-0、0000

0

1、0000

x2=pinv(A)*b

x2=

0

-0、0000

0、0000

1、0000

四.方程组得非负最小二乘解

在某些条件下,所求得线性方程组得解出现负数就是没有意义得。虽然方程叁可

以得到精确解,但却不能取负值解。在这种情况下,其非负最小二乘解比方程得精

确解更有意义。在MATLAB中,求非负最小二乘解常用函数nnls,其调用格式为:

(1)X=nnls(A,b)返回方程Ax=b得最小二乘解,方程得求解过程被限制在x得条件

下;

(2)X=nnls(A,b,T0L)指定误差TOL来求解,TOL得默认值为

TOL=max(size(A))*norm(A,1)*eps,矩阵得一1范数越大,求解得误差越大;

(3)[X,W]=nnls(A,b)当x(i)=O时,w(i)vO;当下x(i)>0时,w(i)O,同时返回一个双向量

Wo

【例9】求方程组得非负最小二乘解

A=[3、4336-0、52380、6710

-0、52383、2833-0、7302

0、6710-0、73024、0261];

b=[-1>0001、50002、5000];

[X,W]=nnls(A,b)

X=

0

0、6563

0、6998

W=

-3、6820

・0、0000

・0、0000

x1=A\b

x1=

-0、3569

0、5744

0、7846

A*X-b

ans=

1、1258

0、1437

・0、1616

A*x1-b

ans=

1、Oe-O、15

-0、2220

0、4441

0

关于采用matlab进行指定非线性方程拟合得问题⑴

0优化工具箱得利用

函数描述

LSQLIN有约束线性最小二乘优化

LSQNONNEG非负约束线性最小二乘优化问题

当有约束问题存在得时候.应该采用上面得方法代替Polyfit与反斜线(\)。具体例子请参阅优

化工具箱文档中得相应利用这两个函数得例子。

d、非线性曲线拟合

利用MA1LAB得内建函数

函数名描述

FMINBND只解决单变量固定区域得最小值问题

FMINSEARCH多变量无约束非线性最小化问题(Neldcr-Mcad方法)。

下面给出一个小例子展示一下如何利用FMINSEARCH

I.首先生成数据

»1=0:>1:10;

»t=t(:);

»Data=40*exp(-、5*t)+rand(size⑴);%将数据加上随机噪声

2.写一个m文件,以曲线参数作为输入,以拟合误差作为输出

functionsse=myfit(params.Input,Actural_Output)

A=params(l);

lamda=params(2);

Fitted_Curve=A、*exp(-lamda*Input);

Error_Vector=Fitted_Curve-Actural_Output;

%当曲线拟合得时候,一个典型得质量评价标准就就是误差平方与

sse=sum(Error_VectorxA2);

%当然,也可以将sse写作:sse=Error_Veclor(:)*Error_Veclor(:);

3.调用FMINSEARCH

»Strarting=rand(l,2);

»options=optiniset('Display','iter');

»Estimates=fiminsearch(myfit,Strarting,options,t,Data);

»plot(t,Data,'*');

»holdon

»plot(t,Estimates(I)*exp(-Estimates(2)*t)/r');

Estimates将就是一个包含了对原数据集进行估计得参数值得向量。

附图见后面:

FMINSEARCH通常能够用来解决不连续情况,特别就是如果她们不出现在解得附近得时候。

它得到得通常也就是局部解。FMINSEARCH只能够最小化实数值(也就就是说,解得域必须

只能包括实数,函数得输出只能够为实数值)。当感兴趣得就是复数变量得域得时候,她任必须

被分割为实部与虚部。

派2、MATLAB得FIGURE窗口:最基本得拟合界面与数据统计工具

MATLAB通过基本得拟合界面也支持基本曲线拟合。利用这个界面,您可以快速地在简单易

用得环境中实现许多基本得曲线拟合。这个界面可以实现以下功能:

a.通过比样条插值(splineinierpolant)、hermiie插值、或者就是高达1()阶得多项式插值实现

数据得拟合;

b.对给定数据同时实现多样插值得绘制;

c.绘制残差图;

d.检查拟合结果得残差得数值;

e.通过内插值或者外推插值评价一个拟合结果;

f.对拟合结果与残差得模进行图形绘制;

g.将拟合结果保存入MATLAB工作空间。

开发您得拟合应用得时候.你可以通过某本拟合(BasicFiling)界面.也可以通过命令行函数.

也可以同时作用。您可以通过基本拟合界面只能够实现2—D数据得拟合。然而,如果您用

subplot绘制多个数据集,只要有至少一个数据集就是2D得,那么就可以用基本拟合界面。

可以通过如下步骤激活基本拟合界面:

1.绘制数据;

2.从figure窗口得Tools菜单条下面选择BasicFitting菜单项;

有关BasicFitting界面得更多信息,请查阅MATLAB帮助文档得相应部分.

注意:对于HP,IBM以及SGI平台,MATLAB6、0(R12、0)以及MATLAB6、1(RI2、1)得基本

拟合界面不受支持。

数据统计界面可以用来对图形中得每个数据集进行统计量得计算。可以通过如下步骤将数据

统计界面激活:

1.制数据;

2.从figure窗口得Tool、菜单条下面选择DulaSlalislics菜单项;

关于采用matlab进行指定非线性方程拟合得问题(2)

一。优化工具箱函数

LSQNONLIN解决非线性最小二乘法问题,包括非线性数据拟合问题

LSQCURVEFIT解决非线性数据拟合问题

下面给出利用这两个函数得例子:

LSQNONLIN:利用这个函数最小化连续函数只能够找到句柄解。下面得例子说明利用

LSQNONLIN函数用下面得函数进行拟合:

f=A+Bexp(C*x)+D*exp(E*x)

对■数据集x与y进行拟合,其中y就是在给定x得情况下得期望输出(可以就是方程给出数组,

也可以就是单独数据组成得数组)。为了解决这个问题,先建立下面得名为fit-simp,m得函

数,它利用数据x与y,将她们作为优化输入参数传递给LSQNONLINo利用给定得数据x计

算f得值,再与原始数据y进行比较。经验值与实际计算出得值之间得差异作为输出值返回。

LSQNOLIN函数就就是最小化这些差得平方与。

functiondiff=fit_simp(x,X,Y)

%此函数被LSQNONLIN调用

%x就是包含等式系数得向量

%X与Y就是作为操作数传递给Isnonlin

A=x(l);

B=x(2);

C=x(3);

D=x(4);

E-x(5);

diff=A+B>*exp(C.*X)+D、*exp(E、*X)-Y;

下面得脚本就是利用上面定义得fil_simp、m函数得一个例子:

%定义您打算拟合得数据集合

»X=0:x01:、5;

>>Y=2、0、*exp(5>0、*X)+3、0、*exp(2、5、*X)+1、5、*rand(size(X));

%初始化方程系数

»xo=[i111iy;

%设置用中等模式(memdium-scale)算法

»options^ptimsetCLargescale\off);

%通过调用LSQNONLIN重现计算新得系数

»x=lsqnonlin(fit_simp,X04],[],op(ions,X,Y);

%调用LSQNONLIN结果输出表明拟合就是成功得

Optimizationterminatedsuccessfully:

GradientinthesearchdirectionlessthantolFun

Gradientlessthan10*(tolFun+tolX)

%绘制原始数据与新得计算得数据

»Y_new=x(I)+x(2)>*exp(x(3)、*X)+x(4)、*exp(x(5)>*X);

»plot(X,Y;+r\X,Y_new,,b,);

※注意:LSQNONLIN只可以处理实数变量。在处理包括复数变量得实例得拟合得时候、数据

集应该被切分成实数与虚数部分。下面给出一个例子演示如何对复数参数进行最小二乘拟

小口。

为了拟合复数变量,您需要将复数分解为实数部分与虚数部分,然后把她们传递到函数中去,

这个函数被LEASTSQ作为单个输入调用。首先,将复数分解为实部与虚部两个向量。其次,

将这两个向量理解成诸如第一部分就是实部、第二部分就是虚部。在MATLAB函数也重新

装配复数数据,并用您想拟合得复数方程计算。将输出向量分解实部与虚部,将这两部分连接

为一个单一得输出向量传递回LEASTSQo下面,给出一个例子演示如何根据两个复数指数拟

合实数X与Y。

建立方程:

functionzero=fit2(x,X,Y)

%根据输入x重建复数输入

cmpx=x(l:4)+i、*x(5:8);

%利用复数计算函数

zerop=cmpx⑴、*exp(crnpx(2)>*X)+cmpx⑶、*exp(cmpx(4)>*X)-Y;

%将结果转换成一个列向量

%其中第一部分就是实部,第二部分就是虚部

numx=length(X);%实部长度

zero=real(zerop);%实部

zcro(numx+1:2*numx)=imag(zcrop);%虚部

为了评价计算这个函数濡要X与Y数据集。LSQNONLIN将根据它拟合出下面方程中得

参数a.b.c与d:

Y=a*exp(b*X)+c*exp(d*X);

其中,a,b,c与d就是复数变量。

»X=0:.1:5;

»Y=sin(X);

»Y=Y+xl*rand(sizc(Y)l-s05;

»cmpx0-[Ii22*iJ;

»x0(l:4)=real(cmpx0);

»xO(5:8)=iinag(cmpxO);

»x=Ieastsq(fit2,xO,[]JLX,Y);

»cmpx=x(l:4)+i>*x(5:8);

»Y1=rcal(cmpx(1)*exp(cmpx(2)、*X)+cmpx(3)、*exp(cmpx(4)、*X));

»plol(X,Y];r');

»holdon

»plot(X,Y;+');

1.5

-oLSQCURVEFIT:利用此函数可以在最小二乘意义上解决非线性曲线拟合(数据拟合)问

题。也就就是说,给定输入数据xdata,以及观测得输出数据ydata,找到系数x,使得函数

F(x,xdata)能够最好得拟合向最值。LSQCURVEFIT利用与LSQNONLIN相同得算法。它得

目得在于专门为数据拟合问题提供一个接口。

在拟合得时候,2维、3维或者N维参数拟合就是没有什么差别得。下面给出一个3维参数拟

合得例子。待拟合函数就是:

z=al*y、*x、、A2+a2*sin(x)+a3*y、A3;

建立得myfun、m得函数如下:

functionF=myfun(a,data);

x=data(I

y=daca(2,:);

F=a(l)*y>*x、A2+a(2)*sin(x)+a(3)*y>A3;

下面得脚本展示了这么利l|J上面得函数:

»xdata=[3.67、79、34、18、62、81、37、910、05、4];

»ydata=[16^5150、6263、124、7208、59、92、7163、9325、054、3];

»zdata=[95.0923、1160、6348、5989、1276、9745、681、8482、1744、47];

»data=[xdata:ydataJ:

»a0=[10,10,10];%初识揣测

»[a,resnoini]=lsqcurvefit(myfun,aO.data.zdata)

Maximumnumberoffunctionevaluationsexceeded;

increaseoptions>MaxFunEvals

a=()、()088-34、2886-0、0000

resnorm=2、2636e+004

»formatlong

a=0、493-34、28862491919983-0、499

»option=optimsct('MaxFunEvals',800);

»[a.resnorm]=lsqcurvefit(niyfun,a(),data,zdata,[],[],option)

Optimizationterminatedsuccessfully:

Relat

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论