实验1:二分法和迭代法

  • 格式:doc
  • 大小:83.50 KB
  • 文档页数:4

Ex=(k+1)( 1-0.99995^k)+ 0.99995^k=k(1-0.99995^k)+1 设 f(k)=Ex/k=1-0.99995^k+1/k 当 f(k)最小时,总共所需的化验次数最少,即 f ’(k*)=0 时,k*所需化验次数最少 f ’(k)=(-0.99995^k)*(ln0.99995)-1/(k^2) f’(100)= -5.0248e-05 f’(200)= 2.4504e-05 利用二分法,程序如下: f=@(k)(-0.99995^k)*(log(0.99995))-1/(k^2); a=100;b=200; tol=1e-12;maxit=100; my_bisection(f,a,b,tol,maxit) 结果为 1.419222563505173e+02 即 k=141 或 142 时,f(k)最小 代入得 f(141)= 0.014117580646837
四、实验结果: (1) 取有根区间为 [3, 4], 利用二分法求得的根为: 3.262983107765649 取迭代初值为 3, 利用迭代法求得的根为: 3.262983107764216(2来自 二分法和迭代法的迭代图像为:
(3) 结论: … …
任课教师:鲍亮
2017 年 3 月 19 日
(2) 迭代法的程序:
function Vx=my_iteration(phi,x0,tol,maxit) Vx=zeros(1,maxit);k=2;Vx(1)=x0; while abs(phi(x0)-x0)>tol&&k<=maxit+1 x0=phi(x0); Vx(k)=x0; k=k+1; if k>3 if abs(Vx(k-1)-Vx(k-2))>abs(Vx(k-2)-Vx(k-3)) '不收敛' break else end else end end Vx=Vx(1:k-1);
3. 试着用图像来显示迭代收敛的过程, 分析为什么称二分法是线性收敛的? (选做题) 在一个人数很多的团体中普查某种疾病, 为此要抽验 n 个人的血液, 可以用两种方法进行, (i)将每个人的血分别检验,共需 n 次 (ii)按 k 个人一组进行分组,把他们的血混在一起进行检验,如果混合血液呈阴性反应, 就说明这 k 个人的血都呈阴性反应,这样这 k 个人就只需要验一次,否则,如果呈阳性反 应,就再对这 k 个人分别进行化验,共需 k+1 次。 假设每个人化验呈阳性的概率为 0.00005,请证明通过选取适当的 k,第 2 种方法所需的 化验次数更少,并求出最合适的 k。 x 解: p 1 0.99995^k k+1 1-0.99995^k
(3) 测试程序:
二分法测试程序 function ex_bisection
a=3;b=4; tol=1e-12;maxit=40; f=@(x)sin(x)+x^2-2*x-4; [c,Vc]=my_bisection(f,a,b,tol,maxit) testvalue=f(c) 迭代法测试程序 %以x^3-x-1为测试函数% function ex_interation x0=1.5; tol=1e-12; maxit=40; phi=@(x)(x+1)^(1/3);%测试收敛函数% con=my_interation(phi,x0,tol,maxit) phiphi=@(x)x^3-1;%测试发散函数% div=my_interation(phiphi,x0,tol,maxit)
f(142)= 0.014117284317300 f(142)<f(141) 所以 k=142 时,次数最少。 三、操作步骤: Matlab 程序如下: (1) 二分法的程序:
function [c,Vc]=my_bisection(f,a,b,tol,maxit) c=(a+b)/2;Vc=zeros(1,maxit);k=1; while abs(f(c))>tol&&k<maxit Vc(k)=abs(f(c)); k=k+1; if f(c)*f(a)>0 a=c; else b=c; end c=(a+b)/2; end
《数值逼近》实验报告:实验一
学号:10150990 实验名称:方程求根 所使用的工具软件及环境:Matlab 一、实验目的: 1. 利用 Matlab 实现求解方程的算法; 2. 利用编制的算法求解给定的方程; 二、实验内容: 1. 编制方程求根的二分法和迭代法的 Matlab 程序; 2. 利用所编制的程序, 求解 sin( x) x2 2 x 4 0 的正根, 要求精度达到 1e-12。 姓名:杜隆昆 班级:信计 150 实验地点: 成绩: