| 查看: 518 | 回复: 0 | |||
| 当前主题已经存档。 | |||
zhanglei02木虫 (小有名气)
|
[交流]
【软件学习】最小二乘法源程序(C++版本已搜无重复)
|
||
|
今天为了处理试验数据找了好久才找到,拿来和大家分享.还未调试. 源码如下: //*****************************************************************// // 物理实验数据处理软件 // //*****************************************************************// //-------------------------------------------------------------------- #include #include #include //-------------------------------------------------------------------- using namespace std; //-------------------------------------------------------------------- class Item { public: get_data(); double dX; double dY; }; //-------------------------------------------------------------------- class Experiment { public: Experiment(); void calculator(); void display(); ~Experiment(); private: double A; Item *Result; int length; }; //-------------------------------------------------------------------- Item :: get_data() { cout << "Please enter the experiment data." << endl; cout << "Please enter the X:" << endl; cin >> dX; cout << "Please enter the Y." << endl; cin >> dY; } //-------------------------------------------------------------------- Experiment :: Experiment() { cout << "请输入数据的组数,就是有多少组数据:" << endl; cin >> length; const int _number = length; Result = new Item[_number]; //对子对象的赋值 for(int counter = 0; counter < _number; ++counter) { Result[counter].get_data(); } } //-------------------------------------------------------------------- //************以下是线性回归的模块*****************************// void Experiment :: calculator() { const int _n = length; double *X_1 = new double[_n]; double *Y_1 = new double[_n]; { T_1[counter_1] = Result[counter_1].dT; R_1[counter_1] = Result[counter_1].dR; } //以下是线性回归的实现 double middle_1 = 0; double middle_2 = 0; double middle_3 = 0; double middle_5 = 0; double number = double(_n); for(int counter_2 = 0; counter_2 < number; ++counter_2) { middle_1 += (X_1[counter_2] / number); middle_2 += (Y_1[counter_2] / number); middle_3 += (X_1[counter_2] * Y_1[counter_2]) / number; middle_5 += (X_1[counter_2] * X_1[counter_2]) / number; } double middle_4 = (middle_1 * middle_1); double final_one = ((middle_1 * middle_2 - middle_3) / (middle_4 - middle_5)); A = final_one; //A表示斜率 delete [] X_1; delete [] Y_1; cout << "Calculator had been called." << endl; } //-------------------------------------------------------------------- void Experiment :: display() { cout << "The A which is resolved by this Experiment is :" << endl; cout << "-----------------" < //-------------------------------------------------------------------- Experiment ::~Experiment() { delete Result; } //-------------------------------------------------------------------- int main() { Experiment Careful; Careful.calculator(); Careful.display(); return 0; } //-------------------------------------------------------------------- 转至编程爱好者网站 http://www.programfan.com/ |
» 猜你喜欢
实验室接单子
已经有6人回复
假如你的研究生提出不合理要求
已经有11人回复
全日制(定向)博士
已经有5人回复
萌生出自己或许不适合搞科研的想法,现在跑or等等看?
已经有4人回复
Materials Today Chemistry审稿周期
已经有4人回复
参与限项
已经有3人回复
对氯苯硼酸纯化
已经有3人回复
求助:我三月中下旬出站,青基依托单位怎么办?
已经有12人回复
所感
已经有4人回复
要不要辞职读博?
已经有7人回复












回复此楼