计算方法实验报告
- 格式:doc
- 大小:633.50 KB
- 文档页数:22
实验报告
一、求方程f(x)=x^3-sinx-12x+1的全部根, ε=1e -6 1、 用一般迭代法; 2、 用牛顿迭代法;
并比较两种迭代的收敛速度。
一、首先,由题可求得:12cos 3)(2
'
--=x x x f . 其次,分析得到其根所在的区间。
① 令()0=x f ,可得到x x x sin 1123
=+-.
② 用一阶导数分析得到1123
+-x x 和x sin 两个函数的增减区间;再用二阶导数分析得到
两个函数的拐点以及凹凸区间.
③ 在直角坐标轴上描摹出01123
=+-x x 和0sin =x 的图,在图上可以看到他们的交点,然后估计交点所在的区间,即是所要求的根的区间。经过估计,得到根所在的区间为
[]3,4--,[]1,0和[]4,3.
1、 一般迭代法 (1)算法步骤:
设ε为给定的允许精度,迭代法的计算步骤为:
① 选定初值0x .由()0=x f 确定函数()x g ,得等价形式()x g x =. ② 计算()0x g .由迭代公式得()01x g x =.
③ 如果ε≤-01x x ,则迭代结束,取1x 为解的近似值;否则,用1x 代替0x ,重复步骤②和步骤③. (2)程序代码: ① 在区间[]3,4--内, 代码: clc
x0=-3.5; %初值0x
iter_max=100; %迭代的最大次数 ep=1e-6; %允许精度 ε k=0;
while k<=iter_max %k 从0开始到iter_max 循环 x1=(sin(x0)+12*x0-1).^(1/3); %代入0x ,算出1x 的值 if abs(x1-x0) x0=x1; %条件ε≤-01x x 不成立,用1x 代替0x k=k+1; %k 加1 end x_star=x1, iter=k %1x 为解的近似值,iter 为迭代次数 运行结果:x_star = -3.4101 ;iter =14 ②在区间[]1,0内, 代码: clc x0=0.5; %初值0x iter_max=100; %迭代的最大次数 ep=1e-6; %允许精度ε k=0; while k<=iter_max %k 从0开始到iter_max 循环 x1=(1/12)*(x0.^3-sin(x0)+1); %代入0x ,算出1x 的值 if abs(x1-x0) x0=x1; %条件ε≤-01x x 不成立,用1x 代替0x k=k+1; %k 加1 end x_star=x1, iter=k %1x 为解的近似值,iter 为迭代次数 结果:x_star = 0.07696;iter =6 ③在区间[]4,3内, 代码: clc x0=3.5; %初值0x iter_max=100; %迭代的最大次数 ep=1e-6; %允许精度ε k=0; while k<=iter_max %k 从0开始到iter_max 循环 x1=(sin(x0)+12*x0-1).^(1/3); %代入0x ,算出1x 的值 if abs(x1-x0) x0=x1; %条件ε≤-01x x 不成立,用1x 代替0x k=k+1; %k 加1 end x_star=x1, iter=k %1x 为解的近似值,iter 为迭代次数 运行结果:x_star = 3.4101 ;iter =10 2、 牛顿迭代法 (1)算法步骤: ① 选定初值0x ,计算()0x f ,()0' x f . ② 按公式()() k k k k x f x f x x ' 1- =+迭代,得新的近似值1+k x ,并计算()1+k x f ,()1' +k x f . ③ 对于给定的允许精度ε,如果ε≤-+k k x x 1,则终止迭代,取1* +≈k x x ;否则, 1+=k k ,在转回步骤②计算. (2)程序代码: ①在区间[]3,4--内, clc x1=-3.5; %初值1x k=0; while k<=100 %k 从0开始到100循环 x0=x1; %将初值1x 赋给0x f0=x0.^3-sin(x0)-12*x0+1; %计算()0x f f1=3*x0.^2-cos(x0)-12; %计算()0'x f x1=x0-f0/f1; %计算得到新的近似值1x if abs(x1-x0)< 1.0e-6 %01x x -与允许精度作比较 break ; %条件ε≤-01x x 成立,跳出循环 end k=k+1; %条件ε≤-01x x 不成立,k 加1 end x_star=x1, iter=k %1x 为解的近似值,iter 为迭代次数 运行结果:x_star = -3.4911;iter =2 ②在区间[]1,0内, clc x1=0.5; %初值1x k=0; while k<=100 %k 从0开始到100循环 x0=x1; %将初值1x 赋给0x f0=x0.^3-sin(x0)-12*x0+1; %计算()0x f f1=3*x0.^2-cos(x0)-12; %计算()0'x f x1=x0-f0/f1; %计算得到新的近似值1x if abs(x1-x0)< 1.0e-6 %01x x -与允许精度作比较 break ; %条件ε≤-01x x 成立,跳出循环 end k=k+1; %条件ε≤-01x x 不成立,k 加1 end x_star=x1, iter=k %1x 为解的近似值,iter 为迭代次数 运行结果:x_star =0.07696 ;iter =3 ③在区间[]4,3内, clc x1=3.5; %初值1x k=0;