📄 jiabutansuofa.txt
字号:
/用加步探索法确定一维最优化问题的搜索区间
#include<iostream>
#include<cmath>
using namespace std;
#define a 2 //定义加步系数a=2
double fun(double t) //计算原函数值
{
return t*t*t-2*t+1; //加步探索法的原函数
}
void ExploratorySearch(double ab[2])
{ //参数为一个一维数组,ab[0],ab[1]分别为所搜索出的区间上下限
double t1,t,t0=0.0; //t0为初始点
int h0=1; //初始步长
int k=0;
while(1)
{
t1=t0+h0; //向前走一步
if(fun(t1)<fun(t0)) //判断新点的函数值是否小于老点的函数值,若小于则加大探索步长,继续搜索
{
t=t0;
t0=t1;
h0=h0*a;
k++;
continue;
}
else if(fun(t1)>fun(t0)) //否则
{
if(k==0) //判断若是第一次搜索,则反向探索
{
h0=-h0;
t0=t1;
continue;
}
else //若不是第一次搜索,则已找到搜索区间,停止迭代
{
ab[0]=t;
ab[1]=t1;
break;
}
}
}
}
int main() //主函数
{
double ab[2];
ExploratorySearch(ab);
cout<<"所确定的区间为:("<<ab[0]<<","<<ab[1]<<")"<<endl;
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -