用牛顿迭代法求方程的根——C语言实现

原理

参考链接牛顿法——知乎。比如说我想求一个函数 f ( x ) = 0 f(x)=0 f(x)=0的解,利用牛顿迭代法的话可以如下构造:
x n + 1 = x n − f ( x n ) f ′ ( x n ) x_{n+1}=x_n-\frac{f(x_n)}{f'(x_n)} xn+1=xnf(xn)f(xn)

代码

下面时C语言实现代码

#include 
#include 
#include 
#define N 200                                                               //最大迭代次数
#define EPS 0.000001                                                        //收敛误差
double newton(double (*fun)(double), double (*partialfun)(double), double); //牛顿迭代法,包括两个函数指针
double fun(double x);                                                       //原函数
double partialfun(double x);                                                //导函数
int main(int argc, char* argv[])
{
     
    double x0, root;
    x0   = 1;
    root = newton(fun, partialfun, x0);
    printf("迭代初值:%lf\n根:%lf\n", x0, root);
    return 0;
}
double fun(double x) //原函数
{
     
    return cos(x) - x * x * x;
}
double partialfun(double x) //原函数的导数
{
     
    return -sin(x) - 3 * x * x;
}
double newton(double (*fun)(double), double (*partialfun)(double), double xn)
{
     
    double xn1;
    for (int i = 0; i < N; i++) {
     
        xn1 = -(*fun)(xn) / (*partialfun)(xn) + xn;
        if (fabs(xn1 - xn) < EPS) {
     
            printf("迭代次数:%d\n", i+1);
            return xn1;
        }
        xn = xn1;
    }
    printf("迭代发散!");
    exit(0);
}

运行结果

用牛顿迭代法求方程的根——C语言实现_第1张图片

你可能感兴趣的:(数值分析,c语言,算法)