视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
数值分析实验二分法
2025-09-26 11:08:21 责编:小OO
文档
                             

石家庄经济学院

 

 

实验报告 

(学 院)系:    信息工程学院    

专    业:    计算机科学与技术 

姓    名:      000        

班    级:       计科二班      

学    号:       5111091111112  

任课教师:         00           

《数值分析》实验报告

姓名学号51110903日期
实验室152机房

设备编号
实验题目用二分法求f(x)=x^3+x^2-3x-3=0的正根(精确到1e -3)

牛顿法求x-cos(x)=0的实根,精确到小数后六位

一  实验目的

   使用matlab编程,熟悉matlab编程环境。

分别使用二分法和牛顿法求方程的根,掌握二分法和牛顿法求方程根的过程及其算法。

深入分析二分法的优缺点和牛顿法与弦割法进行比较。

二  实验内容

1 二分法实验 f(x)=x^3-x^2-3*x-3=0 的正根(精度精确到0.001)

算法实现

    步1:构造区间[a,b],取a=1,b=2.先把c=(a+b)/2代入方程f(x),如果fb*fc>0说明根的区间在[a,c],及令b=c;

    步2:如果fb*fc不大于0说明根的区间在[c,b],及令a=c;继续在新的区间内二分,直到达到要求的精度0.001;

    步3:循环执行步骤1,2,直到步骤2的条件成立;

步4:取区间中点及c为所求方程的根;

参数说明

     a,b: 区间端点

      c: 每次所取区间的中间值

     x  :最后所求的近似值

     ya,yb:对应的所求函数值

     abs(): 求绝对值函数

源代码

clc

close all 

format long;

f=input('f(x)=');

qujian=input('输入区间=') ;

err=input('误差范围;');

a=qujian(1);

b=qujian(2);

yc=1;

while((b-a)>err)&(yc~=0);

    c=(a+b)/2; %设定中点

    x=a;

    ya=eval(f);

    x=b;

    yb=eval(f);

    x=c;

    yc=eval(f);

    if ya*yc<0    %当根不在左边的子区间时,把右边的子区间设为迭代范围

        b=c;

    else    %当根不在左边的子区间时,把右边的子区间设为迭代范围

        a=c;

    end

    x0=c

End

运行结果

>>erfenfa

fx =

4.596249527821783e-005

x =

    1.732055606250

2 牛顿法实验 f(x)=x-cosx的正根(精度精确到0.000001)

算法实现

      1:构造区间[-1,1] ,代入方程f(x),如果f(-1)*f(1)<0说明根的区间在[-1,1];

      2:利用fzero(’x-cos(x)’),取得临界点0.5;

      3:取f(x)的一介导数,构造牛顿方法;

      4:在构造区间[-1,1]中计算得到所求的方程根;

      5:循环次数k为10次;

      6: 误差的大小为1E-6;

参数说明

     Error:误差限

     k: 循环的区间

     p:原函数

     dirv_p:原函数的一介导函数

     funNewton:用户自定义的函数

     abs(): 求绝对值函数

源代码:

clear  all;

Error =1E-6;

format long;

x=0.5;

for k=1:10

          [p dirv_p]=funNewton(x);

          xk=x;

          x=x-p/dirv_p;

          if(abs(xk-x)<=Error)

             break;

          end

end

%用户自定义函数:

function [p dirv_p]=funNewton(x)

     p=x-cos(x);

 dirv_p=1+sin(x);

牛顿法和弦截法:与牛顿法相比,弦截法的收敛速度也是比较快的。可以证明,弦截法具有超线性收敛速度。

相同之处:都是线性化方法。

不同之处:牛顿法在计算xk+1时只用到前一步的值xk,故这种方法称为单点迭代法。

而弦截法在求xk+1时要用到前两步的值xk和xk-1,因此这种方法称为多点迭代法。

运行结果

end 

>> x

x =

   0.73908513321516    

三  本次实验总结

通过做此实验,我对MATLAB有更进一步的了解,了解了MATLAB强大的功能以及如何用MATLAB来解决实际问题,激发了我学习MATLAB的兴趣,更加使我认识到MATLAB在我们的工作生活中都有广泛的应用。对于此次编程实验,我也意识到自己对MATLAB还不够了解,今后需要花更多时间在这门课上,以求更好的掌握MATLAB,同时这次试验也让我对用二分法和牛顿法解决数学问题有了更深一步的了解。 

四  教师评语

下载本文
显示全文
专题