割线法 c++

来源:百度知道 编辑:UC知道 时间:2024/06/20 21:35:30
求助一个用C++编的割线法求根的程序
x3 − 3x − 1 = 0
x0 = 附近的根x0 = 2,x1 = 1.9精度10−4迭代次数N = 10"

#include<stdio.h>
#include<math.h>
double X=-1,Y=3;
void main()
{char a;
double f1 (double x1,double x2);
double f2 (double x1,double x2);
printf("割线递归法求根\n\n1.求方程一在区间[-1,3]上的根.\n2.求方程二在区间[-1,3]上的根.\n输入选项:");
a=getchar();
switch(a)
{case'1':printf("\n方程1在区间[-1,3]上的根为%f\n\n",f1(X,Y));break;
case'2':printf("\n方程2在区间[-1,3]上的根为%f\n\n",f2(X,Y));
}}
double f1 (double x1,double x2)/*割线递归法求根*/
{double y1,y2,x0,y0;
y1=2*x1*x1*x1-4*x1*x1+3*x1-6;
y2=2*x2*x2*x2-4*x2*x2+3*x2-6;
x0=(0-y1)*(x1-x2)/(y1-y2)+x1;
y0=2*x0*x0*x0-4*x0*x0+3*x0-6;
if(fabs(y0)<1e-5) return x0;
else x1=x0;return f1(x1,x2);
}
double f2 (double x1,double x2)/*割线递归法求根*/
{double y1,y2,x0,y0;
y1=x1*x1*x1-8*x1-2;
y2=x2*x2*x2-8*x2-2;
x0=(0-y1)*(x1-x2)/(y1-y2)+x1;
y0=x0*x0*x