您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 非线性方程(组)的数值解法29086
仅供个人参考不得用于商业用途Forpersonaluseonlyinstudyandresearch;notforcommercialuse2.1方程(组)的根及其MATLAB命令2.1.2求解方程(组)的solve命令求方程f(x)=q(x)的根可以用MATLAB命令:x=solve('方程f(x)=q(x)','待求符号变量x')求方程组fi(x1,…,xn)=qi(x1,…,xn)(i=1,2,…,n)的根可以用MATLAB命令:E1=sym('方程f1(x1,…,xn)=q1(x1,…,xn)');…………………………………………………….En=sym('方程fn(x1,…,xn)=qn(x1,…,xn)');[x1,x2,…,xn]=solve(E1,E2,…,En,x1,…,xn)2.1.4求解方程(组)的fsolve命令fsolve的调用格式:X=fsolve(F,X0)2.2搜索根的方法及其MATLAB程序2.2.1作图法及其MATLAB程序作函数)(xfy在区间[a,b]的图形的MATLAB程序一x=a:h:b;%h是步长y=f(x);plot(x,y)grid,gtext('y=f(x)')说明:⑴此程序在MATLAB的工作区输入,运行后即可出现函数)(xfy的图形.此图形与x轴交点的横坐标即为所要求的根的近似值.⑵区间[a,b]的两个端点的距离b-a和步长h的绝对值越小,图形越精确.作函数)(xfy在区间[a,b]上的图形的MATLAB程序二将)(xfy化为)()(xgxh,其中)()(xgxh和是两个相等的简单函数.x=a:h:b;y1=h(x);y2=g(x);plot(x,y1,x,y2)grid,gtext('y1=h(x),y2=g(x)')说明:此程序在MATLAB的工作区输入,运行后即可出现函数)()(21xgyxhy和的图形.两图形交点的横坐标即为所要求的根的近似值.2.2.2逐步搜索法及其MATLAB程序逐步搜索法的MATLAB主程序function[k,r]=zhubuss(a,b,h,tol)%输入的量---a和b是闭区间[a,b]的左、右端点;%---h是步长;第二章非线性方程(组)的数值解法仅供个人参考不得用于商业用途%---tol是预先给定的精度.%运行后输出的量---k是搜索点的个数;%---r是方程在[a,b]上的实根的近似值,其精度是tol;X=a:h:b;Y=funs(X);n=(b-a)/h+1;m=0;X(n+1)=X(n);Y(n+1)=Y(n);fork=2:nX(k)=a+k*h;Y(k)=funs(X(k));%程序中调用的funs.m为函数sk=Y(k)*Y(k-1);ifsk=0,m=m+1;r(m)=X(k);endxielv=(Y(k+1)-Y(k))*(Y(k)-Y(k-1));if(abs(Y(k))tol)&(xielv=0)m=m+1;r(m)=X(k);endend例2.2.4用逐步搜索法的MATLAB程序分别求方程0332223xxx和0)2sin(cos3x在区间]2,2[上的根的近似值,要求精度是0.0001.解将逐步搜索法的MATLAB程序保存名为zhubuss.m的M文件.建立M文件funs.mfunctiony=funs(x)y=2.*x.^3+2.*x.^2-3.*x-3在MATLAB工作窗口输入如下程序[k,r]=zhubuss(-2,2,0.001,0.0001)运行后输出的结果k=4001r=-1.2240-1.0000-1.0000-0.99901.2250即搜索点的个数为k=4001,其中有5个是方程0332223xxx的近似根,即r=-1.2240,-1.0000,-1.0000,-0.9990,1.2250,其精度为0.0001.在程序中将y=2.*x.^3+2.*x.^2-3.*x-3用y=sin(cos(2.*x.^3))代替,可得到方程0)2sin(cos3x在区间]2,2[上的根的近似值如下r=-1.9190-1.7640-1.5770-1.3300-0.92200.92301.33101.57801.76501.92002.3二分法及其MATLAB程序2.3.2二分法的MATLAB程序二分法的MATLAB主程序function[k,x,wuca,yx]=erfen(a,b,abtol)a(1)=a;b(1)=b;ya=fun(a(1));yb=fun(b(1));%程序中调用的fun.m为函数ifya*yb0,disp('注意:ya*yb0,请重新调整区间端点a和b.'),returnendmax1=-1+ceil((log(b-a)-log(abtol))/log(2));%ceil是向方向取整fork=1:max1+1a;ya=fun(a);b;yb=fun(b);x=(a+b)/2;yx=fun(x);wuca=abs(b-a)/2;k=k-1;[k,a,b,x,wuca,ya,yb,yx]ifyx==0a=x;b=x;elseifyb*yx0仅供个人参考不得用于商业用途b=x;yb=yx;elsea=x;ya=yx;endifb-aabtol,return,endendk=max1;x;wuca;yx=fun(x);例2.3.3确定方程x3-x+4=0的实根的分布情况,并用二分法求在开区间(-2,-1)内的实根的近似值,要求精度为0.001.解(1)先用两种方法确定方程x3-x+4=0的实根的分布情况。方法1作图法.在MATLAB工作窗口输入如下程序x=-4:0.1:4;y=x.^3-x+4;plot(x,y)grid,gtext('y=x^3-x+4')画出函数f(x)=x3-x+4的图像.从图像可以看出,此曲线有两个驻点33都在x轴的上方,在(-2,-1)内曲线与x轴只有一个交点,则该方程有唯一一个实根,且在(-2,-1)内.方法2试算法.在MATLAB工作窗口输入程序x=-4:1:4,y=x.^3-x+4运行后输出结果x=-4-3-2-101234y=-56-20-2444102864由于连续函数f(x)满足0)1()2(ff,所以此方程在(-2,-1)内有一个实根.(2)用二分法的主程序计算.在MATLAB工作窗口输入程序[k,x,wuca,yx]=erfen(-2,-1,0.001)运行后屏幕显示用二分法计算过程被列入表2-3,其余结果为k=9,x=-1.7959,wuca=9.7656e-004,yx=0.0037表2-3次数k左端点ak右端点bk中点xk2kkab函数值f(ak)函数值f(bk)函数值f(xk)0-2.0000-1.0000-1.50000.5000-2.00004.00002.12501-2.0000-1.5000-1.75000.2500-2.00002.12500.39062-2.0000-1.7500-1.87500.1250-2.00000.3906-0.71683-1.8750-1.7500-1.81250.0625-0.71680.3906-0.14184-1.8125-1.7500-1.78130.0313-0.14180.39060.12965-1.8125-1.7813-1.79690.0156-0.14180.1296-0.00486-1.7969-1.7813-1.78910.0078-0.00480.12960.06277-1.7969-1.7891-1.79300.0039-0.00480.06270.02908-1.7969-1.7930-1.79490.0020-0.00480.02900.01219-1.7969-1.7949-1.79590.0010-0.00480.01210.00372.4迭代法及其MATLAB程序2.4.2迭代法的MATLAB程序1迭代法的MATLAB主程序1function[k,piancha,xdpiancha,xk]=diedai1(x0,k)仅供个人参考不得用于商业用途%输入的量--x0是初始值,k是迭代次数x(1)=x0;fori=1:kx(i+1)=fun1(x(i));%程序中调用的fun1.m为函数y=φ(x)piancha=abs(x(i+1)-x(i));xdpiancha=piancha/(abs(x(i+1))+eps);i=i+1;xk=x(i);[(i-1)pianchaxdpianchaxk]endif(piancha1)&(xdpiancha0.5)&(k3)disp('请用户注意:此迭代序列发散,请重新输入新的迭代公式')return;endif(piancha0.001)&(xdpiancha0.0000005)&(k3)disp('祝贺您!此迭代序列收敛,且收敛速度较快')return;endp=[(i-1)pianchaxdpianchaxk]';例2.4.1求方程102)(2xxxf的一个正根.解在MATLAB工作窗口输入程序[k,piancha,xdpiancha,xk]=diedai1(2,5)运行后输出用迭代公式2/)10(21kkxx的结果[k,piancha,xdpiancha,xk]=1.000000000000001.000000000000000.3333333.000000000000002.000000000000002.0000005.000000000000000.0000003.000000000000004.0000000.7435904.0000004.0000000000000011.0000001.859251-6.0000005.0000000000000011.5078130.671297-18.507813请用户注意:此迭代序列发散,请重新输入新的迭代公式k=5,piancha=11.507813,xdpiancha=0.671297,xk=-18.507813由以上运行后输出的迭代序列与根*x=2.31662479035540相差越来越大,即迭代序列}{kx发散,此迭代法就失败.这时偏差piancha逐渐增大且偏差的相对误差xdpiancha的值大于0.5.用迭代公式)2/(101kkxx运行后输出的结果[k,piancha,xdpiancha,xk]=1.000000000000000.0000000.0000002.0000002.000000000000000.7777780.0000002.2222223.000000000000000.1460.0061732.2631584.000000000000000.0125550.0781162.2895.000000000000000.0651280.0182.415730k=5,piancha=0.065128,xdpiancha=0.018,xk=2.415730可见,偏差piancha和偏差的相对误差xdpiancha的值逐渐变小,且第5次的迭代值xk=2.33146067415730与根*x=2.31662479035540接近,则迭代序列}{kx收敛,但收敛速度较慢,此迭代法较为成功.用迭代公式)22/()102(21kkkkkxxxxx运行后输出的结果[k,piancha,xdpiancha,xk]=1.000000000000000.3333330.2857142.3333332.000000000000000.0666670.0072.6666673.000000000000000.0000900.0000222.0619774.000000000000000.000000000264370.000000000114122.0355405.00000000000000002.035540祝贺您!此迭代序
本文标题:非线性方程(组)的数值解法29086
链接地址:https://www.777doc.com/doc-1842613 .html