24小时热门版块排行榜    

查看: 1952  |  回复: 6

离子木木

金虫 (正式写手)

[求助] 以信噪比为适应度函数的自适应粒子群优化算法Matlab Code 修改 已有1人参与

本人最近写了一篇以信噪比为适应度函数的自适应粒子群优化算法Matlab Code,但是运行总是出错误,恳求哪位Matlab大神帮忙看看 修改修改,谢谢。
信噪比SNR适应度函数:
function SNR=fitness(x)
N=20000;
fs=20;
h=1/fs;
T=(0:N-1)*h;
AL=0.1;
fL=0.01;
u=AL*sin(2*pi*fL.*T);
D=0.5;   %噪声强度
ff=fs*(0:N/100-1)/N;
    sz=sqrt(2*D).*randn(1,N);   %产生的白噪声序列
    s=u+sz;         %信号
    xx(1,:)=sr(x(1),x(2),h,s);
Yf=fft(xx(1,:));
P=Yf.*conj(Yf)/N;   %功率谱
    G=sum(P);
    H=P(11);   
    GG=(G-H)/10;
SNR=10*log(H/GG)/log(10);  %以SNR作为适应度函数

非线性微分方程离散并求解的数值算法:
function x=sr(a,b,h,x1)
x=zeros(1,length(x1));
for i=1:length(x1)-1
    k1=h*(x(1)*x(i)-x(2)*x(i).^3+x1(i));
    k2=h*(x(1)*(x(i)+k1/2)-x(2)*(x(i)+k1/2).^3+x1(i));
    k3=h*(x(1)*(x(i)+k2/2)-x(2)*(x(i)+(sqrt(2)-1)*k1/2+(2-sqrt(2))*k2/2).^3+x1(i+1));
    k4=h*(x(1)*(x(i)+k3)-x(2)*(x(i)-sqrt(2)*k2/2+(2+sqrt(2))*k3/2).^3+x1(i+1));
    x(i+1)=x(i)+(1/6)*(k1+(2-sqrt(2))*k2+(2+sqrt(2))*k3+k4);
end

主函数:
clear all;
clc;
format long;
%------给定初始化条件-------------------
c1=2;             %学习因子1
c2=2;             %学习因子2
wmax=0.9;              %惯性权重
wmin=0.6;              %惯性权重
MaxDT=100;            %最大迭代次数
D=2;                  %搜索空间维数(未知数个数)
N=40;                  %初始化群体个体数目
eps=10^(-6);           %设置精度(在已知最小值时候用)
%------初始化种群的个体(可以在这里限定位置和速度的范围)------------
for i=1:N
    for j=1:D
        x(i,j)=rand(1);  %随机初始化位置
        v(i,j)=rand(1);  %随机初始化速度
    end
end
for i=1:N
    p(i)=fitness(x(i,:));
    y(i,:)=x(i,:);
end
pg=x(1,:);             %Pg为全局最优
for i=2:N
    if fitness(x(i,:))<fitness(pg)
        pg=x(i,:);
    end
end
for t=1:MaxDT
    for j=1:N
        fv(j)=fitness(x(j,:));
    end
       fvag=sum(fv)/N;
       fmin=min(fv);
    for i=1:N
        if fv(i)<=fvag
           w=wmin-(fv(i)-fmin)*(wmax-wmin)/(fvag-fmin);
        else
           w=wmax;
        end
        v(i,:)=w*v(i,:)+c1*rand*(y(i,:)-x(i,:))+c2*rand*(pg-x(i,:));  %实现速度的更新
        x(i,:)=x(i,:)+v(i,:);  %实现位置的更新
        if x(i,1)>1||x(i,1)<0
           x(i,1)=rand(1);
        end
        if x(i,2)>1||x(i,2)<0
           x(i,2)=rand(1);
        end
        if fitness(x(i,:))<p(i)   %判断当此时的位置是否为最优的情况,当不满足时继续更新
            p(i)=fitness(x(i,:));
            y(i,:)=x(i,:);
        end
        if p(i)<fitness(pg)
            pg=y(i,:);
        end
    end
    Pbest(t)=fitness(pg);
end
%------最后从所得到的结果中取出最优的解
disp('*************************************************************')
disp('函数的全局最优位置为:')
Solution=pg'
disp('最后得到的优化极值为:')
Result=fitness(pg)
disp('*************************************************************')
figure(1)
r=[1:1:100];
plot(r,Pbest,'r--','linewidth',1);
xlabel('迭代次数')
ylabel('适应度值')
title('自适应权重PSO算法')
hold on
Solution=pg'
Result=fitness(pg)
figure(2)
plot(x,'DisplayName','x')
axis([0,40,-5,5])
%------算法结束---DreamSun GL & HF,适应度函数源程序(fitness.m)------------
回复此楼
风吹不倒根深的树
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

浅浅笑兮w

铁虫 (小有名气)

