zoukankan      html  css  js  c++  java
  • C++ 以费波纳茨数列为权重的加权均值计算方法 wMA

    #pragma once
    
    #include <iostream>
    
    using namespace std;
    
    template <typename T> double *wMA(T &tArray, int iWMALen) // 应用模版数据类型 typename T 引用外部数组 tArray
    {
        int iArrayLen = sizeof(tArray) / sizeof(tArray[0]); // 计算传入数组长度 = 总数组字节大小 / 首元素字节大小
        cout << "Length of import array is: " << iArrayLen << endl;
        cout << "Import array is:";
        for(int i = 0; i < iArrayLen; i++)
        {
            if(i == 0)
                cout << "[" << tArray[i] << " ";
            else if(i == iArrayLen - 1)
                cout << tArray[i] << "]" << endl;
            else
                cout << tArray[i] << " ";
        }
        if(iArrayLen >= iWMALen && iWMALen > 0) // 计算前提,数组长度不能小于均值要计算的天数
        {
            int *pWMAW = new int[iWMALen]; // 把费波纳茨数列个值做权重
            int iSumW = 0; // 费波纳茨数列的算术和
            switch(iWMALen)
            {
                case 1:
                {
                    cout << "Creating fabonacci numbers:" << endl;
                    pWMAW[0] = 1;
                    cout << "[0] = " << pWMAW[0] << endl;
                    iSumW = pWMAW[0];
                    break;
                }
                case 2:
                {
                    cout << "Creating fabonacci numbers:" << endl;
                    pWMAW[0] = 1;
                    pWMAW[1] = 1;
                    cout << "[0] = " << pWMAW[0] << endl;
                    cout << "[1] = " << pWMAW[1] << endl;
                    iSumW = pWMAW[0] + pWMAW[1];
                    break;
                }
                default:
                {
                    cout << "Creating fabonacci numbers:" << endl;
                    pWMAW[0] = 1;
                    pWMAW[1] = 1;
                    cout << "[0] = " << pWMAW[0] << endl;
                    cout << "[1] = " << pWMAW[1] << endl;
                    iSumW = pWMAW[0] + pWMAW[1];
                    for(int i = 2; i < iWMALen; i++)
                    {
                        pWMAW[i] = pWMAW[i - 1] + pWMAW[i - 2]; // 费波纳茨通项公式算法
                        cout << "[" << i << "] = " << pWMAW[i] << endl;
                        iSumW += pWMAW[i];
                    }
                    break;
                }
            }
            cout << "The sum of those fabonacci numbers is: " << iSumW << endl;
            int n = iWMALen; // 固定均值计算天数,因为后面这个 iWMALen 会逐步增加变动
            double *pWMAV = new double[iArrayLen]; // 用于保存均值
            cout << "The wMA values are:" << endl;
            while(iWMALen <= iArrayLen)
            {
                double iSumV = 0;
                for(int i = iWMALen - n, j = 0; i < iWMALen; i++, j++)
                {
                    iSumV += tArray[i] * pWMAW[j];
                }
                pWMAV[iWMALen - 1] = iSumV / iSumW; // 算法 wMA = (数组个值 * 费波纳茨数列个值权重)的前 n 项和 / 费波纳茨数列加和
                cout << "wMA[" << iWMALen - 1 << "] = " << pWMAV[iWMALen - 1] << endl;
                iWMALen++;
            }
            delete(pWMAW); // 该指针作用到此为止,释放指针
            cout << "Remeber to delete the return pointer of wMA(...)!
    " << endl; // 函数返回指针,提示后面删除堆中新建指针
            return pWMAV;
        }
        else
        {
            cout << "Error!
    " << endl;
            return NULL;
        }
    }
    
    int main()
    {
        int array[] = {1, 2, 5, 3, 4, 6, 18, 7};
        double *p = wMA(array, 5);
        delete(p);
        cin.get();
        return 0;
    }

    360截图20160614220417959

  • 相关阅读:
    ubuntu python opencv3 cv2.cv2 has no attribute 'face' 'cv2.face' has no attribute 'createEigenFaceRecognizer'
    python opencv3 摄像头人脸检测
    python opencv3 静态图片检测人脸
    python opencv3 grabcut前景检测
    python opencv3 圆检测
    python opencv3 直线检测
    lua--clone
    LoadingController
    粒子加到骨骼中
    CCShatteredTiles3D
  • 原文地址:https://www.cnblogs.com/blog-3123958139/p/5585634.html
Copyright © 2011-2022 走看看