一維搜索方法
A. 一維搜索中黃金分割法和二分法哪個快
二分法是用來求根的,而黃金分割法是用來求極值的。如果非要用黃金分割法來求根的話會比二分法慢一個常數
B. 對下列一維問題進行一維搜索
一維優化方法是優化方法中最基本的方法。該類 方法不僅用來解決一維目標函數的求優問題,而且更 常用於多維優化問題中在既定方向上尋求最優步長的 一維搜索。
C. 最優化一維搜索中試探法好還是解析法好
黃金分割法適用於[a,b]區間上的任何單谷函數求極小值問題,對函數除專要求「單谷」外不做其他屬要求,甚至可以不連續。因此,這種方法的適應面非常廣。黃金分割法也是建立在區間消去法原理基礎上的試探方法,即在搜索區間[a,b]內適當插入兩點a1,a2...
D. 能用一維搜索方法編程 minf( t)=t2(是t的平方)-10t+36 用C語言編程 謝謝啦~!
用搜索方法?是一個數一個數的計算嗎?對於這個方程很明顯直接套公式效率更高,搜索還要考慮邊界,精度也更加麻煩
E. matlab編程,使用二次規劃法程序和一維搜索程序可以直接使用MATLAB的quadprog()和fminbnd()函數。
這種帶有非線性約束的應該用fmincon求解。
function[c,ceq]=mycon(x)
L=[1001e31e310*ones(1,5)]';
U=[1e41e41e41e3*ones(1,5)]';
c=[25*(x(4)+x(6))-1e4
25*(-x(4)+x(5)+x(7))-1e4
-x(5)+x(8)-100
100*x(1)-x(1)*x(6)+833.33252*x(4)-83333.333
x(2)*x(4)-x(2)*x(7)-1250*x(4)+1250*x(5)
x(3)*x(5)-x(3)*x(8)-2500*x(5)+1.25e6
x-U
L-x];
ceq=[];
end
主程序調用:
f=@(x)sum(x(1:3));
x=fmincon(f,(L+U)/2,[],[],[],[],[],[],@mycon,optimset('Display','off'))
f(x)
結果與標准答案一致
F. 我是Matlab新手,請問matlab一維搜索中的黃金分割法如何確定目標函數
黃金分割法適用於[a,b]區間上的任何單谷函數求極小值問題,對函數除要求「單谷」外不做其他要求,甚至可以不連續。因此,這種方法的適應面非常廣。黃金分割法也是建立在區間消去法原理基礎上的試探方法,即在搜索區間[a,b]內適當插入兩點a1,a2,並計算其函數值。a1,a2將區間分成三段,應用函數的單谷性質,通過函數值大小的比較,刪去其中一段,是搜索區間得以縮小。然後再在保留下來的區間上作同樣的處理,如此迭代下去,是搜索區間無限縮小,得到極小點的數值近似解。
以下是函數輸入輸出參數表:
function xmin = goldSearch(fun,a,b,eps)
% ---input
% fun 所求的目標函數
% a 區間的下界
% b 區間的上界
%eps 區間的最小閥值長度
% ---output
% xmin 函數取極小值時自變數的值
詳細參考http://wenku..com/link?url=--sROGCDZO3tNaGe
黃金分割法是用於一元函數f(x)在給定初始區間[a,b]搜索極小點xmin的一種方法。它是優化計算中的經典演算法,以演算法簡單、收斂速度均勻、效果較好而著稱,是許多優化演算法的基礎,它只適用於一維區間上的凸函數,即只在單峰區間內才能進行一維尋優,其收斂效率較低。其基本原理是:依照「去劣存優」原則、對稱原則、以及等比收縮原則來逐步縮小搜索區間。
G. 關於Powell法中一維搜索的方法(matlab)
不影響,只要你的函數性質比較好,比如說充分光滑,有沒有解析表達式並不重要。
fminsearch的算內法你可以容看幫助文件,上面寫的有
Algorithm
fminsearch uses the simplex search method of [1]. This is a direct search method that does not use numerical or analytic gradients.
simplex method 就是單純形法了
simplex method 一般是對多元函數優化的,Powell一般是對一元函數
課本上的simplex method一般都是針對線性規劃的,不過也有一些可以針對非線性的,比較復雜就是了,我也不明白 :)
其實優化是個很復雜的很專業的東西,MM不用搞那麼清楚,看例子會照著做就行了,如果什麼都重新自己做,還要Matlab幹嘛?
H. 求解一維搜索方法程序考核題。
#include <iostream.h>
double jisuanEF(double AG)
{
return AG*AG*AG*AG-5*AG*AG*AG+4*AG*AG-6*AG+60;
}
double search(double min,double max,double e)
{
double a,b,a1,a2,f1,f2,temp;
a=min;
b=max;
a1=b-0.618*(b-a);
f1=jisuanEF(a1);
a2=a+0.618*(b-a);
f2=jisuanEF(a2);
for(;;)
{
if(f1<=f2)
{
b=a2;
a2=a1;
f2=f1;
a1=b-0.618*(b-a);
f1=jisuanEF(a1);
}
else
{
a=a1;
a1=a2;
f1=f2;
a2=a+0.618*(b-a);
f2=jisuanEF(a2);
}
if(b-a<=e)
break;
}
temp=(b+a)/2;
return temp;
}
void main()
{
double d,c,g;
d=search(2.0,8.0,0.01);
c=jisuanEF(d);
g=jisuanEF(3.2796);
cout<<"c=";
cout<<c<<" ";
cout<<"g=";
cout<<g;
}