非线性方程求根—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)是可变的,是不是每次都要人工求出函数的导函数啊?
嗯,我想说这里写的代码好好看。
现在,照着写代码不会有低级错误了,嗯不会出现开始那样运行不出来的状况了。接下来应该接着写算法吗?怎么进入下一步?
真的想要坚持做这件事情。成为专业程序员肯定是想都不敢想的,只求能当成很好的工具应用在本专业。坚持。

浙公网安备 33010602011771号