今天继续讨论f(x)=0的解法,这次介绍的是割线法secant。
【问题描述】
已知f(x)=0,求使等式成立的x的值
【解法如下】
取与解相近的两个解x_1和x_2
进行迭代
x_3=x_2-f(x_2) \frac{x_2-x_1}{f(x_2)-f(x_1)}
x_4=x_3-f(x_3) \frac{x_3-x_2}{f(x_3)-f(x_2)}
...
x_n=x_n-1-f(x_{n-1}) \frac{x_{n-1}-x_{n-2}}{f(x_{n-1})-f(x_{n-2})}
【示例】
求解 f(x)=e^{-x}-x=0
求解代码如下:
#include <math.h>
#include <stdio.h>
double f(double x)
{
return exp(-x)-x;
}
int main()
{
double x1=0;
double x2=1;
double x = x2;
while (fabs(f(x)) > 1e-6) {
x = x2 - f(x2)*(x2-x1)/(f(x2)-f(x1));
x1 = x2;
x2 = x;
}
printf("solution for function exp(-x)-x=0 is %lf\n", x);
return 0;
}
求解结果如下
【原理】
具体可参考
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。