太原理工大学计算机数值方法实验报告
(36页)
本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!
19.9 积分
本科实验报告课程名称: 计算机数值方法 实验地点: 专业班级:_学号:学生姓名: 指导教师: 成 绩: 年 月曰太原理工大学学生实验报告学院名称计算机科学与技术学院专业班级学号学生姓名实验日期成绩课程名称计算机数值方法实验题目实验一方程求根、实验目的和要求:(1) 实验目的: 熟悉使用二分法、迭代法、牛顿法、割线法等方法对给定的方程 进彳亍根的求解。求方程:f(x)二x*x*x+4*x*x?10=0在[1,2]内的一个实根,且要求满足精度 |x -xn|<0.001(2) 实验要求:1.应用C,C++或JAVA编出通用程序,源程序要有详细的注释和说明;2?比较计算结果,对不同方法进行比较分析;3.实验完成,提交实验结果并写出报告,分析计算结果是否符合问题的耍求,找出计 算成功的原因或计算失败的教训。二、 实验内容和原理:(1) 增值寻根法:基本思想为:从初始值xO开始,按规定的一个初始步长h來增 值。令x (n+1) =x (n) +h,(n=0,l,2...),同时计算f (x (n+1)).在增值过程屮会遇到三种 情况:1. f (x(n+l)) =0,此时x(n+l)即为方程根。2. f (x(n))和f (x (n+1))同号,说明区间内无根。3. f (x(n))和f (x (n+1))同号,说明区间内冇根,则把步长缩小,直至满足精度要求为 止,x(n)或x(n+l)就是满足精度的近似根。(2) 二分法:基本思想为:设f(x)在[a,b]内连续,.ft f(a)*f(b)<0,则方程f(x)=O在(a,b) 内有实根x*.然后逐步对分区间[a,b],通过判断两端点函数值乘积的符号,进一步缩小有 根区间从而求出满足精度要求的近似值。(3) 牛顿迭代法:基本思想为给定一个初始值由牛顿法的迭代公式: x(n+1 )=x(n)-f(x(n))/f9(x(n)) (n=0,1,2...)逐步求出 x (n),直至(x (n+1) -x(n))的绝对值小 于给定精度,则x (n+1)即可作为近似值。(4) 双点割线法:由给出的两个初始近似值,再根据双点割线法迭代公式: x(n+1 )=x(n)-(f(x(n))/(f(x(n))-f(x(n-1))) *(x(n)-x(n-1 )),(n= 1,2,3...)逐 步求出 x ( n ),直至 x(n+l)-x(n)的绝对值满足精度,则x (n+1)即口J作为近似值。(5) 单点割线法:由给出的两个初始近似值,再根据双点割线法迭代公式: x(n+l)=x(n)-(f(x(n))/(f(x(n))-f(x(0)))*(x(n)-x(0)),(n=l,2,3...)逐步求岀 x (n),直至 x(n+l)-x(n) 的绝对值满足精度,则x (n+1)即可作为近似值。三、 主要仪器设备:笔记本电脑四、操作方法:源代码:(1) 增值寻根法:# includedouble fun(double x){ 〃原函数retum(x*x*x+4*x*xJ0);//求解方程 f(x)=x*x*x+4*x*x?10=0 的根,精度为 10-3.}int main(){double a=1.25,h=l,x=a;printff初始近似值为:%lf\n”,a);do{if(fun(x)==O){printf(H根为:%f\x);return 0;} /*如果初始值函数值为0,则初始 值即为根勺else if(fun(x)*fun(x-t-h)>0) /*如果 fun(x)和 fun(x+h)同号则使 X 加 h 并跳岀本次循环执行下一次勺{x=x+h;continue;}else if(fun(x)*fun(x+h)vO) 〃若异号则说明在X和X+h Z间存在函数根,则缩〃短步长继续寻根{h=h/10.0;}}while(h>0.001);//当不满足精度要求吋继续执行循环体printfC根为:%i\n”,x);〃跳出循环说明满足精度耍求则x可近似作为方程根return 0;}(2) 二分法:#include# include#define esp le-3 〃精度double f(double x) 〃原函数{return (x*x*x+4*x*x?10);}double root(double (*fun)(double),double left,double right,double deviation)//用二分法求 方程根{〃其中形参*fun为指向原函数的指针double x,y;while(fabs(right-left)>deviation)//当不满足精度要求继续执行循环体{x=(right+left)/2; 〃求出屮点的横坐标y=fun(x); 〃计算中点的函数值if(y==O)retum x; 〃如果中点函数值等于0则中点即为所求根if(y>O)right=x; 〃若屮点函数值大于0则令其为区间右终点值 else left二x; 〃否则令其为左端点值}return(right+left)/2; 〃以中点值作为最终近似值 } int main(){ double a,b;printf("请输入区间左右端点值:\n*'); scanfT%lf%f,&a,&b);printf(”近似根为 %lf\nH,root(f,l,2,esp)); return 0;}(3) 牛顿迭代法:# include〃原函数〃导函数# include double fl (double x) {return x*x*x+4*x*x?10;} double f2(double x){return 3*x*x+8*x;}double newton(double xO,double e) {double x 1;do{ xl=x0;x0=x 1 -fl (x 1 )/f2(x 1);〃按牛顿迭代公式Xn+l=Xn-(fl(Xn)/f2(Xn))求解}while(fabs(xO-x 1 )>e); return xO;}int main()(〃当不满足精度要求时继续执行循环体 〃满足精度要求吋返冋Xn+1的值double x0=1.5;〃初始近似值 double e=pow(10r3);〃精度pHntf(”初始近似值为:%W\n”,xO); printf("近似根为:%lf\n",newton(x0,e)); return 0;}(4) 双点割线法:# include # include #define e 关 键 词: 太原理工 大学计算机 数值 方法 实验 报告
天天文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。