欢迎来到天天文库
浏览记录
ID:37966080
大小:48.76 KB
页数:7页
时间:2019-06-04
《0043算法笔记——【随机化算法】解非线性方程组》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、问题描述 求解下面的非线性方程组 其中,x1,x2,…,xn是实变量,fi是未知量x1,x2,…,xn的非线性实函数。要求确定上述方程组在指定求根范围内的一组解。 问题分析 解决这类问题有多种数值方法,如:牛顿法、拟牛顿法、粒子群算法等。最常用的有线性化方法和求函数极小值方法。为了求解所给的非线性方程组,构造一目标函数 式中,x=(x1,x2,……xn)。易知,上式取得极小值点即是所求非线性方程组的一组解。 求解思路 在指定求根区域D内,选定一个随机点x0作为随机搜索的出发点。在算法的搜索过程中,假设第j步随机搜索得到的随机搜索点为xj。在第j+1步,计算出下一
2、步的随机搜索增量dxj。从当前点xj依dxj得到第j+1步的随机搜索点。当x<时,取为所求非线性方程组的近似解。否则进行下一步新的随机搜索过程。 题外话:笔者在读王晓东《算法设计与分析》中这一节时,发现书上所给的代码似乎有些问题。在这里指出,如果提得不对,还请大侠们拍砖。书中给出的代码具体如下:[cpp] viewplain copy1.bool nonlinear(double *x0,double *dx0, double *x,double a0, 2. double epsilon, double k,int n, int steps,int m) 3.{ 4
3、. static randomnumber rad; 5. bool success; 6. double *dx, *r; 7. dx=new double[n+1]; 8. r=new double[n+1]; 9. int mm=0; 10. int j=0; 11. double a=a0; 12. for(int i=1;i<=n;i++) 13. { 14. x[i]=x0[i]; 15. dx[i]=dx0[i]; 16. } 17. double f
4、x=f(x,n); 18. double min=fx; 19. while ((min>epsilon)&&(jm)a/=k; 3
5、1. success=false; 32. } 33. for(int i=1;i<=n;i++) 1. r[i]=2.0*rnd.fRandom()-1; 2. if(success) 3. for(int i=1;i6、 for (int i=1;iepsilon)&&(j7、 笔者发现如果此时fx
6、 for (int i=1;iepsilon)&&(j7、 笔者发现如果此时fx
7、 笔者发现如果此时fx
此文档下载收益归作者所有