[C++] Regresja liniowa
Ostatnio zmodyfikowano 2014-02-13 23:56
skaa Temat założony przez niniejszego użytkownika |
[C++] Regresja liniowa » 2014-02-13 22:57:25 Witam, chciałam bardzo prosić o pomoc, chciałabym stworzyć program wykorzystujący regresją liniową do obliczania współczynników a i b z równania y = ax + b. Mam jednak kilka problemów, z którymi nie wiem jak sobie poradzić, w pliku z danymi mam 2 kolumny: wartości x i y, to jest: 1|11 2|12 3|13 4|14 5|15 6|16, jednak program wczytuje mi tylko wartości x. I chciałabym zapytać czy jest możliwość aby kolumny na górze były zapisane x|y, jeśli tak, to jak zrobić to, aby program mógł je odczytać? # include <iostream> # include <fstream> # include <stdlib.h> # include <cstring> # include <cmath> using namespace std; int main() { string napis; int linie = 0; double suma_ci = 0; double suma_ai = 0; double srednia_ci = 0; double srednia_ai = 0; double suma_x = 0; double suma_y = 0; float a = 0; float b = 0; fstream plik; plik.open( "regresja.txt", ios::in ); if( plik.good() ) { cout << "Dane z pliku:" << endl; while( !plik.eof() ) { getline( plik, napis ); std::string str = napis; if( str.length() > 1 ) { std::string str2 = str.substr( 0, 2 ); std::string str3 = str.substr( 1, 3 ); double ci, ai; ci = atof( str2.c_str() ); ai = atof( str3.c_str() ); cout << ci << "\t" << ai << endl; linie++; suma_ci += ci; suma_ai += ai; } } srednia_ci = suma_ci / linie; srednia_ai = suma_ai / linie; plik.close(); } return( 0 ); }
|
|
Monika90 |
» 2014-02-13 23:56:27 std::string str2 = str.substr( 0, 2 ); std::string str3 = str.substr( 1, 3 );
to zakłada, że pierwsza liczba znjaduje się na pozycji 0 i zajmuje co najwyżej 2 znaki, a druga liczba znajduje się na pozycji 1 i ma długość co najwyżej 3 znaków, to założenie jest błędne, bo u ciebie na pozycji 1 jest znak | Czy nie lepiej było by tak?: double ci, ai; char separator; while( plik >> ci >> separator >> ai ) { cout << ci << "\t" << ai << endl; linie++; suma_ci += ci; suma_ai += ai; }
|
|
« 1 » |