关于牛顿法,参见:喂鸡百科

以下是我的程序。不连续的、定义域不是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;
}