Нахождение интеграла - C#
Формулировка задачи:
Пишу программу в которой находится значение интеграла методом Симпсона, трапеци и левых прямоугольников
Привожу пример кода:
Левые прямоугольники
Трапеции
Симпсона
Вопрос вот в чет: после выдачи результата: например функции e^((-x)^2) в л.п. ответ- 1,75;Трапеци - 1,95; Симпсона - 1,93. Преподаватель сказал что погрешность результатов должна быть 0,01 или 0,001 то есть все ответы должны быть одинаковые.
Но у меня они разные, хотя если проверять в мат.калькуляторе то все правильно. Скажите почему так: у меня не корректно написана программа для нахождения метода или суть в самих методах и это нормально ???
public double lev1(int n, double a, double b) { double sum = 0; double h = (b - a) / n; for (double i = a; i < b; i = i + h) sum += F1(i); return sum * h; }
public double lev3(int n, double a, double b) { double h = (b - a) / n; double result = 0.0; result += F3(a) / 2.0; result += F3(b) / 2.0; for (int i = 1; i < n; ++i) result += F3(a + i * h); return h * result; }
public double lev8(int n, double a, double b) { double h; h = (b - a) / n; double I, I2 = 0.0, I4 = 0.0; I4 = F8(a + h); for (int k = 2; k < n; k += 2) { I4 += F8(a + (k + 1) * h); I2 += F8(a + k * h); } I = F8(a) + F8(b) + 4 * I4 + 2 * I2; I *= h / 3; return I; }
Решение задачи: «Нахождение интеграла»
textual
Листинг программы
class Program { static void Main(string[] args) { Console.Write("Введите начальное n:"); int n=Convert.ToInt32(Console.ReadLine()); Console.Write("Введите шаг, с которым будем искать:"); int shag = Convert.ToInt32(Console.ReadLine()); Console.Write("Введите a:"); double a = Convert.ToDouble(Console.ReadLine()); Console.Write("Введите b:"); double b = Convert.ToDouble(Console.ReadLine()); double res1, res2, res3; do { res1 = lev1(n, a, b); res2 = lev3(n, a, b); res3 = lev8(n, a, b); n = n + shag; } while ((Math.Abs(res1 - res2) > 0.0001)||((Math.Abs(res2 - res3) > 0.0001))); //Выводим результат Console.WriteLine(n); Console.WriteLine(res1); Console.WriteLine(res2); Console.WriteLine(res3); } public static double F1(double x) { return Math.Exp(Math.Pow(-x, 2)); } public static double lev1(int n, double a, double b) { double sum = 0; double h = (b - a) / n; for (double i = a; i < b; i = i + h) sum += F1(i); return sum * h; } public static double lev3(int n, double a, double b) { double h = (b - a) / n; double result = 0.0; result += F1(a) / 2.0; result += F1(b) / 2.0; for (int i = 1; i < n; ++i) result += F1(a + i * h); return h * result; } public static double lev8(int n, double a, double b) { double h; h = (b - a) / n; double I, I2 = 0.0, I4 = 0.0; I4 = F1(a + h); for (int k = 2; k < n; k += 2) { I4 += F1(a + (k + 1) * h); I2 += F1(a + k * h); } I = F1(a) + F1(b) + 4 * I4 + 2 * I2; I *= h / 3; return I; } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д