?? 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 + -