確定函式
目標函式為一元單值函式,該問題即為一維問題,可用一維搜尋法進行迭代求解,下面用matlab實現**分割法、斐波那契數列法和二分法的求解。
1、**分割法,程式**如下:
fx=@(x)x^4-14*x^3+60*x^2-70*x;
a0=0;b0=2; %搜尋區間
d=0.3; %要求區間長度
p=(3-sqrt(5))/2;
n=0; %初始化迭代次數
while abs(b0-a0)>d
a=a0+p*(b0-a0);
b=a0+(1-p)*(b0-a0); %(1-p)為壓縮比
fa=fx(a);
fb=fx(b);
if fa該方法迭代4次,即可找到滿足要求的極小點所在的區間,為
2、斐波那契數列法,程式**如下:
fx=@(x)x^4-14*x^3+60*x^2-70*x;
a0=0;b0=2;
fk_2=0;fk_1=1; %生成斐波那契數列
e=0.1;
d=0.3
for i=1:10
fk(i)=fk_1+fk_2;
fk_2=fk_1;
fk_1=fk(i);
endm=find(((1+2*e)./fk)
n=min(m);
%壓縮比
for i=n:-1:2
p(i-1)=fk(i-1)/fk(i);
endp=fliplr(p); %按索引倒序排列
%搜尋a=a0+(1-p(1))*(b0-a0);
b=a0+p(1)*(b0-a0);
fa=fx(a);
fb=fx(b);
for i=2:length(p)
if p(i)==0.5
p(i)=p(i)-e;
endif fa在令
3、二分法,程式**如下:
fx=@(x) 4*x^3 - 42*x^2 + 120*x - 70;
a0=0;b0=2;
d=0.3; %要求區間長度
n=0;
while abs(b0-a0)>d
x0=(a0+b0)/2;
fx0=fx(x0);
if fx0>0 %壓縮搜尋區間
b0=x0;
else
a0=x0;
endn=n+1;
end
該方法迭代2次即可得到滿足要求的搜尋區間,為 宅男計畫 單峰函式三分
description 自從迷上了拼圖,jyy 就變成了個徹底的宅男。為了解決溫飽問題,jyy 不得不依靠叫外賣來維持生計。外賣店一共有n種食物,分別由1到n編號。第i種食物有固定的價錢pi和保質期si。第i種食物會在si天後過期。jyy 是不會吃過期食物的。比如 jyy 如果今天點了乙份保質期為0...
三分求單峰函式最值
二分可以求解單調函式最值,模擬不難想到三分可以求解單峰函式。何為單峰函式,如果函式f x 在區間 a,b 上只有唯一的最大值點 或最小值點 c,而在最大值點 或最小值點 c的左側,函式單調增加 減少 在點c的右側,函式單調減少 增加 則稱這個函式為區間 a,b 上的單峰函式 如果函式f x 在區間 ...
黃金分割法與單峰函式求極值
分割法 又稱 0.618 法 是求單峰函式極值的一種試探法,所謂單峰函式是指只有乙個峰值 區域性極小值也是全域性極小值,或者說只有唯一的區域性極小值 的函式,其嚴格定義為 定義 設 f x 是定義在 a b 上的函式,若 則稱 f x 為 a b 上的單峰函式。求 y x2 顯然為單峰函式 在 1,...