MATLAB無約束一維極值之二次插值法

2021-10-23 06:37:34 字數 1568 閱讀 3039

設曲線f(x),尋找到其極值區間[x1,x2],使其滿足f(x1)>f((x1+x2)/2) , f((x1+x2)/2)f(x)=ax^2+bx+c,a b c 為係數。

ax1^2+bx1+c=f(x1)

ax2^2+bx2+c=f(x2)

ax3^2+bx3+c=f(x3)

寫成矩陣形式

x1^2 x1  1         a         f(x1)

x2^2 x2  1    *    b    =   f(x2)

x3^2 x3  1         c          f(x3)

化簡為vander(x1 x2 x3) *[a b c]'=[f(x1)  f(x2)  f(x3)]'

利用matlab求出該表示式之後,求得f(x)的極小值點xp。

判斷f(xp)與f((x1+x2)/2)的值

若f(xp)>f((x1+x2)/2)  1、xp<(x1+x2)/22、(x1+x2)/2若f(xp)2、(x1+x2)/2原則就是保證函式值呈現高帝高的分布,不斷迭代即可。

clc

clear

f=@(x) x.^3-6*x+9;

ezplot(f,[-100 100])

[x,fx]=min_erci(f,[0 5],100) % a 函式值 b橫座標

function [x,result]=min_erci(f,x0,k) %x0為初始區間端點,k為迭代次數

x1=x0(1);

x3=x0(2);

x2=(x1+x3)/2;

n=1;

while n < k

% 確定拋物線的係數

f1=f(x1);

f2=f(x2);

f3=f(x3);

a=[x1^2 x1 1;

x2^2 x2 1;

x3^2 x3 1;];

b=[f1;f2;f3];

xs=a\b; %求出拋物線係數a b c 存放在xs中

xp=-xs(2)/(2*xs(1)); %二次多項式的極值點在x=-b/2a

fp=f(xp); %求出該點函式值

if abs(xp-x2) < 1e-8 %該點滿足極值點條件

x=xp; %輸出極值點

result=f(x); %輸出函式值

return;

endif fp > f2 %判斷新的迭代區間

if xp < x2

x1=xp;

else

x3=xp;

endelse

if xp < x2

x3=x2;

x2=xp;

else

x1=x2;

x2=xp;

endend

n=n+1; %迭代次數+1

endif n == k %如果超出迭代次數

x=; %輸出空

result=;

disp('超過迭代次數');

endend

MATLAB 無約束一維極值問題

無約束一維極值問題 極值問題表示式 min f x x,x x1 x2 一維極值的搜尋方式包括線性搜尋和非線性搜尋,線性搜尋包含 分割法 斐波那契法和牛頓法,非線性方法包含拋物線法和三次樣條插值。1 進退法 演算法原理 進退法就是用來確定搜尋區間的演算法,理論依據 f x 為函式有一極值,且 a b...

MATLAB無約束多維極值之牛頓法

無約束優化問題的目標函式為 多維極值的牛頓法,不同於之前介紹過的梯度下降法,該方法引入了二階導數的資訊,假設當前迭代到第 kk 次,將目標函式在自變數 xk 處展開為二階泰勒級數 f x 兩端同時對 x求導,導數為零求得的極值點就是下一次迭代的取值 xk 1。式中將 則式 2 可化簡為 綜上,式中 ...

無約束最優化二

2.1 a k合理性討論 如下將要討論關於a k需要滿足的兩個條件,當a k滿足這兩個條件後,就可以認為從x k點移動到x k 1點的步長已經確定下來了。第乙個條件為sufficient decrease condition,從直觀角度來看,該條件主要要用保證x k 1點的函式值要小於x k點的函式...