⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 牛顿下山法.cpp

📁 这是计算方法上的所有算法
💻 CPP
字号:
#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>
#define Et 1e-3 //下山因子下界
#define E1 1e-3 //根的误差限
#define E2 1e-6 //残量精度
double f(double x)
{
	return x*x*x-x-1;
}
double f1(double x)
{
	return 3*x*x-1;
}
void errormess(int b)
{  
  char *mess;
  switch(b)
	{
	case
		-1:mess="f(xi)的导数的为零";
		break;
    case
		-2:mess="下山因子已越界,下山处理失败";
		break;
    default :
		mess="其它类型错误!";
	}
	printf("the method has failed !because %s",mess);
}

int Newton (double &x0)
{
	double x1;
	double t;
	int flag=1;
	int count=0;
	x1=x0;t=0;// 
	printf("k              t                 		xk              f(xk)\n");
	printf("%d         %f          %f          %f",count,t,x1,f(x1));
	do
	{
		x0=x1;
		t=2.0;
		count++;
		do
		{
			
			printf("\n");
			t=t/2.0;
			if(fabs(f(x1))<E2)
				break;
			if(t<Et)
				flag=-2;
			if(f1(x1)!=0)
			x1=x0-t*f(x0)/f1(x0);
				else flag=-1;
			printf("%d         %f          %f          %f",count,t,x1,f(x1));
	}while(fabs(f(x0))<=fabs(f(x1))&&flag==1);
		printf("    下山成功");
	}while(fabs(x0-x1)>=E1&&flag==1&&fabs(f(x1))>=E2);
	x0=x1;
	return flag;
}
void main()
{
	int b;
	double x0=0.6;
    b=Newton(x0);
	if(b==1)
		printf("\nThe root of it x=%f\n",x0);
	else errormess(b);
}

 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -