拋物線法也叫二次插值法,二次插值法的基本思想是: 在搜尋區間中不斷地使用二次多項式去近似目標函式, 並逐步用插值多項式的極小點去逼近線搜尋問題mi
ns>0ϕ
(s)=
f(xk
+sdk
)的極小點. 下面我們詳細介紹這一方法.
設已知三點 s0
,s1=
s0+h
,s2=
s0+2
h(h>0)
處的函式值ϕ0
,ϕ1,
ϕ2,且滿足 ϕ1
<ϕ0
,ϕ1<ϕ2
.上述條件保證了函式
ϕ在區間[s
0,s2
]上是單峰函式. 則滿足上述條件的二次lagrabge
插值多項式為 q(
s)=(
s−s1
)(s−
s2)2
h2ϕ0
−(s−
s0)(
s−s2
)h2ϕ
1+(s
−s0)
(s−s
1)ϕ2
q(s)
的一階導數為 q′
(s)=
2s−s
1−s2
2h2ϕ
0−2s
−s0−
s2h2
ϕ1+2
s−s0
−s12
h2ϕ2
令q′(
s)=0
解得 s¯=
(s1+
s2)ϕ
0−2(
s0+s
2)ϕ1
+(s0
+s1)
ϕ22(
ϕ0−2
ϕ1+ϕ
2)=(
2s0+
3h)ϕ
0−2(
2s0+
2h)ϕ
1+(2
s0+h
)ϕ22
(ϕ0−
2ϕ1+
ϕ2)=
s0+(
3ϕ0−
4ϕ1+
ϕ2)h
2(ϕ0
−2ϕ1
+ϕ2)
=s0+
h¯這裡 h¯=
(3ϕ0
−4ϕ1
+ϕ2)
h2(ϕ
0−2ϕ
1+ϕ2
)=(4
ϕ1−3
ϕ0−ϕ
2)h2
(2ϕ1
−ϕ0−
ϕ2)>0又
q(s)
的二階導數為 q′′
(s)=
ϕ0h2
−2ϕ1
h2+ϕ
2h2=
ϕ0−2
ϕ1+ϕ
2h2>0故
q(s)
為凸二次函式, 從而sm
in 是q
(s) 的全域性極小點.
注意到s¯=
s0+h
¯比s0
更好地逼近s∗
. 故可用s¯
,h¯ 分別替換s0
和h並重複上述計算過程, 求出新的$\overline 和新的\overline. 重複這一迭代過程, 直到得到所需的精度為止. 值得說明的是, 這一演算法中目標函式的一階導數用來隱式地確定二次插值多項式的極小點, 而演算法的程式實現中並不需要使用導數值.
步驟0,由進退法確定三點s0
, 對應的函式值ϕ0
,ϕ1,
ϕ2滿足 ϕ1
<ϕ0
,ϕ1<ϕ2
.設定容許誤差0⩽
ϵ≪1.
步驟1,若|s
2−s0
|<
ϵ,停算,輸出s∗
≈s1
步驟2,計算插值點. 根據s¯
公式計算s¯
和ϕ¯=
ϕ(s¯
).若ϕ1
≤ϕ¯,轉步驟4;否則,轉步驟3
步驟3,若s1
>s¯
,則s2=
s1,s
1=s¯
,ϕ2=
ϕ1,ϕ
1=ϕ¯
,轉步驟1;否則,s0
=s1,
s1=s
¯,ϕ0
=ϕ1,
ϕ1=ϕ
¯,轉步驟1
步驟4,若s1
,則s2=
s¯,ϕ
2=ϕ¯
,轉步驟1;否則,s0
=s¯,
ϕ0=ϕ
¯,轉步驟1.
function
[s,phis,i,e,s]=paowxf
(phi,a,b,delta,epsilon)
%功能: 精確線搜尋之拋物線法
%輸入: phi 是目標函式, a和b是搜尋區間的端點
% delta,epsilon是容許誤差
%輸出: i是迭代次數
% s是近似極小點, phis是對應的近似極小值;
% e=[ds,dphi], 分別是s和phis的誤差限分別是s, phis的誤差界;
% s是迭代向量
s0=a;s2=b;
h=(s2-s0)/2;s1=s0+h;
phi0=feval(phi,s0);phi1=feval(phi,s1);phi2=feval(phi,s2);bars=s0;
i=0;
while(1)
i=i+1;
s(i,:)=[s0,s1,s2,bars];
%step1
if (abs(s2-s0)>=epsilon) || ((phi2-phi0)>=delta)
%step2
% h=(s2-s0)/2;s1=s0+h;
% phi0=feval(phi,s0);phi1=feval(phi,s1);phi2=feval(phi,s2);
barh=h*(4*phi1-3*phi0-phi2)/(2*phi1-phi0-phi2)/2;
bars=s0+barh;
barphi=feval(phi,bars);
if phi1<=barphi
%step4
if s1else
s0=bars;
phi0=barphi;
h=h-barh;
s2=s1+h;
phi2=feval(phi,s2);
endelse
%step3
if s1>bars
if h>2*barh
s1=bars;h=barh;s2=s1+h;
phi1=barphi;phi2=feval(phi,s2);
else
s1=bars;h=h-barh;s2=s1;s0=s1-h;
phi1=barphi;phi2=phi1;phi0=feval(phi,s0);
endelse
if2*barh<3*h
s0=s1;h=barh-h;s1=bars;s2=s1+h;
phi0=phi1;phi1=barphi;phi2=feval(phi,s2);
else
s1=bars;h=2*h-barh;s0=s1-h;
phi1=barphi;phi0=feval(phi,s0);
endendend
else
break;
endends=s1;
phis=feval(phi,s1);
ds=abs(s-s0);
dphi=abs(phi1-phi0);
e=[ds dphi];
>> phi = @(x)3*x^2-2*tan(x);
>> delta=1e-5;epsilon=1e-4;
>> a=0;b=1;
>> [s,phis,i,e,s]=paowxf(phi,a,b,delta,epsilon);
>> [s,phis,i,e]
ans =
columns 1 through 3
0.389493192257377 -0.365810354364081
8 columns 4 through 5
1.78999870481533e-10
1.11022302462516e-16
程式對於函式ϕ(
x)=3
x2−2
tan(
x),在區間[0
,1],進過8次迭代便可得到較高精度解。
馬昌鳳. 最優化方法及其matlab程式設計[m]. 科學出版社, 2010. ↩
cad拋物線曲線lisp CAD能畫拋物線嗎?
方法一 1.在excel生成座標x,y列 x為分段值控制曲線精度,y為公式計算的對應值 2.假定excel中x數值在a列,y數值在b列,生成acad的pline繪圖資料,方法如下 1 在新的列單元 如c列 輸入公式 an bn n為資料的行號 按次辦法將an及bn單元格中的資料在cn單元格中形成 x...
拋物線交點式公式 拋物線公式大全
拋物線方程是指拋物線的軌跡方程,是一種用方程來表示拋物線的方法。在幾何平面上可以根據拋物線的方程畫出拋物線。拋物線在合適的座標變換下,也可看成二次函式影象。拋物線方程公式 一般式 ax2 bx c a b c為常數,a 0 頂點式 y a x h 2 k a h k為常數,a 0 交點式 兩根式 y...
android 拋物線動畫
拋物線動畫 根據拋物線方程式得出x軸,y軸的座標 x,y 再根據動畫使其移動,就完成乙個簡單的軌跡動畫.實現思路 自定義個view,隨著x軸的水平移動根據拋物線方程得到y軸的值,利用path畫出一條軌跡 在高出這條拋物線小人的高度再畫一天拋物線,這條拋物線就是小人的運動軌跡。直接上 自定義view ...