📄 exp5.cpp
字号:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAXREPT 200
#define epsilon 0.000001
double f(double x)
{
return(x*x*x/3-x);
}
double m(double x)
{
return(x*x-1);
}
double g(double x)
{
return(x-f(x)/m(x));
}
void Newton(double x)
{
int i;
double xnow,xnext,error;
xnow=x;
printf("\nx0=%lf\n",x);
printf("叠代次数\t数值结果\t 数值误差\n");
for (i=1; i<MAXREPT ;i++)
{
xnext = g(xnow);
error = fabs(xnext - xnow);
printf("%4d\t%18.12f\t%14.12f\n",i,xnext,error);
if (error<epsilon)
return;
else xnow = xnext;
}
printf("%lf附近x无根\n\n",x);
return;
}
void XianJie(double x,double y)
{
int i;
double xk0,xk1,xk2,error;
xk0=x;
xk1=xk2=y;
printf("\nx0=%lf\t\nx1=%lf\n",x,y);
printf("叠代次数\t数值结果\t 数值误差\n");
for (i=1; i<MAXREPT ;i++)
{
xk2=xk1-(f(xk1)*(xk1-xk0))/(f(xk1)-f(xk0));
error = fabs(xk2-xk1);
printf("%4d\t%18.12f\t%14.12f\n",i,xk2,error);
if (error<epsilon)
return;
else
{
xk0=xk1;
xk1=xk2;
}
}
printf("无根\n\n",x);
return;
}
int main()
{
printf("牛顿叠代\n");
Newton(0.1);
Newton(0.2);
Newton(0.9);
Newton(9.0);
printf("\n弦截法\n");
XianJie(0.1,0.2);
XianJie(0.2,0.9);
XianJie(0.9,9.0);
system("pause");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -