非线性方程求根—newton迭代法

以后在这里记下写的代码了。祝我以坚持。

牛顿迭代法求非线性方程的根,迭代很简单:xn+1=xn-f(xn)/f'(xn),实现代码也很简单,如下:

#include <stdio.h>
#include<math.h>
#include<windows.h>
double f(double x);
double df(double x);
void main(void)
{
    double epsilon, x0, x1, fx0, dfx0;
    int i, imax;
    printf("请输入x的精度要求:\n");
    scanf_s("%lf", &epsilon);
    printf("请输入初始值x1,最大迭代次数imax:\n");
    scanf_s("%lf,%ld", &x1, &imax);
    for (i = 0; i <imax; i++)
    {
        x0 = x1;
        fx0 = f(x0);
        dfx0 = df(x0);
        x1 = x0 - fx0 / dfx0;
        if (fabs(x1 - x0) <= epsilon)
            break;
    }
    if (i < imax)
        printf("%lf", x1);
    else
        printf("迭代次数超过上限\n");
    system("pause");
}
double f(double x)
{
    return(2 * pow(x, 3.0) - 9 * x - 25);
}
double df(double x)
{
    return(6 * pow(x, 2.0) - 9);
}

f(x)是可变的,是不是每次都要人工求出函数的导函数啊?

嗯,我想说这里写的代码好好看。

现在,照着写代码不会有低级错误了,嗯不会出现开始那样运行不出来的状况了。接下来应该接着写算法吗?怎么进入下一步?

真的想要坚持做这件事情。成为专业程序员肯定是想都不敢想的,只求能当成很好的工具应用在本专业。坚持。

posted @ 2015-08-23 18:16  scian102  阅读(614)  评论(1)    收藏  举报