用Matlab实现黄金分割法,优化目标函数minf(x)=2x^2-x-1,初始区间为[-1,1],e=0.001

求高手帮忙!急!急!急!... 求高手帮忙!急!急!急! 展开
帐号已注销
2021-10-18 · TA获得超过77万个赞
知道小有建树答主
回答量:4168
采纳率:93%
帮助的人:159万
展开全部

首先在matlab新建文件保存为goldmin.m

function[x,y] = goldmin(f,xa,xb,s)

% 黄金分割法求解函数最小值

% 输入

% f 待优化函数

g = (sqrt(5)-1)/2; % 黄金分割比,0.618

a = xa;

b = xb;

x2 = a + g*(b-a);

x1 = a + b - x2;

y1 = f(x1);

y2 = f(x2);

while abs(b-a) > s

if y1<y2

b = x2;

x2 = x1;

x1 = a + b - x2;

end

>> f = @(x) 2*x^2-x-1;

>> [x,y]=goldmin(f,-1,1,0.001)

x =

0.2497

y =

-1.1250

>>

即当x=0.2497时取最小值-1.125

菲波那契数列

经研究发现,相邻两个菲波那契数的比值是随序号的增加而逐渐趋于黄金分割比的。即f(n-1)/f(n)→0.618…。由于菲波那契数都是整数,两个整数相除之商是有理数,所以只是逐渐逼近黄金分割比这个无理数。但是当我们继续计算出后面更大的菲波那契数时,就会发现相邻两数之比确实是非常接近黄金分割比的。

lhmhz
高粉答主

2014-09-23 · 专注matlab等在各领域中的应用。
lhmhz
采纳数:7263 获赞数:16989

向TA提问 私信TA
展开全部

窗口命令

gold_mean(-1,1,0.001)

ans =

.2499143985

代码见附件

文件1,gold_fun.m    目标函数

文件2,gold_mean.m   黄金分割法函数


已赞过 已踩过<
你对这个回答的评价是?
评论 收起
learneroner
高粉答主

2014-09-23 · 关注我不会让你失望
知道大有可为答主
回答量:1.1万
采纳率:91%
帮助的人:6374万
展开全部
首先在matlab新建文件保存为goldmin.m
function[x,y] = goldmin(f,xa,xb,s)
% 黄金分割法求解函数最小值
% 输入
% f 待优化函数
% a,b 区间
% s 精度
% 输出
% x 最优解
% y 最优解对应的最小值
%%
g = (sqrt(5)-1)/2; % 黄金分割比,0.618
a = xa;
b = xb;
x2 = a + g*(b-a);
x1 = a + b - x2;
y1 = f(x1);
y2 = f(x2);
while abs(b-a) > s
if y1<y2
b = x2;
x2 = x1;
x1 = a + b - x2;
end
if y1>=y2
a = x1;
x1 = x2;
x2 = a + b - x1;
end
y1=f(x1);
y2 = f(x2);
end
x = x1;
y = f(x);
然后在命令区输入
>> f = @(x) 2*x^2-x-1;
>> [x,y]=goldmin(f,-1,1,0.001)

x =

0.2497

y =

-1.1250

>>
即当x=0.2497时取最小值-1.125
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式