-
. z.
本科实验报告
课程名称:计算机数值方法01);//当不满足精度要求时继续执行循环体
printf("根为:%f\n",*);//跳出循环说明满足精度要求则*可近似作为方程根
return 0;
}
〔2〕二分法:
#include<>
#include<>
#define esp 1e-3 //精度
double f(double *) //原函数
{
return (*****+4****-10);
}
double root(double (*fun)(double),double left,double right,double deviation)//用二分法求方程根
{ //其中形参*fun为指向原函数的指针
double *,y;
while(fabs(right-left)>deviation)//当不满足精度要求继续执行循环体
{
-
. z.
*=(right+left)/2; //求出中点的横坐标
y=fun(*); //计算中点的函数值
if(y==0)return *; //如果中点函数值等于0则中点即为所求根
if(y>0)right=*; //假设中点函数值大于0则令其为区间右终点值
else left=*; //否则令其为左端点值
}
return(right+left)/2; //以中点值作为最终近似值
}
int main()
{ double a,b;
printf("请输入区间左右端点值:\n");
scanf("%lf%lf",&a,&b);
printf("近似根为%lf\n",root(f,1,2,esp));
return 0;
}
〔3〕牛顿迭代法:
#include<>
#include<>
double f1(double *) //原函数
{
return *****+4****-10;
}
double f2(double *) //导函数
{
return 3****+8**;
}
double newton(double *0,double e)
{
double *1;
do{
*1=*0; //按牛顿迭代公式*n+1=*n-(f1(*n)/f2(*n))求解
*0=*1-f1(*1)/f2(*1);
}while(fabs(*0-*1)>e); //当不满足精度要求时继续执行循环体
return *0; //满足精度要求时返回*n+1的值
}
int main()
{
double *0=;//初始近似值
double e=pow(10,-3); //精度
printf("初始近似值为:%lf\n",*0);
printf("近似根为:%lf\n",newton(*0,e));
return 0;
}
-
. z.
〔4〕双点割线法:
# include <>
# include <>
#define esp 10e-3 //精度
double f(double *) //原函数
{
return(*****+4****-10);
}
double fun(double *0,double *1) //双点割线法求近似根
{
太原理工大学计算机数值方法实验报告 来自淘豆网m.daumloan.com转载请标明出处.