⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 msim.m

📁 matlab仿真模拟退火算法的简单搜索过程
💻 M
字号:
clear all;

delttime=.125e-3; %get time switch period
delttime1=5e-8; %get time  sampling period
num1=(delttime/delttime1);

x1=0;%初始值
x0=x1;
n=160;

k=300;    %内循环次数
T=10;  %起始温度
T1=0.01;     %中止温度
a=0.9;    %退火过程系数
N=1;

        PD=x1;
        n1=n/2+fix(x1/1.5e-7); 
        sim('msimmodel');
        data=load('EMI.mat');
        dis1=data.ans;
        dis=dis1(2,1:num1);
        vare1=dis*dis';

while T>T1
    for t=1:k

        

%         vare1=energy(n1);
%         for i=1:n;
%             if abs(tbase(i)-x1)<1.5e-7
%                 vare1=energy(i);
%             end
%         end

        
        x2=x1+1.5e-7*fix(10*(rand(1)-0.5));%step change range is 0~10 deta(t)
        n2=n/2+fix(x2/1.5e-7);

        
        if n2>=160
            n2=160;
        elseif n2<=1
            n2=1;
        end
        
%         if x2>=1.2e-5  
%             x2=1.2e-5
%         else if x2<=-1.185e-5
%                 x2=-1.185e-5
%             end
%         end
%         vare2=energy(n2);
        PD=x2;
        sim('msimmodel');%
        data=load('EMI.mat');
        dis1=data.ans;
        dis=dis1(2,1:num1);
        vare2=dis*dis';
%         for i=1:n;
%             if abs(tbase(i)-x2)<1.5e-7
%                 vare2=energy(i);
%             end
%         end
                
        if(vare2-vare1)<0
            n1=n2;
            x1=(n1-n/2)*1.5e-7;
            vare1=vare2;
        elseif exp((vare1-vare2)/T)>0.5
            n1=n2;
            x1=(n1-n/2)*1.5e-7;
            vare1=vare2;

        end

%         for i=1:n;
%             if abs(tbase(i)-x1)<1.5e-7
%                ret(t,N)=energy(i);
%             end
%         end
        ret(t,N)=vare1;
        
    end  %end of for t=1:k
    se(N,:)=x1;   %每次退火计算所接受的最后状态 
    N=N+1;        %退火次数
    T=a*T;        %退火过程
    
end   %end of 'while'

num=1:N-1;
f=ret(k,num);
yax=max(f);
%--------------------------------------------------------------------------
han2=figure(2);
plot(num,f);
% title('Start temperature T=10 End temperature T1=0.01','FontWeight','bold');
% xlabel('annealing number','FontWeight','bold');
% ylabel('EMI noise energy(J)','FontWeight','bold');
title('初始温度 T=10 终止温度 T1=0.01','FontWeight','bold','FontSize',9.0);
xlabel('退火次数','FontWeight','bold','FontSize',9.0);
ylabel('噪声能量(J)','FontWeight','bold','FontSize',9.0);

ylable=[0 yax+0.2];
grid on;
minenergy=vare1;
% tdelay=x0-x1;
tdelay=x1;
% text(16,yax,['minumin energy of EmI is  ',num2str(minenergy)],'FontWeight','Bold');
% text(16,yax-0.2,['delay time of pulse TD=',num2str(tdelay)],'FontWeight','Bold');
text(30,yax,['EMI噪声最小能量为',num2str(minenergy),'(J)'],'FontWeight','Bold','FontSize',9.0);
text(30,yax-0.2,['补偿电路滞后时间为',num2str(tdelay),'(s)'],'FontWeight','Bold','FontSize',9.0);
commdistb='temp-9-chipause';
saveas(han2,commdistb,'bmp');

%--------------------------------------------------------------------------
han1=figure(1);
plot(num,f);
title('Start temperature T=10 End temperature T1=0.01','FontWeight','bold');
xlabel('annealing number','FontWeight','bold');
ylabel('EMI noise energy(J)','FontWeight','bold');
% title('初始温度 T=10 终止温度 T1=0.01','FontWeight','bold','FontSize',9.0);
% xlabel('退火次数','FontWeight','bold','FontSize',9.0);
% ylabel('噪声能量(J)','FontWeight','bold','FontSize',9.0);

ylable=[0 yax+0.2];
grid on;
% minenergy=vare1;
% tdelay=x0-x1;
% tdelay=x1;
text(30,yax,['minumin energy of EmI is  ',num2str(minenergy)],'FontWeight','Bold');
text(30,yax-0.2,['delay time of pulse TD=',num2str(tdelay)],'FontWeight','Bold');
% text(5,yax,['EMI噪声最小能量为',num2str(minenergy),'(J)'],'FontWeight','Bold','FontSize',9.0);
% text(5,yax-0.2,['补偿电路滞后时间为',num2str(tdelay),'(s)'],'FontWeight','Bold','FontSize',9.0);
commdistb='temp-9-enpause';
saveas(han1,commdistb,'bmp');

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -