Exemplo n.º 1
0
        public EulerCount(double b, int N)
        {

            //Dane:
            //y’(x) = y(x) – sin(x) + cos(x), y(0) = 0

            h = b / N;

            //utworzenie tablicy Xk
            x = new double[N];
            solutionPoints = new double[x.Length];

            //wypelnienie tablicy Xk wartosciami wedlug wzoru Xk = k * h
            for (int k = 0; k < N; k++)
                x[k] = k * h;

            //deklaracja tablicy wynikow iteracji
            results = new double[N];
            results[0] = 0; //poniewaz w tresci zadania podane jest y(0)=0


            //nastepuje N iteracji wedlug wzoru:
            //
            // I wersja:
            // y(xk+1) = y(xk) + hf(xk, y(xk)) 
            // 
            // II wersja (przeksztalcenie p. Kropielnickiej): 
            // y(xk+1) = y(xk)(1+h) + h(-sin(xk) + cos(xk))
            //
            //wyniki zapisywane sa do tablicy results.

            
            for (int i = 1; i < N; i++)
            {
                // rozwiazanie
                solutionPoints[i -1] = Math.Sin(x[i -1]);
                //stosowana jest II wersja wzoru
                results[i] = results[i - 1] * (1 + h) + h * (-Math.Sin(x[i - 1]) + Math.Cos(x[i - 1]));
            }

            methodErrors = new double[N];

            for (int i=0; i < N; i++)
            {
                methodErrors[i] = Math.Abs(results[i] - Math.Sin(x[i]));
            }
            
            

            frmOutput outputForm = new frmOutput(this);
            outputForm.Show();
        }
Exemplo n.º 2
0
        public HeunCount(double b, int N)
        {

            //Dane:
            //y’(x) = y(x) – sin(x) + cos(x), y(0) = 0

            h = b / N;

            //utworzenie tablicy Xk
            x = new double[N];
            solutionPoints = new double[x.Length];

            //wypelnienie tablicy Xk wartosciami wedlug wzoru Xk = k * h
            for (int k = 0; k < N; k++)
                x[k] = k * h;

            //deklaracja tablicy wynikow iteracji
            results = new double[N];
            results[0] = 0; //poniewaz w tresci zadania podane jest y(0)=0
            
            for (int i = 1; i < N; i++)
            {
                // rozwiazanie
                solutionPoints[i -1] = Math.Sin(x[i - 1]);

                results[i] = Math.Pow((1 - h/2), -1) * (results[i - 1] + h/2 * (results[i - 1] - Math.Sin(x[i - 1]) + Math.Cos(x[i - 1])) + h/2 * (- Math.Sin(x[i]) + Math.Cos(x[i])));
            }

            methodErrors = new double[N];

            for (int i=0; i < N; i++)
            {
                methodErrors[i] = Math.Abs(results[i] - Math.Sin(x[i]));
            }       

            frmOutput outputForm = new frmOutput(this);
            outputForm.Show();
        }