| 查看: 521 | 回复: 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/ |
» 猜你喜欢
【博士招生】太原理工大学2026化工博士
已经有4人回复
什么是人一生最重要的?
已经有5人回复
280求调剂
已经有3人回复
网上报道青年教师午睡中猝死、熬夜猝死的越来越多,主要哪些原因引起的?
已经有8人回复
面上可以超过30页吧?
已经有11人回复
版面费该交吗
已经有15人回复
体制内长辈说体制内绝大部分一辈子在底层,如同你们一样大部分普通教师忙且收入低
已经有18人回复
为什么中国大学工科教授们水了那么多所谓的顶会顶刊,但还是做不出宇树机器人?
已经有10人回复













回复此楼