fsolve是采用最小二乘法来求解非线性方程.docVIP

  • 76
  • 0
  • 约1.98万字
  • 约 18页
  • 2017-06-20 发布于湖北
  • 举报

fsolve是采用最小二乘法来求解非线性方程.doc

fsolve是采用最小二乘法来求解非线性方程

fsolve是采用最小二乘法来求解非线性方程。它的一般求解方式为: X=FSOLVE(FUN,X0,OPTIONS) 其中,fun是要求解的非线性方程,X0是变量初值,options由optimset函数产生的结构体,用于对优化参数的设置,可以省略(采用默认值)。 Fsolve可以求解简单的一维非线性方程,如: x = fsolve(@myfun,[0.5 2 4],optimset(Display,iter)); %求解在初值分别为0.5,2和4时方程的解 其中,函数myfun的定义为: function F = myfun(x) F = sin(x); Fsolve还可以求解大型的非线性方程组,如 x0 = [51.6;rand;unifrnd(-1,1);rand]; h=optimset; h.MaxFunEvals=20000; h.MaxIter=5000; h.Display=off; [p,fval] = fsolve(@f,x0,options); 此时,方程组可以写成矩阵形式: function F=f(x) F=[x(1)+x(2)*(1-exp(-(x(3)*(0)^x(4))))-51.61; x(1)+x(2)*(1-exp(-(x(3)*(9.78)^x(4))))-51.91; x(1)+x(2)*(1-exp(-(x(3)*(30.68)^x(4))))-53.27; x(1)+x(2)*(1-exp(-(x(3)*(59.7)^x(4))))-59.68;]; /xianfa110 最近在做Gauss积分的推广程序,推广为S(x)=x^(1/3),并精确满足1,x,S(x),x^2*S(x),...的情况。 所以在节点和系数选择方面,要解决2N个非线性的方程组。 例如:当N=3 function y=myfun2(x) ?? ?? y(1)=x(1)+x(2)+x(3)-1; ?? y(2)=x(1)*T(x(4),0,1)+x(2)*T(x(5),0,1)+x(3)*T(x(6),0,1)-0.749994524232305; ?? y(3)=x(1)*T(x(4),1,0)+x(2)*T(x(5),1,0)+x(3)*T(x(6),1,0)-0.5; ?? y(4)=x(1)*T(x(4),1,1)+x(2)*T(x(5),1,1)+x(3)*T(x(6),1,1)-0.428572192455729; ?? y(5)=x(1)*T(x(4),2,0)+x(2)*T(x(5),2,0)+x(3)*T(x(6),2,0)-0.333333333333333; ?? y(6)=x(1)*T(x(4),2,1)+x(2)*T(x(5),2,1)+x(3)*T(x(6),2,1)-0.299999198825548; 这里T已经先定义了。 在用 [x,f,e,o]=fsolve(@myfun2,[a,b,c,d,e,f,g],op)求解时很关键的问题是迭代法的初值如何选定。 就是确定一个合适的a,b,c,d,e,f,g使得方程组收敛到最优的一个解。 当时一直想不到一个很好的解决办法。毕竟初值的选定需要一个实际的背景和多次的尝试。 今天看到《不确定规划及应用》时,遗传算法感觉上对于寻找全局最优有很大的作用,因为本身就是一个很适合做全局优化的算法,求得的是一个接近最优解的满意解,正好可以用作初值。 我把上面的方程组改成一个非线性的优化,用二-赋范度量 function s=myfun1(x) ?? ?? y(1)=x(1)+x(2)+x(3)-1; ?? y(2)=x(1)*T(x(4),0,1)+x(2)*T(x(5),0,1)+x(3)*T(x(6),0,1)-0.749994524232305; ?? y(3)=x(1)*T(x(4),1,0)+x(2)*T(x(5),1,0)+x(3)*T(x(6),1,0)-0.5; ?? y(4)=x(1)*T(x(4),1,1)+x(2)*T(x(5),1,1)+x(3)*T(x(6),1,1)-0.428572192455729; ?? y(5)=x(1)*T(x(4),2,0)+x(2)*T(x(5),2,0)+x(3)*T(x(6),2,0)-0.333333333333333; ?? y(6)=x(1)*T(x(4),2,1)+x(2)*T(x(5),2,1)+x(3)*T(x(6),2,1)-0.299999198825548; ?? s=(y(1)^2+y(2)^2+y(3)^2+y(4)^2+y(5)^2+y(6)^2)^(1/2); 只要求得s的最小值即可(最小二乘原则) 遗传算法: [x,f,e]=ga(@myfun1,6)

文档评论(0)

1亿VIP精品文档

相关文档