非线性方程求解

上传人:豆浆 文档编号:50879855 上传时间:2018-08-11 格式:PPT 页数:57 大小:597.50KB
返回 下载 相关 举报
 非线性方程求解_第1页
第1页 / 共57页
 非线性方程求解_第2页
第2页 / 共57页
 非线性方程求解_第3页
第3页 / 共57页
 非线性方程求解_第4页
第4页 / 共57页
 非线性方程求解_第5页
第5页 / 共57页
点击查看更多>>
资源描述

《 非线性方程求解》由会员分享,可在线阅读,更多相关《 非线性方程求解(57页珍藏版)》请在金锄头文库上搜索。

1、数值计算与数值计算与MATLABMATLAB DateDate1 1第第7 7章章 非线性方程非线性方程求解求解第第7 7章章 非线性方程求解非线性方程求解在科学技术中,许多问题常归结为解在科学技术中,许多问题常归结为解 一元函数方程一元函数方程f(xf(x)=0)=0根的数值问题。方根的数值问题。方 程按程按f(xf(x) )是多项式或超越函数分别称为是多项式或超越函数分别称为 代数方程或超越方程。代数方程或超越方程。2 2第第7 7章章 非线性方程非线性方程求解求解7.1 7.1 求解非线性方程的求解非线性方程的MATLABMATLAB符号法符号法MatlabMatlab中设有求出方程中设

2、有求出方程f(xf(x)=0)=0解析解或精确解的符号解析解或精确解的符号命令命令solvesolve,由他得出的符号量结果,可以转换成,由他得出的符号量结果,可以转换成任意位有效数字的数值解。该命令的使用格式为任意位有效数字的数值解。该命令的使用格式为uusolve (s1, s2,solve (s1, s2,snsn, v1, v2, , v1, v2, vnvn) )uusolve (s1, s2,solve (s1, s2,snsn, v1,v2, v1,v2,vnvn) )uuz1,z2,z1,z2,znzn= solve (s1, s2,= solve (s1, s2,snsn,

3、v1, , , v1, , vnvn) )3 3第第7 7章章 非线性方程非线性方程求解求解 1)输入参量s1,s2,sn为待解方程组f(x)=0或函数 f(x)的字符、符号表达式,或者代表他们的变量名 。待解方程可以是任意线性、非线性或超越方程 。 2)输入参量v1,v2,vn是与方程对应的未知 量,它的数目必须与方程的数目相等;若有输出 变量名z1,z2,zn,且与方程数相等,则输入变量 v1,v2,vn可以缺省。 3)输出参量z1,z2,zn是指定的输入变量名,方 程解的结果分别赋值给它们。但是,赋值顺序并 不是输入参量v1,v2,vn的排序,而是按未知 量名在字母表的排序输出,求解方程

4、组时,这些 输出参量不可省略,而且必须根方程数相等。否 则只输出方程解的维数。4 4第第7 7章章 非线性方程非线性方程求解求解 4)当方程组不存在解析解或精确解时,该 指令输出方程的数字形式符号量解。 5)解析解表达式太冗长或含有不熟悉的特 殊函数时,可用vpa命令转换成数值解。5 5第第7 7章章 非线性方程非线性方程求解求解例7.1求解方程组 解:在matlab命令窗口中输入 a=x2+sqrt(5)*x=-1; b=x+3*z2=4;c=y*z+1=0; u v w=solve(a,b,c) 回车得到 u = -1/2-1/2*5(1/2) -1/2-1/2*5(1/2) 1/2-1/

