您的位置:首页 > 编程语言 > C语言/C++

牛顿迭代法 一元非线性方程求根 C语言实现

2017-12-12 20:45 501 查看

牛顿迭代法 一元非线性方程求根 C语言实现

标签:计算方法实验

/*
本实验用牛顿迭代法求f(x) = x - e^(-x) = 0在区间[0, 1]的根。
*/
#include <stdio.h>
#include <math.h>

#define maxrept 1000  //最大迭代次数

double f(double x){  //函数f(x)
return (x - exp(-x));
}

double df(double x){  //f(x)的导数
return (1 + exp(-x));
}

double iterate(double x){  //牛顿迭代函数
return (x - f(x) / df(x));
}

int main(){
double x1, d;
double x0 = 0.5;  //迭代初值x0
double eps = 0.00001;  //求解精度eps
int k = 0;  //迭代次数

do{
k++;
x1 = iterate(x0);
printf("%d    %f\n", k, x1);
d = fabs(x1 - x0);
x0 = x1;
}while(d >= eps && k < maxrept);

if(k < maxrept)  printf("the root of f(x) = 0 is : x = %f, k = %d\n", x1, k);
else  printf("\nthe iteration is failed!\n");

return 0;
}


实验结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息