/* 实验二 非线性方程实根的简单迭代法与牛顿切线法
一、目的与要求:掌握解非线性方程实根的简单迭代法与牛顿切线法的上机编程运算.
二、实验内容
问题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附近的一个根
*/
// 牛顿切线法-问题7
// 问题7中的记f(x)=x^3-x-1,Newton切线法迭代公式为x(k+1) = x(k) - f(x(k))/f'(x(k))
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
int main()
{
int k;
double x,xk,err;
double f(double x);
double df(double x);
k = 0;
x = 1.5;
err = 1.0;
while (err >= 0.000001)
{
xk = x - f(x)/df(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 (pow(x,3) - x - 1);
}
double df(double x)
{
return (3.0*pow(x,2) - 1);
}
一、目的与要求:掌握解非线性方程实根的简单迭代法与牛顿切线法的上机编程运算.
二、实验内容
问题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附近的一个根
*/
// 牛顿切线法-问题7
// 问题7中的记f(x)=x^3-x-1,Newton切线法迭代公式为x(k+1) = x(k) - f(x(k))/f'(x(k))
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
int main()
{
int k;
double x,xk,err;
double f(double x);
double df(double x);
k = 0;
x = 1.5;
err = 1.0;
while (err >= 0.000001)
{
xk = x - f(x)/df(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 (pow(x,3) - x - 1);
}
double df(double x)
{
return (3.0*pow(x,2) - 1);
}