/* 实验二 非线性方程实根的简单迭代法与牛顿切线法
一、目的与要求:掌握解非线性方程实根的简单迭代法与牛顿切线法的上机编程运算.
二、实验内容
问题1.用迭代法求方程x^5-x-0.5=0的正根,精确到1e-5 .
问题2. 求方程x^3-x-1=0在x=1.5附近的一个根.
问题3. 求方程x^3-2^x-5=0的最小正根.
问题4. 求方程2^x-lgx=7的最大根.
问题5. 对方程x*exp(x)-1=0构造收敛的简单迭代格式求其根,要求精度1e-6.
问题6. 用牛顿切线法求x=exp(-x)在x=0.5附近的根.
问题7.用牛顿切线法求方程x^3-x-1=0在x=1.5附近的一个根
*/
// 简单迭代法-问题5
// 问题5中的x*exp(x)-1在[0,+infinite)单调增,且在[0,1]区间的两个端点处函数值异号,故方程必在(0,1)内有根,
// 使用简单迭代法求解的话,只需要构造与原方程等价的新方程and确定初始点即可。考虑到简单迭代法的收敛条件,新方程可为:exp(-x)=x,初始点选择0.
// 此处可以验证新方程f(x)=exp(-x)属于[0,1],当x属于[0,1]时
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
int main()
{
int k;
double x,xk,err;
double f(double x);
k = 0;
x = 0.0;
err = 1.0;
while (err >= 0.000001)
{
xk = f(x);
err = fabs(xk - x);
x = xk;
k = k + 1;
}
cout << "K-th iteration: " << k << endl; // 迭代次数
cout << "err= " << setprecision(12) << err << endl; // 迭代序列最后两项之间的差
cout << "x= " << setprecision(12) << x << endl; // 方程的解
cout << "f(x)= " << setprecision(12) << f(x) << endl; // 方程中的函数f(x)在解x点的值
return 0;
}
double f(double x)
{
return (exp(-x));
}
一、目的与要求:掌握解非线性方程实根的简单迭代法与牛顿切线法的上机编程运算.
二、实验内容
问题1.用迭代法求方程x^5-x-0.5=0的正根,精确到1e-5 .
问题2. 求方程x^3-x-1=0在x=1.5附近的一个根.
问题3. 求方程x^3-2^x-5=0的最小正根.
问题4. 求方程2^x-lgx=7的最大根.
问题5. 对方程x*exp(x)-1=0构造收敛的简单迭代格式求其根,要求精度1e-6.
问题6. 用牛顿切线法求x=exp(-x)在x=0.5附近的根.
问题7.用牛顿切线法求方程x^3-x-1=0在x=1.5附近的一个根
*/
// 简单迭代法-问题5
// 问题5中的x*exp(x)-1在[0,+infinite)单调增,且在[0,1]区间的两个端点处函数值异号,故方程必在(0,1)内有根,
// 使用简单迭代法求解的话,只需要构造与原方程等价的新方程and确定初始点即可。考虑到简单迭代法的收敛条件,新方程可为:exp(-x)=x,初始点选择0.
// 此处可以验证新方程f(x)=exp(-x)属于[0,1],当x属于[0,1]时
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
int main()
{
int k;
double x,xk,err;
double f(double x);
k = 0;
x = 0.0;
err = 1.0;
while (err >= 0.000001)
{
xk = f(x);
err = fabs(xk - x);
x = xk;
k = k + 1;
}
cout << "K-th iteration: " << k << endl; // 迭代次数
cout << "err= " << setprecision(12) << err << endl; // 迭代序列最后两项之间的差
cout << "x= " << setprecision(12) << x << endl; // 方程的解
cout << "f(x)= " << setprecision(12) << f(x) << endl; // 方程中的函数f(x)在解x点的值
return 0;
}
double f(double x)
{
return (exp(-x));
}