| 查看: 529 | 回复: 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/ |
» 猜你喜欢
航天502所 高瑛珂博士 婚内征婚 欺骗女性开房
已经有25人回复
26/27申博
已经有4人回复
地球科学部D01口青年基金,最低几A几B几C才能有几率中呀。
已经有4人回复
宿州学院学报
已经有6人回复
投稿文章被秒拒了
已经有5人回复
招收2026级博士生
已经有6人回复
博士申请
已经有5人回复











回复此楼