太原理工大学计算机数值方法实验报告
本科实验报告 课程名称: 计算机数值方法 实验地点: 专业班级: 学号: 学生姓名: 指导教师: 成 绩: 年 月 日 太原理工大学学生实验报告 学院名称 计算机科学与技术学院 专业班级 学号 学生姓名 实验日期 成绩 课程名称 计算机数值方法 实验题目 实验一 方程求根 1、 实验目的和要求: (1)实验目的: 熟悉使用二分法、迭代法、牛顿法、割线法等方法对给定的方程进行根的求解。求方程:f(x)=x*x*x+4*x*x-10=0在[1,2]内的一个实根,且要求满足精度|x*-xn|0) /*如果fun(x)和fun(x+h)同号则使X加h并跳出本次循环执行下一次*/ {x=x+h;continue;} else if(fun(x)*fun(x+h)0.001);//当不满足精度要求时继续执行循环体 printf(“根为:%f\n“,x);//跳出循环说明满足精度要求则x可近似作为方程根 return 0; } (2)二分法: #include #include #define esp 1e-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==0)return x; //如果中点函数值等于0则中点即为所求根 if(y>0)right=x; //若中点函数值大于0则令其为区间右终点值 else left=x; //否则令其为左端点值 } return(right+left)/2; //以中点值作为最终近似值 } int main() { double a,b; printf(“请输入区间左右端点值:\n“); scanf(“%lf%lf“, printf(“近似根为%lf\n“,root(f,1,2,esp)); return 0; } (3)牛顿迭代法: #include #include double f1(double x) //原函数 { return x*x*x+4*x*x-10; } double f2(double x) //导函数 { return 3*x*x+8*x; } double newton(double x0,double e) { double x1;