把线性方程组的各个方程的平方相加成一新的函数,从而转化为求此新函数的最小值。
方法在指定求根区域D内,选定一个随机点x0作为随机搜索的出发点。在
算法的搜索过程中,假设第j步随机搜索得 到的随机搜索点为xj。在第j+1步,首先计算出下一步的随机搜索方向r;然后计算搜索步长a。由此得到第j+1步的随机搜索增量Δxj。从当前点xj依Δxj得到第j+1步的随机搜索点。当Ф(xj+1)<ε时,取为所求非线性方程组的近似解。否则进行下一步新的随机搜索过程。
下面是一部分代码,哪位可以补充完整啊,非常急用?(计算机算法与设计 王晓东 书上的)谢谢
bool nonlinear(double *x0,double *dx0, double *x,double a0,
double epsilon, double k,int n, int steps,int m)
{ static randomnumber rad;
bool success;
double *dx, *r;
dx=new double[n+1];
r=new double[n+1];
int mm=0;
int j=0;
double a=a0;
for(int i=1;i<=n;i++)
{x[i]=x0[i];
dx[i]=dx0[i];
}
double fx=f(x,n);
double min=fx;
while ((min>epsilon)&&(j<steps))
{
if(fx<min)
{min=fx;
a*=k;
success=true;
}
else{mm++;
if (mm>m)a/=k;
success=false;}
for(int i=1;i<=n;i++)r[i]=2.0*rnd.fRandom()-1;
if(success)
for(int i=1;i<n;i++)dx[i]=a*r[i];
else
for (int i=1;i<n;i++)dx[i]=a*r[i]-dx[i];
for (int i=1;i<n;i++)x[i]+=dx[i];
fx=f(x,n);
}
if(fx<=epsilon)return ture;
else ruturn false;
}