粒子群算法求解方程组
我们之前介绍了三种求解方程组的函数分别为solve,vpaslove,fsolve;这三种函数对初值的要求非常高,当遇到非常复杂的方程组,我们又没能给定一个好的初值时,这三种函数的求解算法可能找不到解。这时我们可以考虑用粒子群算法求解方程组
一、方程组的一般形式
二、定义目标函数
显然,我们要找到一组x1,x2,……xn使得目标函数尽可能小。理想状态下,目标函数等于0时,就找到了这个方程组的解
三、一个具体的实例
1.代码实现
(1)定义函数
function f = Obj_fun(x)
f1= abs(x(1)+x(2))-abs(x(3)) ;
f2 = x(1) * x(2) * x(3) + 18;
f3= x(1)^2 * x(2) + 3*x(3);
f = abs(f1) + abs(f2) + abs(f3);
end
(2)调用粒子群算法求解
narvs = 3;
% 使用粒子群算法,不需要指定初始值,只需要给定一个搜索的范围
lb = -10*ones(1,3); ub = 10*ones(1,3);
options = optimoptions('particleswarm','FunctionTolerance',1e-12,'MaxStallIterations',100,'MaxIterations',20000,'SwarmSize',100);
[x, fval] = particleswarm(@Obj_fun,narvs,lb,ub,options)