📄 1.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 + -