您好,欢迎访问三七文档
当前位置:首页 > 金融/证券 > 金融资料 > 第3章---MATLAB计算
第3章MATLAB计算•3.1方程组的求解•3.2插值和拟合•3.3函数的极值点•3.4数值微积分•3.5符号对象•3.6符号微积分•3.7符号方程的求解3.1方程组的求解3.1.1多项式及其运算•多项式在MATLAB中以向量形式存储。即n次多项式用一个长度为n+1的系数向量来表示,且按降幂,缺少的幂次对应的向量元素为0。•多项式的运算主要包括多项式的四则运算、求导、求值和求根运算•多项式的四则运算–加减运算利用子函数polyadd,适用于任意阶次间多项式相加–乘法运算利用函数conv对它们的系数作卷积来实现,p=conv(p1,p2)–除法运算通过函数deconv进行系数解卷积来实现,[p,r]=deconv(p1,p2),其中k是商,r是余数。p1=[20-61];p2=[1-1];p=polyadd(p1,p2)p=20-50q=polyadd(p1,-p2)q=20-723261xx1x例3-1求多项式和的和、差、积、商p=conv(p1,p2)p=2-2-67-1[p,r]=deconv(p1,p2)p=22-4r=000-3•多项式求导–利用函数polyder来实现,语法格式:poly(p):返回多项式p的导数。poly(p1,p2):返回多项式p1*p2的导数。[q,d]=poly(p1,p2):返回多项式p1/p2的导数,q是分子,d是分母。例:对上题中两多项式求导:q1=polyder(p1),q2=polyder(p2)q1=60-6q2=1q3=polyder(p1,p2)q3=8-6-127[q4d]=polyder(p1,p2)q4=4-605d=1-21•多项式求值–y=polyval(p,x):按数组运算规则计算多项式值。–y=polyvalm(p,X):按矩阵运算规则计算多项式值,且X只能是方阵例:已知多项式,分别计算当取1、取在[2,3]区间均匀分布的4个点、取2行4列的正态分布的随机阵、取3行3列均匀分布的随机阵时,多项式的值。3261xxp=[20-61];x1=1;x2=linspace(2,3,4);x3=randn(2,4);x4=rand(3);%独立变量取数组元素时的多项式值y1=polyval(p,x1),y2=polyval(p,x2),y3=polyval(p,x3),y4=polyval(p,x4)y1=-3y2=5.000012.407422.925937.0000y3=-0.89362.10724.12261.8133-0.0372-2.59018.71230.3194y4=-1.4923-2.9643-1.3007-2.2264-2.6247-2.9756-2.7583-0.0466-2.9597%独立变量取矩阵时的多项式值z1=polyvalm(p,x1),z4=polyvalm(p,x4)z1=-3z4=2.9690-1.31383.21552.03361.79821.2657-0.33683.10670.8065•多项式求根---利用roots(p)函数来实现例:求多项式的根432254xxxp=[12-504];r=roots(p)r=-3.37681.0978+0.4916i1.0978-0.4916i-0.8187当多项式的根已知时,可以利用函数poly(r)来构建多项式的系数。poly(r)ans=1.00002.0000-5.00000.00004.00003.1.2线性方程组的求解可直接通过矩阵相除得到例3-7求解线性方程组1231231221233242xxxxxxxxxA=[111;23-1;-124];B=[1;3;2];x=A\Bx=0103.1.3非线性方程组的求解•求解单变量非线性方程的根–利用fzero函数,基本的语法格式:x=fzero(fun,x0)返回函数fun的是离x0最近的根。其中fun的输入方式可以是M函数文件的函数句柄、匿名函数或字符串例3-8求距离最近的根。2()250xfxxxe01x%建立函数文件fun1.m。functionf=fun1(x)f=x^2+2*x-exp(x)+5;%以M函数文件的函数句柄输入方程x=fzero(@fun1,1)x=2.9929%以匿名函数方式输入方程x=fzero(@(x)x^2+2*x-exp(x)+5,1)x=2.9929%以字符串方式输入方程x=fzero('x^2+2*x-exp(x)+5',1)x=2.9929•求非线性方程组的解–利用fsolve函数,其基本语法格式:x=fsolve(fun,x0)返回根初始猜测值向量为x0、非线性方程组fun的数值解。fun可以以M函数文件的函数句柄、匿名函数或字符串方式输入。–求解时还可以在指令中加入options:x=fsolve(fun,x0,options)–options是最优化工具箱的选项设定,通过调用optimset函数来设定最大优化代数、优化精度、中间结果的显示等等。例如'Display'选项决定显示优化的中间结果的方式,其调用格式为:options=optimset('Display','off'或'iter'或'final')其中'off'表示不显示,'iter'表示每步都显示,'final'表示仅显示最终结果。例3-9求解下列非线性方程组在初值为的数值解。0[11]x121212210602710150xxxxxx%建立函数文件fun2.m。functionf=fun2(x)f=[x(1)+2*x(2)-10^x(1)+6;2*x(1)-7*x(2)+10^x(2)-15];%以M函数文件的函数句柄输入方程组x0=[1;-1];options=optimset('Display','iter');x=fsolve(@fun2,x0,options)NormofFirst-orderTrust-regionIterationFunc-countf(x)stepoptimalityradius0359.8198.31164.30192121.21290.2568060.2220272.952.53120.004619490.1002960.3042.54153.57393e-0060.01814450.008042.55182.54309e-0120.0005341986.78e-0062.56211.34346e-0244.51381e-0074.93e-0122.5Optimizationterminated:first-orderoptimalityislessthanoptions.TolFun.x=0.3578-2.0393%以匿名函数方式输入方程组x0=[1;-1];f=@(x)[x(1)+2*x(2)-10^x(1)+6;2*x(1)-7*x(2)+10^x(2)-15];options=optimset('Display','off');x=fsolve(f,x0,options)x=0.3578-2.0393%以字符串方式输入方程组x0=[1;-1];f='[x(1)+2*x(2)-10^x(1)+6;2*x(1)-7*x(2)+10^x(2)-15]';x=fsolve(f,x0)Optimizationterminated:first-orderoptimalityislessthanoptions.TolFun.x=0.3578-2.03933.2插值和拟合•由离散点数据来确定函数的方法:函数插值和曲线拟合。–测量值是准确的,没有误差,一般用插值。–测量值与真实值有误差,一般用曲线拟合。3.2.1函数插值函数插值是根据给定的有限个样本点,产生另外的估计点以达到数据更为平滑的效果。•插值函数有interp1、interp2、interp3和interpn。•一维插值函数的调用格式为:yi=interp1(x,y,xi,'method')其中x和y是已知的样本点数据;xi是要内插的数据点,yi是xi对应的函数值;method是内插方法,可选择最近项插值'nearest'、线性插值'linear'、样条插值'spline'或立方插值'cubic',如果method省略,默认为线性插值。例3-10一维插值举例。x=0:10;y=sin(x)+cos(x);xi=0:0.1:10;y1=interp1(x,y,xi);y2=interp1(x,y,xi,'nearnest');y3=interp1(x,y,xi,'spline');y4=interp1(x,y,xi,'cubic');plot(xi,y1,xi,y2,'-s',xi,y3,'-.',xi,y4,'-*')0246810-1.5-1-0.500.511.5linearnearestspinecubic由图可知,‘nearest’为直角转折,效果最差;‘linear’是分段线性,在样本点上斜率变化很大,效果较好;'spline'和'cubic'形成的曲线很平滑,效果最好。3.2.2曲线拟合•曲线拟合就是寻找一个函数(或曲线),使该函数(或曲线)在某种准则下与样本点数据最为接近,但并不要求拟合曲线通过全部已知的样本点。•最常用的准则是最小二乘准则,用函数ployfit来实现,调用格式:p=polyfit(x,y,n)其中,x和y是已知样本点数据,n是拟合多项式的阶次,p为返回的拟合多项式的系数。例3-11对例3-10中的向量x和y实现1、2、3、4阶的多项式拟合,并将拟合曲线画出。x=0:10;y=sin(x)+cos(x);p1=polyfit(x,y,1),p2=polyfit(x,y,2),p3=polyfit(x,y,3),p4=polyfit(x,y,4)p1=-0.10710.6256p2=0.0095-0.20220.7683p3=-0.02900.4442-1.85971.8115p4=-0.00670.1059-0.3990-0.17341.3258x1=-1:0.1:11;y1=polyval(p1,x1);y2=polyval(p2,x1);y3=polyval(p3,x1);y4=polyval(p4,x1);plot(x1,y1,'-*',x1,y2,'--',x1,y3,'-.',x1,y4)-2024681012-8-6-4-202461阶2阶3阶4阶3.3函数的极值点•求函数极小值的常用函数–函数fminbnd:求解一元函数的极小值点,调用格式为:x=fminbnd(fun,x1,x2)求解函数在区间(x1,x2)中极小值点。–函数fminsearch:求解多元函数的极小值点,调用格式为:x=fminsearch(fun,x0)求解初始向量为x0的多元函数极小值点例3-12求解例3-8中建立的fun1函数在[0,10]的极小值点。x=fminbnd(@fun1,0,10)x=104221122()2(3)(1)fxxxxxfun3=@(x)2*x(1)^4+(x(1)-3*x(2))^2-(x(2)-1)^2;[x,fval]=fminsearch(fun3,[0,1])%返回极值点和对应的极值x=-0.4772-0.3039fval=-1.4077例3-13求解函数的极小值点,初始向量为[0,1]。3.4数值微积分3.4.1数值微分利用函数diff用来计算两个相邻点的差值,其调用格式为:•diff(x):一次微分,若x是一个向量,则返回[x(2)-x(1)x(3)-x(2)…x(n)-x(n-1)];若x是一个矩阵,则返回一个矩阵[x(2:m,:)-x(1:m-1,:)]。•diff(x,n)
本文标题:第3章---MATLAB计算
链接地址:https://www.777doc.com/doc-2045536 .html