zoukankan      html  css  js  c++  java
  • 进退法例子

    进退法例子,遇到具体问题还得修改,以后最速下降梯度法的梯度方向是变化的,这是其中一个要考虑的改变。进退法具体算法:

    实现代码:

    #include "StdAfx.h"
    
    #include <stdio.h>
    #include <iostream>
    #include <Windows.h>
    
    #define N 2
    using namespace std;
    
    float testFunction(float z[N]){
        float f;
        f = z[0] * z[0] + z[1] * z[1] - 8 * z[0] - 12 * z[1] + 52; //函数
        return(f);
    }
    
    void main(){
        float x[N],s[N],f[N],z[N],t,a,b; // x保存初始点坐标,s保存搜索方向,f保存x_k+1和x的对应函数值,z表示更新后的坐标
                                         // t表示步长的每次迭代的增量,a和b保存搜索区间
        for(int i = 0; i < N; i++){
            cout << "请输入初始点x[" << i << "] = " << endl;
            cin >> x[i];
        }
    
        cout << "请输入步长增量: " << endl;
        cin >> t;
    
        for(int i = 0; i < N; i++){ 
            cout << "请输入搜索方向s[" << i << "] = " << endl;
            cin >> s[i];
        }
    
        a = 0; b = t;
        f[0] = testFunction(x);
    
        for(int i = 0; i < N; i++)
            z[i] = x[i] + b * s[i];  
    
        f[1] = testFunction(z);
    
        if(f[1] < f[0]){
            do{
                t = 2 * t;
                b = b + t;
                f[0] = f[1];
                for(int i = 0; i < N; i++)
                    z[i] = z[i] + b * s[i];
                f[1] = testFunction(z);
                if(f[0] > f[1])
                    a = b - t;
                else 
                    break;
            }while(f[0] > f[1]);
            cout << "A = " << a << "B = " << b << endl;
        }
        else{
            t = 0 - t;
            do{
                a = a + t;
                f[1] = f[0];
                for(int i = 0; i < N; i++)
                    z[i] = z[i] + a * s[i];
                f[0] = testFunction(z);
                if(f[1] > f[0]){
                    b = a - t;
                    t = 2 * t;
                }
                else
                    break;
            }while(f[1] > f[0]);
            cout << "A = " << a << " B = " << b << endl;
        }
        system("pause");
    }
  • 相关阅读:
    MediaInfo代码阅读
    HEVC与VP9之间的对比
    x264阅读记录-3
    x264阅读记录-2
    x264阅读记录-1
    Linux脚本程序
    VS2015 ASP.NET5 Web项目结构浅析
    VS2015 Apache Cordova第一个Android和IOS应用
    VS2015 C#6.0 中的那些新特性
    aehyok.com的成长之路三——框架结构
  • 原文地址:https://www.cnblogs.com/Key-Ky/p/3427544.html
Copyright © 2011-2022 走看看