当前位置:首页>科技>正文

用粒子群优化算法求一元高次方程的全部根的MATLAB程序 粒子群算法用matlab做,要把粒子初始化为矩阵要怎么做

2023-07-30 05:20:37 互联网 未知 科技

 用粒子群优化算法求一元高次方程的全部根的MATLAB程序 粒子群算法用matlab做,要把粒子初始化为矩阵要怎么做

用粒子群优化算法求一元高次方程的全部根的MATLAB程序

最简单的方法是用矩阵来表示多项式:
p=[1,10,37,102.055,120];%注意要按照降幂来排列啊
roots(p);
p
结果:
ans=

6.1749
-0.9139 2.9823i
-0.9139 - 2.9823i
-1.9974

粒子群算法用matlab做,要把粒子初始化为矩阵要怎么做

可以参考一下这段代码

%------给定初始化条件----------------------------------------------
c1=1.8 %学习因子1
c2=1.8 %学习因子2
WMax=1.6 %惯性权重
WMin=0.8 %惯性权重
MaxDT=100 %最大迭代次数
D=3 %搜索空间维数(未知数个数)
N=30 %初始化群体个体数目
XUp=20/(2^0.5) %初始化位移上限
XDown=-20/(2^0.5) %初始化位移下限
VUp=0.5 %初始化速度上限
VDown=0.0 %初始化速度下限
eps=10^(-6) %设置精度(在已知最小值时候用)
%------初始化种群的个体(可以在这里限定位置和速度的范围)------------

x=((XUp-XDown).*rand(N,2*D) XDown) %随机初始化位置
v=((VUp-VDown).*rand(N,2*D) VDown) %随机初始化速度

求粒子群算法MATLAB完整代码

%% 清空环境
clear
clc
tic
%% 参数初始化
% 粒子群算法中的两个参数
c1 = 1.49445
c2 = 1.49445

maxgen = 200 % 进化次数
sizepop = 20 % 种群规模

Vmax = 1
Vmin = -1
popmax = 5
popmin = -5

%% 产生初始粒子和速度
for i = 1:sizepop
% 随机产生一个种群
pop(i,:) = 5 * rands(1,2) % 初始种群
V(i,:) = rands(1,2) % 初始化速度
% 计算适应度
fitness(i) = fun(pop(i,:)) % 染色体的适应度
end

% 找最好的染色体
[bestfitness bestindex] = min(fitness)
zbest = pop(bestindex,:) % 全局最佳
gbest = pop % 个体最佳
fitnessgbest = fitness % 个体最佳适应度值
fitnesszbest = bestfitness % 全局最佳适应度值

%% 迭代寻优
for i = 1:maxgen
for j = 1:sizepop

% 速度更新
V(j,:) = V(j,:) c1*rand*(gbest(j,:) - pop(j,:)) c2*rand*(zbest - pop(j,:))
V(j,find(V(j,:)>Vmax)) = Vmax
V(j,find(V(j,:)
%种群更新
pop(j,:) = pop(j,:) 0.5*V(j,:)
pop(j,find(pop(j,:)>popmax)) = popmax
pop(j,find(pop(j,:)
% 自适应变异
if rand > 0.8
k = ceil(2*rand)
pop(j,k) = rand
end

% 适应度值
fitness(j) = fun(pop(j,:))
end

% 个体最优更新
if fitness(j) < fitnessgbest(j)
gbest(j,:) = pop(j,:)
fitnessgbest(j) = fitness(j)
end

% 群体最优更新
if fitness(j) < fitnesszbest
zbest = pop(j,:)
fitnesszbest = fitness(j)
end

yy(i) = fitnesszbest

end
toc
%% 结果分析
plot(yy)
title([适应度曲线 终止代数= num2str(maxgen)])
xlabel(进化代数)
ylabel(适应度)

fun函数如下
function y = fun(x)
y = -20*exp(-0.2*sqrt((x(1)^2 x(2)^2)/2)) - exp((cos(2*pi*x(1)) cos(2*pi*x(2)))/2) 20 2.71289

matlab用粒子群算法求解方程组最优解

这关键是适应度函数的问题,你可以编写如下适应度函数:
F=|E(X1y1 X2y2)-0| |D(X1y1 X2y2)-1|,F值越小越好,||指的是绝对值。

而变量你就选取X1和X2里的每个元素。比如X1=[x1,x2,x3]X2=[x4,x5,x6]你就可以设置PSO的变量为x1到x6这六个值。
答毕,不懂追问。