C++ 以费波纳茨数列为权重的加权均值计算方法 wMA
Posted 佩雷尔曼的信徒
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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(...)!\\n" << endl; // 函数返回指针,提示后面删除堆中新建指针 return pWMAV; } else { cout << "Error!\\n" << 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; }
以上是关于C++ 以费波纳茨数列为权重的加权均值计算方法 wMA的主要内容,如果未能解决你的问题,请参考以下文章