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(); }
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(); }