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

📄 1.cpp

📁 非线性方程求根实验
💻 CPP
字号:
// x^2-e^x=0,在x0=1附近的根,取初值为1.0:
#include<iostream>
#include<math.h>
using namespace std;
const double epi = 1e-14;   //计算机内部的精度误差上限 
double lamda = 1.0;  //下山因子的初值 
double epi_lamda;    //下山因子的下界 
double epi_F;        //根的最大允许误差 
inline double F(double x){ return x*x-exp(x);}     //需要求根的函数 
inline double f(double x){ return 2.0*x-exp(x);}   //该函数的一阶导数 
int main()
{
	cin>>epi_lamda>>epi_F;
	//若下山因子仍不小于下界,则开始该轮的牛顿下山法迭代 
	while (lamda - epi_lamda > -epi)
	{
		double x0 = 1.0;
		double F0 = F(x0);
		double x1 = x0 - lamda * F(x0) / f(x0);
		double F1 = F(x1);
		//该迭代是满足下山调节,则往下迭代 
		while (abs(F1)-abs(F0) < -epi)
		{
			//根的精度已满足要求,则输出解 
			if (abs(F1) < epi_F)
			{
				cout<<"lamda = "<<lamda<<endl;
				cout<<"x = "<<x1<<endl;
				system("pause");
				return 0;
			}
			F0 = F1;
			x0 = x1;
			x1 = x0 - lamda * F(x0) / f(x0);
			F1 = F(x1);
		}
		lamda /= 2;  //下山因子折半 
	}
	cout<<"无解!"<<endl;
	system("pause");
	return 0;
}

⌨️ 快捷键说明

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