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

📄 untitled3.m

📁 应用模拟退火方法求解非线形方程
💻 M
字号:
close all
clear
clc
s=sprintf('程序运行中...')
T1=clock;
L=-2*pi;R=2*pi;h=0.01;disp(s)
X=qujian(L,R,h);
if X==0
    fprintf('方程在区间[%g,%g]内无实根\n',L,R)
    return
else
    pause(1)
    [m,n]=size(X);
    for M=1:m
        N=1;T=100;T0=0.001;k=100;
        a=0.5;step=0.005;
        L=X(M,1);H=X(M,2);
        x1=L+rand*(H-L);
        while T>T0
            for t=1:k
                f1=abs(f(x1));
                x2=x1+step*(rand-0.5);
                while x2<L|x2>H
                    x2=x1+step*(rand-0.5);
                end
                f2=f(x2);
                if (f2-f1)<0
                    x1=x2;
                elseif exp((f1-f2)/T)>rand
                    x2=x2;
                end
                temp(t,1)=x1;temp(t,2)=abs(f(x1));
            end
            [V i]=min(temp(:,2));
            x1=temp(i,1);ret(N)=x1;
            se(N)=V;N=N+1;
            T=a*T;step=a*step;
        end
        [fmin I]=min(se);x=ret(I);
        solution(M,:)=[x,fmin];
        tt=1:N-1;
        if M==m
            plot(tt,se)
            xlabel('进化代数')
            ylabel('目标函数值')
            figure
            plot(tt,ret)
            xlabel('进化代数')
            ylabel('搜索变量值')
        end
    end
    T2=clock;
    CoseTime=T2-T1;
    if CoseTime(6)<0
        CoseTime(6)=CoseTime(6)+60;
        CoseTime(5)=CoseTime(5)-1;
    end
    if CoseTime(5)<0
        CoseTime(5)=CoseTime(5)+60;
        CoseTime(4)=CoseTime(4)-1
    end
        solution 
        str4=sprintf('程序运行耗时%d时%d分%d秒',CoseTime(4),CoseTime(5),CoseTime(6));
        disp(str4);
end

⌨️ 快捷键说明

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