资源描述:
《矩阵、数组和符号运算》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、2.3矩阵、数组和符号运算7、符号方程求解线性方程组的符号解法函数命令linsolve用来求解线性方程组符号解。对方程A*X=B,linsolve的调用格式为:X=linsolve(A,B)等同于X=sym(A)sym(B)>>A=sym('[10,-1,0;-1,10,-2;0,-2,10]')A=[10,-1,0][-1,10,-2][0,-2,10]>>B=('[9;7;6]')B=[9;7;6]>>linsolve(A,B)ans=[473/475][91/95][376/475]>>vpa
2、(ans,6)ans=[.995789][.957895][.791579]矩阵A必须至少是行满秩的。当A的列数大于行数时,将给出解不惟一的警告提示。b.非线性方程的符号解法用函数零点法求非线性方程的解有两个函数命令,即fzero和fsolve。fzero命令用于求一元函数零点fsolve命令用于求解非线性方程组首先需将方程f(x)=g(x)转化为F(x)=f(x)-g(x)=0,方程组也是如此;然后再将函数F(x)写成MATLAB的m函数,以便在fzero和fsolve命令中调用。求解的过程为:先猜
3、测一个初始零点,或者该零点大概所在的区间;然后通过计算,使猜测值不断精确化,或使猜测区间不断收缩,直到达到预先指定的精度为止。2.3矩阵、数组和符号运算2.3矩阵、数组和符号运算求一元函数零点命令fzero的调用格式为:◆x=fzero(fun,x0):求一元函数零点命令的最简形式;◆[x,fval,exitflag]=fzero(fun,x0,options,P1,P2,...):求一元函数零点命令的完整格式。x0是初始猜测的零点;options是优化迭代所采用的参数选项,options的缺省设置可
4、以用命令options=optimset(’fzero’)获得;P1,P2是向函数fun传递的附加参数。它的具体取名和函数fun中一致;x是输出参数,为所求的零点自变量值;fval是输出参数,为函数fun在x处的值;exitflag是描述函数fun的退出情况。若exitflag>0,则表示找到函数零点后退出;若exitflag<0,则表示没有找到零点或在搜索过程中遇到了无穷大的函数值。2.3矩阵、数组和符号运算用fzero命令求解函数的零点(1)建立函数f(x)的M文件。functiony=fun1(
5、x)y=x.^4-4*x-5;(2)建立水平横轴的M文件。functiony=fun2(x)y=0;(3)用作图法估计函数零点位置。>>fplot('fun1',[-5,5],'r')>>holdon>>fplot('fun2',[-5,5],'r')(4)用zoom和ginput命令获得零点的初始近似值在程序中输入下列命令,可得到函数的局部放大图及鼠标操作线。zoomon%局部放大命令[tt]=ginput(1)[yy]=ginput(1)%用鼠标获取2个零点猜测值zoomoff%恢复原来图形大小显
6、示所得零点初始猜测值,结果为:tt=-0.98380.0001yy=1.87620.0091(5)用函数fzero命令求函数的精确零点[x,fval,exitflag]=fzero(’fun1’,tt(1),[])%靠近tt(1)点处的精确零点[x,fval,exitflag]=fzero(’fun1’,yy(1),[])%靠近yy(1)点处的精确零点结果为:Zerofoundneartt.x=-1fval=0exitflag=12.3矩阵、数组和符号运算Zerofoundnearyy.x=1.881
7、2fval=-6.2172e-015exitflag=1解非线性方程组的函数命令fsolve其调用格式为:◆x=fsolve(fun,x0):解非线性方程组最简单的调用格式。该式中除两个输入参数外,其余输入输出参数都可以缺省;◆[x,fval,exitflag,output,jacob]=fsolve(fun,x0,options,P1,P2...):解非线性方程组最完整的调用格式。x0是表示零点数是猜测值的向量;options是优化迭代所采用参数的结构数组。P1和P2是向函数fun传递的参数;x和f
8、val是输出参数,所求零点的自变量值和函数值;output是输出此命令所用的计算方法、迭代次数等信息。jacob是函数在x处的jacobian。2.3矩阵、数组和符号运算2.3矩阵、数组和符号运算求方程组的根。首先编制函数文件fc.mfunctiony=fc(x)y(1)=x(1)-0.7*sin(x(1))-0.2*sin(x(2));y(2)=x(2)-0.7*cos(x(1))+0.2*sin(x(2));y=[y(1),y(2)];然后用fsol