設曲線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點的函式...