人工电场算法毕业论文【matlab】

一、算法流程

库伦定律(Coulomb's law)是静止点电荷相互作用力的规律,由法国科学家 C,-A.de库伦经实验得出。在物理学中,带电物体周围的空间会产生一个电场,对其他带电物体施加一个力。根据库仑定律,真空中两个静止的电荷之间的相互作用力,与它们的电荷量的乘积成正比,与它们的距离的二次方成反比,作用力的方向在它们的连线上。

电力大小为

人工电场算法(AEFA)受库仑定律的启发,通过模拟带电粒子在静电场的运动,将其演化成随机搜索最优解的过程。电荷在静电力的作用下相互吸引或排斥,使电荷能在搜索空间中移动。在 AEFA 算法中,仅考虑电荷的吸引力,而忽略电荷的排斥力,因而电荷量大的带电粒子能吸引所有其他电荷量较低的粒子向其靠近。

在搜索空间中,每一个电荷代表一个可行解,其强度由他们的电荷量来衡量,电荷的电荷量越大,表明该电荷越接近理论最优解。电荷面积的大小表示该电荷量的大小,电荷分别受到其它三个电荷的吸引力,根据运动定律,形成一个合力F和该方向的加速度。由于电荷Q的电荷量最大,其吸引力也越大,电荷9合力F的方向更接近g与Q之间的中心连线。因此,AEFA算法通过模拟电荷间的相互作用力,当搜索空间存在电荷量大的电荷时,其它电荷都向电荷量大的方向靠近,使算法收敛到最优解。

库仑力

算法流程

二、代码与仿真

hold on;

density = 100;
sx = (0:density)*2/density-1;
sy = f(sx);
plot(sx,sy);

coeff_leg = myLegendreSquareApprox(@f);
fprintf("Legendre: %fx^3+%fx^2+%fx+%f\n", coeff_leg(4), coeff_leg(3), coeff_leg(2), coeff_leg(1));
[sx, sy] = sampleFunction([-1,1], coeff_leg, density);
plot(sx,sy);
% plot(sx,f(sx)-sy);
fprintf("Legendre error: %f\n", compute_error(sx,sy))
fprintf("Legendre l2 error: %f\n", compute_l2_error(@f, @(x)(coeff_leg(1)+coeff_leg(2).*x+coeff_leg(3).*x.^2+coeff_leg(4).*x.^3), @(x)(1)));

coeff_tche = myTchebychevUniformApprox(@f);
fprintf("Tchebychev: %fx^3+%fx^2+%fx+%f\n", coeff_tche(4), coeff_tche(3), coeff_tche(2), coeff_tche(1));
[sx, sy] = sampleFunction([-1,1], coeff_tche, density);
plot(sx,sy);
% plot(sx,f(sx)-sy);
fprintf("Tchebychev error: %f\n", compute_error(sx,sy))

coeff_lag = myLagrangeUniformApprox(@f);
fprintf("Lagrange: %fx^3+%fx^2+%fx+%f\n", coeff_lag(4), coeff_lag(3), coeff_lag(2), coeff_lag(1));
[sx, sy] = sampleFunction([-1,1], coeff_lag, density);
plot(sx,sy);
% plot(sx,f(sx)-sy);
fprintf("Lagrange error: %f\n", compute_error(sx,sy))

lgd = legend('f','Legendre', 'Tchebychev', 'Lagrange');
lgd.Location = 'northwest';

% lgd = legend('Legendre', 'Tchebychev', 'Lagrange');
% lgd.Location = 'south';

function y=f(x)
    y = (x.^2).*log(2+x);
end

function d = compute_error(sx, sy)
y = f(sx);
d = max(abs(y-sy));
end

function d = compute_l2_error(f,g,rho)
d = integral(@(x)(rho(x).*(f(x)-g(x)).^2), -1, 1)^0.5;
end

库伦常数

基准函数

基准函数

收敛情况

博主简介:本人擅长数据处理、建模仿真、程序设计、论文写作与指导,项目与课题经验交流。个人博客:kelaboshi.com。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坷拉博士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值