24小时热门版块排行榜    

查看: 1719  |  回复: 6

zs024995

新虫 (小有名气)

[求助] 跪求用遗传算法或粒子群算法解决四元二次方程代码或实例 已有1人参与

跪求用遗传算法或粒子群算法或者其他好的算法解决四元二次方程代码或实例

@月只蓝 发自小木虫Android客户端
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ybkooo

至尊木虫 (著名写手)

^^

【答案】应助回帖

感谢参与,应助指数 +1
function friction   
clear all
clc

[x,fv]=PSO(@fitness,40,2.05,2.05,0.5,200,7);
fprintf('\n\n使用函数PSO()估计得到的参数值为:\n')
fprintf('\tk1 = %.9f \n',x(1))
fprintf('\tk2 = %.9f \n',x(2))
fprintf('\tk3 = %.9f \n',x(3))
fprintf('\tk4 = %.9f \n',x(4))
    eq1=x(1).^2+(x(2)-b).^2-(x(3)+x(4)*t1).^2
    eq2=(x(1)-a).^2+(x(2)-b).^2-(x(3)+x(4)*t2).^2
    eq3=x(1)^2+x(2).^2-x(3).^2
    eq4=(x(1)-a).^2+x(2).^2-(x(3)+x(4)*t3).^2
...

function ff=fitness(x)
    t1=0.0001241;
    t2=0.0001272;
    t3=0.0000313;
    a=0.3;
    b=0.45;

    eq1=x(1).^2+(x(2)-b).^2-(x(3)+x(4)*t1).^2;
    eq2=(x(1)-a).^2+(x(2)-b).^2-(x(3)+x(4)*t2).^2;
    eq3=x(1)^2+x(2).^2-x(3).^2;
    eq4=(x(1)-a).^2+x(2).^2-(x(3)+x(4)*t3).^2;
   
    ff=(eq1).^2+(eq2).^2+(eq3).^2+(eq4).^2;  %把四个方程写成右边为0,把左边写入括号内;
end

function [xm,fv] = PSO(fitness,N,c1,c2,w,M,D)
%     待优化目标函数:fitness
%     粒子数目:N
%     学习因子1:c1
%     学习因子2:c2
%     惯性权重:w
%     最大迭代次数:M
%     自变量的个数:D
%     目标函数取最小值时的自变量:xm
%     目标函数的最小值:fv
format long;
%------初始化种群的个体------------
for i=1:N    %粒子数目:N
    for j=1  %自变量的个数:D
        x(i,j)=randn;  %随机初始化位置
        v(i,j)=randn;  %随机初始化速度
    end
end
%------先计算各个粒子的适应度,并初始化Pi和Pg----------------------
for i=1:N
    p(i)=fitness(x(i,);
    y(i,=x(i,;
end
pg = x(N,;             %Pg为全局最优
for i=1N-1)
    if fitness(x(i,)<fitness(pg)
        pg=x(i,;
    end
end
%------进入主要循环,按照公式依次迭代------------
for t=1:M
    for i=1:N
        v(i,=w*v(i,+c1*rand*(y(i,-x(i,)+c2*rand*(pg-x(i,);
        x(i,=x(i,+0.1*v(i,;
        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
xm = pg';   %目标函数取最小值时的自变量:xm
fv = fitness(pg);
end
end
abcd
2楼2016-04-19 09:19:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ybkooo

至尊木虫 (著名写手)

^^

运行结果
使用函数PSO()估计得到的参数值为:
        k1 = 0.150093852
        k2 = 0.224956985
        k3 = 0.270387591
        k4 = 0.207724069

eq1 =
    4.913248438891127e-005
eq2 =
   -7.526761060847043e-006
eq3 =
    2.436019185562965e-005
eq4 =
   -3.546682525368272e-005
abcd
3楼2016-04-19 09:21:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

月只蓝

主管区长 (职业作家)

2楼已经给出了很好的例子。
算法思想就是把求解非线性方程组问题转化为求方程组残差平方和最小值的最优化问题。
MATLAB、MS小问题、普通问题请发帖求助!时间精力有限,恕不接受无偿私信求助。
4楼2016-04-19 09:49:34
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ybkooo

至尊木虫 (著名写手)

^^

[x,fv]=PSO(@fitness,80,2.05,2.05,0.5,800,4); %种群数80,迭代次数800.都可以修改
fprintf('\n\n使用函数PSO()估计得到的参数值为:\n')
fprintf('\tx1 = %.9f \n',x(1))
fprintf('\tx2 = %.9f \n',x(2))
fprintf('\tx3 = %.9f \n',x(3))
fprintf('\tx4 = %.9f \n',x(4))
abcd
5楼2016-04-19 12:53:42
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zs024995

新虫 (小有名气)

引用回帖:
2楼: Originally posted by ybkooo at 2016-04-19 09:19:46
function friction   
clear all
clc

=PSO(@fitness,40,2.05,2.05,0.5,200,7);
fprintf('\n\n使用函数PSO()估计得到的参数值为:\n')
fprintf('\tk1 = %.9f \n',x(1))
fprintf('\tk2 = %.9f \n',x(2))
fpri ...

如果有约束呢?每个变量都有区间
6楼2016-04-25 21:02:59
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ybkooo

至尊木虫 (著名写手)

^^

【答案】应助回帖

引用回帖:
6楼: Originally posted by zs024995 at 2016-04-25 21:02:59
如果有约束呢?每个变量都有区间...

PSO做约束优化的粒子少,可以用新版本matlab的遗传算法工具箱,可以设定约束条件。
见附件 遗传算法 工具箱的应用,有一个粒子。
还有在网上找到的PSO算法约束优化,不过程序很多,没看懂呢还。
跪求用遗传算法或粒子群算法解决四元二次方程代码或实例
q1.png


跪求用遗传算法或粒子群算法解决四元二次方程代码或实例-1
q2.png


跪求用遗传算法或粒子群算法解决四元二次方程代码或实例-2
q3.png

» 本帖附件资源列表

  • 欢迎监督和反馈:小木虫仅提供交流平台,不对该内容负责。
    本内容由用户自主发布,如果其内容涉及到知识产权问题,其责任在于用户本人,如对版权有异议,请联系邮箱:xiaomuchong@tal.com
  • 附件 1 : psopt20100414.rar
  • 2016-04-25 23:44:04, 26.17 K
abcd
7楼2016-04-25 23:44:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 zs024995 的主题更新
信息提示
请填处理意见