数值计算讨论组

Would you like to react to this message? Create an account in a few clicks or log in to continue.
数值计算讨论组

欢迎来到数值计算讨论组。 本论坛旨在增强师生交流的时效性,主要讨论数值计算相关问题,包括初等数值分析、矩阵计算、非线性方程(组)数值解法、微分方程数值解法等方面的内容。


    [非]Newton切线法算例

    avatar
    Admin
    Admin


    帖子数 : 46
    注册日期 : 10-05-13

    [非]Newton切线法算例 Empty [非]Newton切线法算例

    帖子 由 Admin 周六 五月 15, 2010 3:47 pm

    /* 实验二 非线性方程实根的简单迭代法与牛顿切线法
    一、目的与要求:掌握解非线性方程实根的简单迭代法与牛顿切线法的上机编程运算.
    二、实验内容
    问题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);
    }

      目前的日期/时间是周二 五月 14, 2024 10:43 am