粒子群算法求解非线性方程组matlab简单实现

标签:
智能算法itmatlab粒子群优化算法非线性方程组求解 |
非线性方程组的一般形式为
f 1 (x 1 , x 2 , …, x n )=0
f 2 (x 1 , x 2 , …, x n )=0
…
f m (x 1 , x 2 , …, x n )=0
式中, x 1 ...x n为所要求解的 n 个未知变量, f 1...f n 为定义在 m 维空间中的实值函数。用 PSO 求解非线性方程组时,设方程组中的未知数 x 为n 维搜索空间中的粒子Xi =(xi1 , xi2 , …, xin ), 定义粒子的适应值函数为
设 Fibest (x)表示第i 个粒子经历过的最好适应值 , Fgbest (x)表示全局经历过的最好适应值, 求解非线性方程组的过程等价于求解minF(x)的最优化问题 。PSO 求解非线性方程组的流程如下 :
Step1:输入方程组, 变量的数值范围和要求的精度
Step2:确定粒子的维数,根据 step1中的变量的范围 ,随机初始化粒子的位置和速度, 每个粒子的初始位置作为每个个体的个体极值 pbesti 。
Step3:对于第 i 个粒子,利用式计算粒子的适应值Fi (x),若其当前适应值小于它的历史最好适应值,则用当前粒子位置替换该粒子的个体极值 ,该粒子的适应值替换该粒子的最好适应值;若其当前适应值小于全局经历过的最好适应值, 则用当前粒子的位置替换全局极值 ,该粒子的适应值替换全局最好适应值。
Step4:根据(2)、(3)式更新粒子的速度和位置。
Step5:如果粒子的适应值达到预先设定的精度,则停止迭代 ,否则返回步骤 step3
V(n+1) = V(n) + c1*rand2*(pi – x(n)) + c2* rand1*(qi – x(n)) ------(2)
X(n+1) = x(n) + V(n+1) ------(3)
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
%% function end ------------------------------------------------------ %% function[xm,fv] % % % % % % format for end % end pg end % end % disp([ xm=pg disp(['PSO粒子群算法目标函数的最小值为:' fv=fitness(pg); plot( --------------------------------------------- %% clear clc [X L end %作出适应度函数的图像 surf(X,Y,Z) xlabel( ylabel('X(2)'); zlabel('fitess(x(1),x(2))'); %利用粒子群算法计算方程组 %指定搜索范围 figure [xm1,fv1] legend( xlabel('迭代次数');ylabel('适应度'); title('粒子群算法求解方程组'); |