牛顿法解方程
关于牛顿法,参见:喂鸡百科
以下是我的程序。不连续的、定义域不是R的函数不能解。简单的高次方程还是可以对付的。
#include <cstdio>
#include <cmath>
using namespace std;
//示例函数
long double exfunc (const long double a)
{
return a*a - 100;
}
//求函数func在x处的导数
inline long double EQ_Detivative (long double(*func)(const long double),
const long double x)
{
long double off = x / 10000.0;
return (func(x + off) - func(x - off)) / (2.0 * off);
}
//解方程
long double EQ_Solve (long double(*func)(const long double),
long double x, const long double off)
{
long double k, y = func(x);
while (abs(y) > off)
{
k = EQ_Detivative(func, x);
x = x - (y / k);
y = func(x);
}
return x;
}
int main ()
{
//解方程exfunc(x)=0, 搜索起始点x=0.01, 精确度0.001
printf("%Lf\n", EQ_Solve(exfunc, 0.01, 0.001));
return 0;
}