您的当前位置:首页数值分析实验二分法

数值分析实验二分法

2020-10-21 来源:飒榕旅游知识分享网


石家庄经济学院

实验报告

(学 院)系: 信息工程学院 专 业: 计算机科学与技术 姓 名: 000 班 级: 计科二班 学 号: 5111091111112 任课教师: 00

《数值分析》实验报告 姓名 实验室 实验题目 152机房 学号 51110903 日期 设备编号 用二分法求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.73205566406250 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,同时这次试验也让我对用二分法和牛顿法解决数学问题有了更深一步的了解。 四 教师评语

因篇幅问题不能全部显示,请点此查看更多更全内容