关于牛顿迭代法及Levenberg-Marquardt算法

来源:百度知道 编辑:UC知道 时间:2024/06/04 06:29:21
请问谁有高斯牛顿迭代法或者Levenberg-Marquardt算法的程序?万分感激啊。。。。。

/**
牛顿迭代法求方程的一个实根
牛顿公式:x(k+1) = x(k) - f(x(k)) / f '(x(k))

迭代函数:Ф(x) = x - f(x) / f'(x)

属性:方程求根迭代法

此时的迭代函数必须保证X(k)有极限,即迭代收敛。

《数值计算方法与算法》-2 Editon -科学出版社 P93
《C#数值计算算法编程》-周长发 P210

代码维护:2007.04.20 pengkuny
**/

#include<iostream>
#include<cmath>

using namespace std;

#define f(x) (x*x*(x-1.0)-1.0) //举例函数x^3-x^2-1
#define g(x) (3.0*x*x-2.0*x) //导函数3x^2-2x
#define epsilon 0.0000001 //精度
#define MAXREAPT 100

bool RootNewton(double &x)
{
double xk1,xk0;

xk0 = x;
for (int k=0; k<MAXREAPT; k++)
{
if (g(xk0) == 0.0)//牛顿迭代法缺陷在于:收敛是否与初值x0密切相关
{//如果g(xk0)数值特别小时,有可能发生从一个根跳到另一个根附近的情况
cout<<"迭代过程中导数为0."<<endl;
return false;
}

xk1 = xk0 - f(xk0)/g(xk0);//key ste