当前位置:首页 > 地信家园 > Matlab改进的方法求解函数最值

Matlab改进的方法求解函数最值

昨天技术宅和大家分享了一份关于使用matlab多种方式求解函数最值的方法,今天继续分享一份改进的方法:

对于Z=f(x,y)( x∈D1, y∈D2)型模型,函数具体表达式为:

matlab求一元、二元函数最值

定义域:x∈[-3,3], y∈[-3,3]

程序代码:

% 程序运行时间比较长,请耐心等待。

% 用于计算二元函数的最小值。

%

%

% 基本思想:

% 已知最小值出现在某个范围内,首先在这个范围内随机产生一定数量(如100)的点,

% 计算相应点的值,记录取得最小值的点,将这个点作为后续局部搜索的起始点。然后在一

% 个确定的较小的步长范围内随机取点n次,计算相应的值,把值最小的点作为新的局部搜索

% 起始点,这样一直运行,直到局部搜索点周围的值都比这个点大则结束运算。

clear;

format long;

t=input(‘请输入最大步长:t=’);

n=input(‘请输入每次产生随机点个数:n=’);

% 已知最小值点所在区域为 -3 < x < -1, -1 < y < 1, 下面在这个区域内随机产生n

% 个点,然后计算这些点的取值,记录最小的点,将之作为局部搜索的起始点

xmin=-3;

ymin=-1;

zmin=f2(-3,-1);

for i=1:n;

x=-3+2*rand();

y=-1+2*rand();

z1=f2(x,y);

if z1<zmin

xmin=x;

ymin=y;

zmin=z1;

end;

end

% 在局部搜索点(xmin,ymin)以步长t为邻域的区间内,随机产生n个点,计算这些点的值,

% 将这些点中的最小点作为下次局部搜索的起始点

for i=1:n;

x=xmin-t+2*t*rand();

y=ymin-t+2*t*rand();

z1=f2(x,y);

if z1<zmin

xmin1=x;

ymin1=y;

zmin=z1;

end;

end

% 下面开始循环,直到旧的局部搜索点(xmin,ymin)和新的局部搜索点(xmin1,ymin1)

% 相等时结束循环

while (xmin~=xmin1 || ymin~=ymin1)

xmin=xmin1;

ymin=ymin1;

for i=1:n;

x=xmin-t+2*t*rand();

y=ymin-t+2*t*rand();

z1=f2(x,y);

if z1<zmin

xmin1=x;

ymin1=y;

zmin=z1;

end;

end;

end

disp(‘最小值为:’);

disp(zmin);

disp(‘此时对应x,y值为:’);

disp(xmin);

disp(ymin);

友荐云推荐
  • «
  • »
  • 作者:
    除非注明,本文原创:技术宅,欢迎转载!转载请以链接形式注明本文地址,谢谢。
    原文链接:http://www.jishuzh.com/gis/matlab改进的方法求解函数最值.html