加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

遗传算法解非线性方程组

(2011-04-18 16:06:04)
标签:

遗传算法

分类: matlab及数值计算

 

 1.使用fsolve法,matlab内置的用于求解非线性方程组的数值法,即通过迭代不断地逼近真实值。该方法需要制定迭代的初始值。

     function F=f(var)
          m=0.234; n=0.32;  p=0.42;
       F=[var(1)+var(2)+p/n*var(2)*var(3)+var(1)*var(3)-m;
          n/m*var(1)+var(3)+n/m*var(1)*var(2)+p/m*var(2)*var(3)-n;
          p/m*var(2)+p/n*var(3)+p/m*var(1)*var(2)+p/m*var(2)*var(3)-p;
       ];

     end

    [x fval] = fsolve(@diedai,[0.2 0.1 0.5],optimset('Display','iter'));%显示每次迭代的值

  optimset函数:matlab函数库,用于设置参数及其取值

      

2.遗传算法可以用于求解优化问题,包括无约束的和有约束的,因此可以将它应用到方程组的求解问题,也可以是非线性方程组。用这种方法求解的关键是构造出目标函数,这是优化问题求解的基本点,可以简单地将各个函数的平方和作为目标函数,求其最小值即可,这样就转化成了一个最优化问题,

   function G=ga_equation_group(var)

     f1=1/(1+(var(1)-var(2)).^2)+sin(pi*var(2)*var(3)/2)+...
         exp(-((var(1)+var(3))/var(2)-2).^2);
     f2=21.5+var(1)*sin(4*pi*var(1))+var(2)*sin(20*pi*var(2))-var(3);
     f3=var(1)+2.0*var(2)+var(3)-24.0; 
     G=f1.^2+f2.^2+f3.^2;%构造目标函数
   end

      options=gaoptimset('PopulationSize',500,'Generations',1000,'StallGenLimit',1000,'TolFun',1e-100);%设置遗传算法中的一些参数

      [v fval]=ga(@ga_equation_group,3,options); %调用遗传算法

   此方法可以获得较快时间和较高的精度。

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有