確定單峰函式的極小點所在的區間

2021-09-29 07:14:51 字數 1383 閱讀 4047

確定函式

目標函式為一元單值函式,該問題即為一維問題,可用一維搜尋法進行迭代求解,下面用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,...