数值计算讨论组

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

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


    [非]双点弦法算例

    avatar
    Admin
    Admin


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

    [非]双点弦法算例 Empty [非]双点弦法算例

    帖子 由 Admin 周六 五月 15, 2010 4:02 pm

    代码:

    /*
    实验三  非线性方程实根的正割法
     一、目的与要求:掌握解非线性方程实根的正割法的上机编程运算.
     二、实验内容
     问题1. 用正割法求x^3-0.2x^2-0.2x-1.2=0在区间 [1,1.5]内的实根(精确到1e-3).
     问题2. 用双点弦法解方程x=exp(-x)
    */

    // 用双点弦法求解 问题2中的方程x = exp(-x),不妨设f(x) = x*exp(x)-1, 设x0 = 0, x1 = 1
    // 1e-5为容许误差
    #include <iostream>
    #include <iomanip>
    #include <cmath>
    using namespace std;
    int main()
    {
       int k;
       double x,xi,xj,fxi,fxj,err;
       double f(double x);
       
       k = 0;
       xi = 0.0;
       xj = 1.0;
       err = fabs(xi - xj);
       while ( err > 0.00001 )
       {
          // 迭代序列顺序 xi,xj,x...
          fxi = f(xi);
          fxj = f(xj);
          x = xj - fxj*(xj - xi)/(fxj - fxi);
          xi = xj;
          xj = x;
          err = fabs(xi - xj);
          k++;
       }
       
       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 ( x*exp(x) - 1.0 );
    }

      目前的日期/时间是周一 十一月 25, 2024 9:42 am