一维搜索方法
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;
}