5、2*5(1/2) 1/2-1/2*5(1/2) v = 1/76*(54+6*5(1/2)(1/2)*(-9+5(1/2) -1/76*(54+6*5(1/2)(1/2)*(-9+5(1/2) 1/44*(42+6*5(1/2)(1/2)*(-7+5(1/2) -1/44*(42+6*5(1/2)(1/2)*(-7+5(1/2) w = 1/6*(54+6*5(1/2)(1/2) -1/6*(54+6*5(1/2)(1/2) 1/6*(42+6*5(1/2)(1/2) -1/6*(42+6*5(1/2)(1/2)6 6第第7 7章章 非线性方程非线性方程求解求解再输入 vpa(u,6),vpa

6、(v,6),vpa(w,6) ans = -1.61804 -1.61804 -.618040 -.618040 ans = -.730749 .730749 -.805994 .805994 ans = 1.36846 -1.36846 1.24071 -1.240717 7第第7 7章章 非线性方程非线性方程求解求解 例7.2分别求出一元二次方程ax2+bx+5=0和 psin(x)=r三角方程的根 解 在matlab命令窗口中输入 x=solve(a*x2+b*x+5) 回车得到 x = 1/2/a*(-b+(b2-20*a)(1/2) 1/2/a*(-b-(b2-20*a)(1/2)

7、即8 8第第7 7章章 非线性方程非线性方程求解求解 再输入 x=solve(p*sin(x)=r) 回车得到 x = asin(r/p) 即x=arcsin(r/p)9 9第第7 7章章 非线性方程非线性方程求解求解 7.2非线性方程的求解方法 本部分的几种数值方法,在不加说明的情 况下,都是在某个区间内求的方程的一个 根,其理论依据为:如果f(a)f(b)0 , x 1.0,1.5可知 f(x)=0 在1,1.5 内有唯一实根 x* 。这时 f(1) f(1.5)01.25-0.29691.251.51.3750.22461.251.3751.3125-0.05151.31251.3751

8、.34380.08281.31251.34381.32810.01451.31251.32811.3203-0.01881.32031.32811.3242-0.0018这时|x6-x5|=0.003910 2取k=6, 也就是计算6次就可以达到满足精度要求的近似解.应当注意:二分法要求 f(x) 连续,但只能求单根且收敛速度不快。另外,我们也可以提前确定计算次数,这时利用关系式 (k+1) lg 2 21717第第7 7章章 非线性方程非线性方程求解求解2.二分法的matlab实现 function root=HalfInterval(f,a,b,eps) if(nargin=3) eps=

9、1.0e-4; end f1=subs(sym(f),findsym(sym(f),a); f2=subs(sym(f),findsym(sym(f),b); if(f1=0) root=a; end if(f2=0) root=b; endif(f1*f20) disp(两端点函数值乘积大于0!); return; else root=FindRoots(f,a,b,eps); end function r=FindRoots(f,a,b,eps) f_1=subs(sym(f),findsym(sym(f),a); f_2=subs(sym(f),findsym(sym(f),b); mf

10、=subs(sym(f),findsym(sym(f),(a+b)/2); if(f_1*mf0) t=(a+b)/2; r=FindRoots(f,t,b,eps); else if(f_1*mf=0) r=(a+b)/2; else if(abs(b-a)0) disp(两端点函数值乘积大于0!); return; else t1=a+(b-a)*0.382; t2=a+(b-a)*0.618; f_1=subs(sym(f),findsym(sym(f),t1); f_2=subs(sym(f),findsym(sym(f),t2); tol=abs(t1-t2); while(tole

11、ps) %精度控制 if(f_1*f_20) a=t2; else b=t1; end end t1=a+(b-a)*0.382; t2=a+(b-a)*0.618; f_1=subs(sym(f),findsym(sym(f),t1); f_2=subs(sym(f),findsym(sym(f),t2); tol=abs(t2-t1); end root=(t1+t2)/2; %输出根 end2121第第7 7章章 非线性方程非线性方程求解求解 7.2.3迭代法对于 f(x)=0 (1)将其改写为 x=g(x) (2)取适当的初值 x0 得迭代格式:并称其为求解( 1) 的迭代法, g(x

12、) 称为迭代函数。x k+1=g(xk ) , k=0,1,2, (3)设 x* 为 (1) 精确解,如果 ,则称迭代解 xk 收敛,否则称为发散。2222第第7 7章章 非线性方程非线性方程求解求解例 用简单迭代法求 x3-2x-3=0 在1,2内的根。解:容易验证方程1,2在 内只有单根 。改写原方程为得迭代格式取初始值 x0=1.9 ,由上面的迭代格式求得近似解如下 :这里2323第第7 7章章 非线性方程非线性方程求解求解由于 x8、x9 相当接近,故可取 x*x8=1.89328920。如果将原方程 x3-2x-3=0 改为 仍取初值 x0=1.9 , 得迭代格式如下:x1=1.89

13、45647x2=1.89352114x8=1.89328920x9=1.893289202424第第7 7章章 非线性方程非线性方程求解求解得到的近似解是不收敛的,越来越发散 。 由此可见迭代函数 g(x) 选取的适当,近似解将会 收敛;选取的不适当,近似解将会发散。 求得近似解为:x0=1.900x1=1.930x2=2.095x3=3.098x4=13.372525第第7 7章章 非线性方程非线性方程求解求解迭代法的matlab实现 function p0,k,err,p=fixpt(g,p0,tol,max1) % g是给定的迭代函数 % p0中给定的初始值 % max1是所允许的最大迭代次数 % k是所进行的迭代次数加1 % p是不动点的近似值 % err是误差 % p(p1,p2,.,pn) P(1)=p0; for k=2:max1 P(k)=feval(g,P(k-1); k,err=abs(P(k)-P(k-1) p=P(k); if (errro

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号