爬山算法matlab程序,爬山搜索算法编程

clear;

clc;

u0=4*pi*10^(-7);%真空磁导率/(H/m)

n1=60;%线圈匝数

n2=60;%线圈匝数

r1=30;%线圈半径/(cm)

r2=30;%线圈半径/(cm)

c=0;

R1=20;%电路内电阻

R2=20;%电路内电阻

RL=50;%负载电阻

w=2*pi;

Us=1;%电源电压

t=linspace(0,40,80);

h=linspace(0,40,80);

[T,H]=meshgrid(t,h);

fun=@(a,b,T,H)(cos(a).*cos(b)+sin(a).*sin(b).*cos(c))./((r1*cos(a)-r2*cos(b)).^2+(r1*sin(a).*cos(c)+T-r2*sin(b)).^2+(-r1*sin(a).*sin(c)+H).^2).^0.5;

M=(u0*r1*r2*n1*n2/4*pi)*arrayfun(@(T,H)integral2(@(a,b)fun(a,b,T,H),0,2*pi,0,2*pi),T,H);

P=((w*M*Us).^2)*RL./((R1*(R2+RL)+(w*M).^2)).^2;

n=(w*M).^2*RL*100./(R1*(R2+RL).^2+(R2+RL)*(w*M).^2);

surf(T,H,n);

hold on;

title('传输效率n随轴向距离t、径向距离h变化关系');

x1=xlabel('轴向距离t/(cm)');%x轴标题

x2=ylabel('径向距离h/(cm)');%y轴标题

x3=zlabel('传输效率η/(%)');%z轴标题

format short;

% 定义初始节点(t0,h0)

t0=5;h0=5;

% 定义近邻节点范围

dt=5;dh=5;

% 定义近邻节点划分份数

nT=5;nH=5;

% 定义计算精度

ep=1e-4;

gg=1;

grid on;

title(['爬山算法 ——','第',num2str(gg),'次搜素']);

hold on;

val1=0;

FUN=@(a,b,t0,h0)(cos(a).*cos(b)+sin(a).*sin(b).*cos(c))./((r1*cos(a)-r2*cos(b)).^2+(r1*sin(a).*cos(c)+t0-r2*sin(b)).^2+(-r1*sin(a).*sin(c)+h0).^2).^0.5;

M1=(u0*r1*r2*n1*n2/4*pi)*arrayfun(@(t0,h0)integral2(@(a,b)FUN(a,b,t0,h0),0,2*pi,0,2*pi),t0,h0)

n10=(w*M1).^2*RL*100./(R1*(R2+RL).^2+(R2+RL)*(w*M1).^2)

plot3(t0,h0,n10,'r.');

gg=1;%gg为搜索次数

dlt=1;%dlt为函数差值

hold on;

while(dlt>ep)   %ep为计算精度

nt=linspace(t0-dt,t0+dt,nT*gg);

nh=linspace(h0-dh,h0+dh,nH*gg);

[ntt,nhh]=meshgrid(nt,nh);

Fun=@(a,b,nt,nh)(cos(a).*cos(b)+sin(a).*sin(b).*cos(c))./((r1*cos(a)-r2*cos(b)).^2+(r1*sin(a).*cos(c)+nt-r2*sin(b)).^2+(-r1*sin(a).*sin(c)+nh).^2).^0.5;

M2=(u0*r1*r2*n1*n2/4*pi).*arrayfun(@(nt,nh)integral2(@(a,b)Fun(a,b,nt,nh),0,2*pi,0,2*pi),ntt,nhh)

n22=(w*M2).^2*RL*100./(R1*(R2+RL).^2+(R2+RL)*(w*M2).^2)

% 求解近邻节点最大值及其位置

[val2,loc]=max(n22(:));

dlt=abs(n10-val2);

t0=ntt(loc);

h0=nhh(loc);

val1=val2;

plot3(t0,h0,val2,'r.');

title(['爬山算法 ——','第',num2str(gg),'次搜素']);

pause(0.1);       % 暂停0.1

gg=gg+1;

end

% 绘制最终极大值点

plot3(t0,h0,val2,'ro');

hold off

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值