main.cpp

来自「研究生期间上《数值计算方法》课的作业」· C++ 代码 · 共 90 行

CPP
90
字号
#include <iostream>
#include <stdlib.h>
#include <math.h>
#define Nmax 100

using namespace std;

float F(double a)
{
    return pow(10.0,a)-2;
}

float F1(float a)
{
    return log10(a+2);
}

float Fn(float a)
{
    return a - (a-pow(10.0,(double)a) + 2)/(1-2.302585*pow(10,a));
}

int main(int argc, char *argv[])
{
    //X -10^X +2 = 0 => Xn = 10^Xn-1 -2
    int a = 0,b = 1;
    float e = 0.0001;
    float X0 = 0.5;
    float X ;
    
    for(int i=0; i<Nmax; i++)
    {
        X = F1(X0);
        if(fabs(X-X0)<e)
        {
            printf("方程的正根为:%5f\n",X);
            break;
        }
        X0 = X;
        if(i==Nmax-1) 
            printf("迭代不收敛!\n");
    }
    
    X0 = -1.0;
    for(int i=0; i<Nmax; i++)
    {
        X = F(X0);
        if(fabs(X-X0)<e)
        {
            printf("方程的负根为:%5f\n",X);
            break;
        }
        X0 = X;
        if(i==Nmax-1) 
            printf("迭代不收敛!\n");
    }
    
    printf("Newton--------------------------\n");
    X0 = 0.5;
    for(int i=0; i<Nmax; i++)
    {
        X = Fn(X0);
        if(fabs(X-X0)<e)
        {
            printf("方程的负根为:%5f\n",X);
            break;
        }
        X0 = X;
        if(i==Nmax-1) 
            printf("迭代不收敛!\n");
    }
    
    X0 = -1.0;
    for(int i=0; i<Nmax; i++)
    {
        X = Fn(X0);
        if(fabs(X-X0)<e)
        {
            printf("方程的负根为:%5f\n",X);
            break;
        }
        X0 = X;
        if(i==Nmax-1) 
            printf("迭代不收敛!\n");
    }
    
    system("PAUSE");	
    return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?