数值分析实验报告——方程求根
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数值分析》实验报告
班级信科1501 学号150803114 姓名梁恩昊日期2017.10.3
实验一________ 方程求根_______
一、实验目的:
掌握二分法、Newt on法、不动点迭代法、弦截法求方程的根的各种计算方法、并实施程序调试和运行,学习应用这些算法于实际问题。
二、实验内容:
二分法、Newt on法、不动点迭代法、弦截法求方程的根、程序的调试和运行,给出实例的计算结果。观察初值对收敛性的影响。
三、实验步骤:
①、二分法:
定义:对于区间[a, b]上连续不断且f (a)・f (b) <0的函数y=f (x),通过不断地把函数f (x)的零点所在的区间一分为二,使区间的两个端点逐步逼近零点,进而得到零点近似值的方法叫二分法。
实现方法:首先我们设一方程400*(x A4)-300*(x A3)+200*(x A2)-10*x-仁0 ,并求其在区间[0.1,1]上的根,误差限为e=10A-4。
PS:本方法应用的软件为matlab。
disp('二分法')
a=0.1;b=1;
tol=0.0001;
n0=100;
fa=400*(a.A4)-300*(a.A3)+200*(a.A2)-10*a-1;
for i=1: n0 p=(a+b)/2;
fp=400*(p.A4)-300*(p.A3)+200*(pA2)-10*p-1;
if fp==0||(abs((b-a)/2) disp(' 用二分法求得方程的根p=') disp(p) disp(' 二分迭代次数为:') disp(i) break; end; if fa*fp>0 a=p; else b=p; end; end; if i==n0&&~( fp==0||(abs((b-a)/2) 程序调试: A«^SK»■ J^+JK KL::-L4*«r-j. I JX p«I K*bl >r2 ffp"iDb* p. 4)^J &6" p> 31+2D0» ■ p. Z E ]. if fji-=< 11 f*b. i 'b-» i /2 ■ 4±JP •図二好去求谭才程的Mhh) dljp pj 4U. ' i) 勺巩妙. *nd: if e&*fp 'O E=P *194 b=1> rnd.; If UsuCSr rp=Ql II»Ife-Sl IlTil^SXr&li 4-llpi WI nsns' 「二〒迭代垢归*i X出方程茁霍r “ 二泌 曲二讨;t3HS芳壮甘训壮匕 «. n$9 _曲乜竹Tfl-n: U k r>\ 运行结果: 用二分法求得方程的根p= 0.1108 二分迭代次数为: 14 ②Newton 法 Vllw M F aim0.1 BQ ^1104Mia aw EeaE7«■ IM MM sita LWJOr-CA UJM 宀li > aihJ H^.ul 囈鬥收 i-1 严 f rt*b>F2, . fp=-;00rlp ■jJ-MKhri-p - 3)4 200. p. ■? ” if fp=:!| I ahi lh-3l Z' •HL13JI 均一-蹙車啤*||?星 :必屮样 iiusC 二特为t "tt F ' • •bcA&k 卜曲 it 忸4=> .llAt fe^F. 4H4 : 'if i—rOtt ""(f p—-fl 11 I' ②讥= dlTpC r 二一:启Tf; 7■尢詳国••舉■ 亡远 -" □ * * SI ■ ■ Q ■ 113知祢硝—■福鼻耕■ | ibhb-irfpte 电 R 曰 昌 昌 曰 曰 定义:取定初值xO,找到函数对应的点,然后通过该点作函数切线,交x轴,得到新的横坐标值,然后找函数对应的点,做切线,得到新的横坐标值,重复上述步骤,多次迭代,直 到收敛到需要的精度。 实现方法:我们与二分法一样,先设一方程400*(x A4)-300*(x A3)+200*(x A2)-10*x -仁0 ,并求其在区间[O.1,1] 上的根。 PS:本方法应用的软件为matlab。 syms x; diff(400*(x.A4)-300*(x.A3)+200*(x.A2)-10*x-1) %求导方程 函数文件: function Newton=fun(a) Newton=400*(a.A4)-300*(a.A3)+200*(a.A2)-10*a-1; end function Newton2=dfun(b) Newton2=1600*bA3-900*bA2+400*b-10; %fun 函数的导数 end 主程序: x0=1; while 1 x1=x0-fun(x0)/dfun(x0); if abs(x1-x0)<1e-8 || abs(fun(x1))<1e-10 break;