- #include
- #include
- /*黄金分割法求最小值的C++程序,部分变量及函数书写并不规范*/
- //δ为题给精度
- int n = (lnδ/ln0.618 + 1) + 1;
- int i;
- float f(float ai, float bi)
- {
- a(i + 1) = ai + 0.618(bi - ai);
- return ai + 1;
- }
- float g(float ai, float bi)
- {
- b(i + 1) = ai + 0.382(bi - ai);
- return b(i + 1);
- }
- float F(float ai, float bi)
- {
- //题给的f(x)函数式;
- return ;
- }
- float A(float ai, float bi)
- {
- int i = 1;
- float result;
- L:do
- {
- a(i + 1) = f(float ai, float bi);
- b(i + 1) = g(float ai, float bi);
- float F1 = F(float ai, float bi);
- float F2 = F(float a(i + 1), float b(i + 1));
- ai = ai, bi = b(i + 1);
- i ++;
- }while(i <= n && F1 >= F2)
- if(i < n)
- {
- B(float ai, float bi);
- }
- else
- result = F2;
- return result;
- }
- float B(float ai, float bi)
- {
- do
- {
- a(i + 1) = f(float ai, float bi);
- b(i + 1) = g(float ai, float bi);
- float F1 = F(float ai, float bi);
- float F2 = F(float a(i + 1), float b(i + 1));
- ai = a(i + 1), bi = bi;
- i ++;
- }while(i <= n && F1 <= F2)
- if(i < n)
- {
- goto L;
- }
- else
- result = F1;
- return result;
- }
- void main()
- {
- int i = 1;
- float A(float ai, float bi);
- cout<<"最小值为:"<}
复制代码
这是C语言写的,你改写一下就行了 |