蒈实验报告一螄芁题目:非线性方程求解蒁薈摘要:非线性方程的解析解通常很难给出,因此线性方程的数值解法就尤为重要。本实验采用两种常见的求解方法二分法和Newton法及改进的Newton法。膅羃前言:(目的和意义)芀掌握二分法与Newton法的基本原理和应用。蚈薆数学原理:莀对于一个非线性方程的数值解法很多。在此介绍两种最常见的方法:二分法和Newton法。罿对于二分法,其数学实质就是说对于给定的待求解的方程f(x),其在[a,b]上连续,f(a)f(b)<0,且f(x)在[a,b]内仅有一个实根x*,取区间中点c,若,则c恰为其根,否则根据f(a)f(c)<0是否成立判断根在区间[a,c]和[c,b]中的哪一个,从而得出新区间,仍称为[a,b]。重复运行计算,直至满足精度为止。这就是二分法的计算思想。羂Newton法通常预先要给出一个猜测初值x0,然后根据其迭代公式羆莆产生逼近解x*的迭代数列{xk},这就是Newton法的思想。当x0接近x*时收敛很快,但是当x0选择不好时,可能会发散,因此初值的选取很重要。另外,若将该迭代公式改进为肁肂其中r为要求的方程的根的重数,这就是改进的Newton法,当求解已知重数的方程的根时,在同种条件下其收敛速度要比Newton法快的多。莇袄程序设计:肄本实验采用Matlab的M文件编写。其中待求解的方程写成function的方式,如下膂functiony=f(x);螈y=-x*x-sin(x);薆写成如上形式即可,下面给出主程序。袃二分法源程序:节clc腿clear羄%%%给定求解区间薂a=1;莁b=2;薀%%%误差螆R=1;蚅k=0;%迭代次数初值蒁while(abs(R))>5e-6);螇c=(a+b)/2;蒈iff(a)*f(c)>0;莄a=c;蒁else膈b=c;袆end膃R=b-a;%求出误差薁k=k+1;蕿end薈fprintf('二分法求解的根x=%f\n迭代次数k=%d\n误差R=%f',c,k,R);羂Newton法及改进的Newton法源程序:蚁clc羀clear肅%%%%输入函数羄f=input('请输入需要求解函数>>','s')螁%%%求解f(x)的导数肆df=diff(f);螇%%%改进常数螃miu=1;袁%%%初始值x0蒇x0=input('inputinitialvaluex0>>');芅k=0;%迭代次数蒂max=100;%最大迭代次数羁R=eval(subs(f,'x0','x'));%求解f(x0),以确定初值x0时否就是解袈while(abs(R)>1e-8)羇x1=x0-miu*eval(subs(f,'x0','x'))/eval(subs(df,'x0','x'));薅R=x1-x0;肀x0=x1;艿k=k+1;莅if(abs(eval(subs(f,'x0','x')))<1e-10);芄break肀end蚀ifk>max;%如果迭代次数大于给定值,认为迭代不收敛,重新输入初值莁ss=input('mayberesultiserror,chooseanewx0,y/n?>>','s');莇ifstrcmp(ss,'y')蒄x0=input('inputinitialvaluex0>>');肁k=0;衿else肆break薄end蒂end薁end腿fprintf('牛顿法求得的根x=%.15d\n迭代次数k=%d\n误差R=%.15f',x0,k,R);蚄结果分析和讨论:袃用二分法计算方程在[1,2]内的根。(,下同)羈计算结果为羈二分法求解的根x=;蚄误差R=;芃迭代次数k=18;螀由f(x)知结果满足要求,但迭代次数比较多,方法收敛速度比较慢。蚆用二分法计算方程在[1,]内的根。螄计算结果为蚄x=;膈f(x)=-006;蝿k=17;袄由f(x)知结果满足要求,但迭代次数还是比较多。袁用Newton法求解下列方程袀x0=;蒈计算结果为羃x=;节f(x)=-016;薂k=4;芇由f(x)知结果满足要求,而且又迭代次数只有4次看出收敛速度很快。肃x0=1;蚃x0=,x0=;肀当x0=,计算结果为肆x=;膃f(x)=--014;肄k=4;螂由f(x)知结果满足要求,而且又迭代次数只有4次看出收敛速度很快,实际上该方程确实有真解x=。聿当x0=,计算结果为芃x=;膁f(x)=0;芀k=9;袈由f(x)知结果满足要求,实际上该方程确实有真解x=,但迭代次数增多,实际上当取x0〉,x≈1,就变成了方程的另一个解,这说明Newton法收敛与初值
哈工大-数值分析上机实验报告 来自淘豆网m.daumloan.com转载请标明出处.