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

Program liczący sumę funkcji

Ostatnio zmodyfikowano 2015-10-25 15:43
Autor Wiadomość
Marzgra
Temat założony przez niniejszego użytkownika
Program liczący sumę funkcji
» 2015-10-24 23:11:47
Witam
Mam zadnie, aby policzyć funkcję: https://goo.gl/atlKaU ,gdzie 0.001 to błąd, 0.2 krok, a [-1,1] przedział, a wyniki zapisać do pliku txt.
Program niby napisałam, ale na podstawie cudzego programu, więc nie do końca go rozumiem (wiem, najgłupsze co mogłam zrobić)
i teraz moje pytania:
1) jak tutaj działa suma
2) co się dzieje w drugiej części pętli do while
3) co zrobić gdy w pliku zero zapisywane jest jako "5.55112e-017"

kod:
C/C++
#include <iostream>
#include <fstream>
#include <math.h>
#include <conio.h>
using namespace std;

int k;
double x = - 1.0, x2 = 1.0, h = 0.2, blad = 0.001, suma, s;
double funkcja( double x, int k )
{
    return(( pow( - 1, k ) * k ) /( pow( k, 2 ) - 1 ) * sin( k * x ) );
}
int main( int argc, char ** argv )
{
    fstream wyniki;
    wyniki.open( "wyniki.txt", ios::out );
    if( !wyniki )
    {
        cerr << "Nieudane otwarcie pliku do zapisu \n";
        return 1;
    }
    for( x; x <= x2; x += h )
    {
        k = 2;
        do
        {
            s = funkcja( x, k );
            suma = suma + funkcja( x, k );
            k++;
        }
        while( fabs( s ) >= blad );
       
        wyniki << x << "\t" << suma << "\n";
    }
    cout << "dane zapisane";
    getch();
    return 0;
}
z góry dziękuję za odpowiedzi!!
P-139128
Monika90
» 2015-10-25 14:00:59
Nie zerujesz zmiennej suma, przed każdym wejściem do pętli do-while należy tę zmienna wyzerować.

co zrobić gdy w pliku zero zapisywane jest jako "5.55112e-017"
To znaczy że to nie jest zero. Wielokrotne dodawanie 0.2 do zmiennej x powoduje narastanie błędu zaokrągleń.
Jeżeli do -1 pięć razy dodasz 0.2 to wynikiem nie jest 0 tylko 5.55112e-017. Żeby temu zapobiec można użyć zmiennej całkowitoliczbowej z przedziału [-10, 10] i dzielić ją przez 10.0:
C/C++
for( int i = - 10; i <= 10; i += 2 )
{
    x = i / 10.0;
   
    //tutaj obliczasz wartość funkcji dla x
   
    wyniki << x << "\t" << suma << "\n";
}
P-139146
Marzgra
Temat założony przez niniejszego użytkownika
» 2015-10-25 15:43:53
Dziękuję, program śmiga aż miło ;)
P-139156
« 1 »
  Strona 1 z 1