同求,解决了楼主告诉我一声哈。我也在做粒子群算法的仿真,但是始终没做出来。祝你尽快找到解决办法
2楼2016-07-28 19:36:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

离子木木

金虫 (正式写手)

引用回帖:
2楼: Originally posted by 浅浅笑兮w at 2016-07-28 19:36:22
同求,解决了楼主告诉我一声哈。我也在做粒子群算法的仿真,但是始终没做出来。祝你尽快找到解决办法

你做的是什么粒子群?我是自适应权值粒子群优化算法

发自小木虫Android客户端
风吹不倒根深的树
3楼2016-07-29 14:05:10
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

一方水土

木虫 (小有名气)

【答案】应助回帖

我将你的程序写进去,能够运行啊,你是不是将函数文件名称写错了?
人贵有自知之明
4楼2016-11-01 10:04:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

一方水土

木虫 (小有名气)

【答案】应助回帖

引用回帖:
4楼: Originally posted by 一方水土 at 2016-11-01 10:04:15
我将你的程序写进去,能够运行啊,你是不是将函数文件名称写错了?

这是运行结果
以信噪比为适应度函数的自适应粒子群优化算法Matlab Code 修改
QQ截图20161101100558.jpg

人贵有自知之明
5楼2016-11-01 10:07:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Yimaifanghua

新虫 (初入文坛)

6楼2017-11-03 00:56:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

455227055

新虫 (正式写手)

请问,您最后做出来了没有,我也在做这个,但是结果不是很理想。所以,想请教一下您,我的邮箱455227022@qq.com,希望能交流一下
7楼2017-11-28 20:46:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 离子木木 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 明天E口面上会评 +4 布布和一二 2026-07-12 5/250 2026-07-13 10:44 by zzybjr
[公派出国] 售T0P一区SCI文章,我:8O5.51.O.54,科目齐全,可+急 +3 obzynn3tuv 2026-07-11 4/200 2026-07-13 10:35 by emlgkvoijw
[考博] 售T0P一区SCI文章,我:8O5.51.O.54,科目齐全,可+急 +3 obzynn3tuv 2026-07-11 4/200 2026-07-13 10:25 by emlgkvoijw
[论文投稿] 售T0P一区SCI文章,我:8O5.51.O.54,科目齐全,可+急 +3 obzynn3tuv 2026-07-11 4/200 2026-07-13 10:15 by emlgkvoijw
[硕博家园] 售T0P一区SCI文章,我:8O5.51.O.54,科目齐全,可+急 +3 obzynn3tuv 2026-07-11 3/150 2026-07-13 09:56 by emlgkvoijw
[硕博家园] 大龄残疾硕士的一点执念 +17 3776737374 2026-07-06 27/1350 2026-07-13 06:05 by 鲁弥abc
[考博] 售T0P一区SCI文章,我:8O5.51.O.54,科目齐全,可+急 +3 obzynn3tuv 2026-07-11 4/200 2026-07-13 00:24 by v2i90kmrcu
[考研] 售T0P一区SCI文章,我:8O5.51.O.54,科目齐全,可+急 +3 obzynn3tuv 2026-07-11 4/200 2026-07-13 00:15 by v2i90kmrcu
[基金申请] 不要再数国自然申请书的 filecode 的分隔符个数了 +10 sadpencil 2026-07-12 15/750 2026-07-12 21:50 by sadpencil
[基金申请] 祈祷青基必中 50+6 hadengry 2026-07-09 16/800 2026-07-12 20:31 by 登山虫虫
[基金申请] 生命口会评 +11 wuke100666 2026-07-07 12/600 2026-07-11 19:30 by hhs666
[考博] 27届辽宁大学应届毕业生申博 +3 可乐微风大海 2026-07-09 3/150 2026-07-10 21:23 by 贪玩的研究僧
[基金申请] 关于如何从代码看上不上会 +17 且听虎啸 2026-07-09 23/1150 2026-07-10 19:51 by sdfapple719
[有机交流] chemdraw 20+5 ?慕鱼? 2026-07-08 6/300 2026-07-10 15:37 by 紫枫星域
[基金申请] b口会评 +6 当空照 2026-07-08 6/300 2026-07-09 20:49 by tonyliu0401
[基金申请] 信息学部会评时间 +3 xuel2011 2026-07-06 3/150 2026-07-09 19:05 by mollyzhang_2003
[考研] 在职考研 +6 wu5d 2026-07-08 7/350 2026-07-09 16:40 by 化工小霸王呀
[有机交流] 硝基还原 20+3 暮年飞雪 2026-07-07 5/250 2026-07-09 13:30 by tfang
[基金申请] 化学口会评?应用基础研究和基础研究,希望能分开 +3 Tide man 2026-07-08 3/150 2026-07-09 11:36 by dede5556
[有机交流] Suzuki偶联中硼酸酯原料掉下的硼酸酯是否可以自身偶联,生成B2Pin2杂质 500+3 天下大同 2026-07-06 3/150 2026-07-07 10:31 by martyr_oyx
信息提示
请填处理意见