Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Regresja liniowa

Ostatnio zmodyfikowano 2014-02-13 23:56
Autor Wiadomość
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ć?

C/C++
# include <iostream>
# include <fstream>  // do otwarcia pliku
# include <stdlib.h>
# include <cstring> // do operacji na stringach
# include <cmath>
using namespace std;
int main() {
   
    string napis;
    int linie = 0; //liczy linie w pliku txt , zeby wiedziec ile mamy danych
    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; // tworzymy uchwyt do pliku
    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 ) { // sprawdzxa czy w pliku txt linia ma wiecej niz jeden znak w innym przypadku nie robi nic
               
                std::string str2 = str.substr( 0, 2 );
                std::string str3 = str.substr( 1, 3 );
                double ci, ai;
                ci = atof( str2.c_str() ); // zamiana typu zmiennej z string na  double , do obliczen
                ai = atof( str3.c_str() ); // zamiana typu zmiennej z string na  double . do obliczen
                cout << ci << "\t" << ai << endl;
                linie++; //Liczymy linie
                suma_ci += ci; //sumujemy ci
                suma_ai += ai; //sumujemy ai
            }
        }
        srednia_ci = suma_ci / linie; // oblicza srednia
        srednia_ai = suma_ai / linie; // oblicza srednia
        plik.close();
    }
   
    return( 0 );
}
P-104617
Monika90
» 2014-02-13 23:56:27
C/C++
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?:
C/C++
double ci, ai;
char separator;
while( plik >> ci >> separator >> ai )
{
    cout << ci << "\t" << ai << endl;
    linie++; //Liczymy linie
    suma_ci += ci; //sumujemy ci
    suma_ai += ai; //sumujemy ai
}
P-104618
« 1 »
  Strona 1 z 1