matlab ode45 options,ode45提示输入参数太多,请指导哪里出了问题

%%%%%%%%%%%%%%%%%%%%%%模拟退火算法解决函数极值%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%初始化%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%c=x;y=a

clear all;                      %清除所有变量

close all;                      %清图

clc;                            %清屏

XMAX= 0.02;                     %搜索变量x最大值

XMIN= 0;                        %搜索变量x最小值

YMAX= 5;                        %搜索变量y最大值

YMIN= 0;                        %搜索变量y最小值

%%%%%%%%%%%%%%%%%%%%%%%%%%%冷却表参数%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

L = 100;                        %马可夫链长度

K = 0.99;                       %衰减参数

T=100;                          %初始温度

YZ = 1e-4;                      %容差

P = 0;                          %Metropolis过程中总接受点

S = 0.02;                       %步长因子

%%%%%%%%%%%%%%%%%%%%%%%%%%随机选点 初值设定%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%初值1随机,初值2利用原有辨识结果%%%%%%%%%%%%%%%%%%

PreX =  rand * (XMAX-XMIN)+XMIN;

PreY =  rand * (YMAX-YMIN)+YMIN;

PreBestX = PreX;

PreBestY = PreY;

PreX =  0.0135;

PreY =  0.9;

BestX = PreX;

BestY = PreY;

%%%%%%%%%%%每迭代一次退火一次(降温), 直到满足迭代条件为止%%%%%%%%%%%%

deta=abs( func2( BestX,BestY)-func2 (PreBestX, PreBestY));

while (deta > YZ) & (T>0.001)

T=K*T;               %%%%%下一个温度

%%%%%%%%%%%%%%%%%%%%%在当前温度T下迭代次数%%%%%%%%%%%%%%%%%%%%%%

for i=1:L

%%%%%%%%%%%%%%%%%在此点附近随机选下一点%%%%%%%%%%%%%%%%%%%%%

p=0;

while p==0

NextX = PreX + S* (rand * (XMAX-XMIN)+XMIN);

NextY = PreY + S*( rand * (YMAX-YMIN)+YMIN);

if (NextX >= XMIN && NextX <= XMAX && NextY >=...

YMIN && NextY <= YMAX)

p=1;

end

%判断下一点是否在x,y的范围内

end

%%%%%%%%%%%%%%%%%%%%%%%是否全局最优解%%%%%%%%%%%%%%%%%%%%%%

if (func2(BestX,BestY) > func2(NextX,NextY))

%%%%%%%%%%%%%%%%%%保留上一个最优解%%%%%%%%%%%%%%%%%%%%%

PreBestX = BestX;

PreBestY = BestY;

%%%%%%%%%%%%%%%%%%%此为新的最优解%%%%%%%%%%%%%%%%%%%%%

BestX=NextX;

BestY=NextY;

end

%%%%%%%%%%%%%%%%%%%%%%%% Metropolis过程%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%% 比较preX和NextX,第一次进入prex是初值%%%%%%%%%%%%%%%%%

if( func2(PreX,PreY) - func2(NextX,NextY) > 0 )

%%%%%%%%%%%%%%%%%%%%%%%接受新解%%%%%%%%%%%%%%%%%%%%%%%%

PreX=NextX;

PreY=NextY;

P=P+1;

else

changer = -1*(func2(NextX,NextY)-func2(PreX,PreY))/ T ;

p1=exp(changer);

%%%%%%%%%%%%%%%%%%%%%%%%接受较差的解%%%%%%%%%%%%%%%%%%%%

if p1 > rand

PreX=NextX;

PreY=NextY;

P=P+1;

end

end

goodvalue(P+1)=func2(BestX, BestY);

end

deta=abs( func2( BestX,BestY)-func2 (PreBestX, PreBestY));

end

disp('最小值在点:');

BestX

BestY

disp( '最小值为:');

func2(BestX, BestY)

plot(goodvalue(2:end))

xlabel('迭代次数')

ylabel('目标函数值')

title('适应度进化曲线')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值