Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- namespace CM_Lab10
- {
- class Program
- {
- static double f(double x)
- {
- return Math.Sqrt(x * x * x) * Math.Sin(Math.PI * x / 2);
- }
- static double calcDeriv(double x, int order)
- {
- const double h = 1.0e-3;
- if (order == 0) return f(x);
- double y1 = calcDeriv(x - h, order - 1);
- double y2 = calcDeriv(x + h, order - 1);
- return (y2 - y1) / (2 * h);
- }
- static double rectanglesError(double borderA, double borderB, int N)
- {
- double h = (borderB - borderA) / N;
- double mid = (borderA + borderB) / 2;
- double error = (calcDeriv(mid, 2) / 24) * (borderB - borderA) * Math.Pow(h, 2);
- return Math.Abs(error);
- }
- static double trapezoidError(double borderA, double borderB, int N)
- {
- double error;
- double h = (borderA + borderA) / N;
- double mid = (borderB - borderA) / 2;
- error = -(calcDeriv(mid, 2) / 12) * (borderB - borderA) * Math.Pow(h, 2);
- return Math.Abs(error);
- }
- static double simpsonError(double borderA, double borderB, int N)
- {
- double error;
- double m;
- double max = calcDeriv(borderA + borderB, 4) / 2;
- if (Math.Abs(max) < Math.Abs(calcDeriv(borderA, 4)))
- {
- max = calcDeriv(borderA, 4);
- }
- else if (Math.Abs(max) < Math.Abs(calcDeriv(borderB, 4)))
- {
- max = calcDeriv(borderB, 4);
- }
- m = max - (Math.Pow(borderB - borderA, 5)) / (180 * Math.Pow(N, 4));
- error = -(Math.Pow(borderB - borderA, 5) * m) / (180 * Math.Pow(N, 4));
- return error;
- }
- static void leftRectanglesMethod(double borderA, double borderB)
- {
- Console.WriteLine("**********************");
- Console.WriteLine("Left Rectangles Method");
- Console.WriteLine("**********************\n");
- int N;
- Console.Write("Enter N: ");
- N = Convert.ToInt32(Console.ReadLine());
- double h = (borderB - borderA) / N;
- double I = 0;
- double Xi = borderA;
- for (int i = 0; i < N; i++)
- {
- I += f(Xi) * h;
- Console.WriteLine($"X{i} = {Xi:F4}\tY{i} = {f(Xi):F4}");
- Xi += h;
- }
- Console.WriteLine($"Integral from {borderA} to {borderB} = {I} ± {rectanglesError(borderA, borderB, N)}");
- }
- static void rightRectanglesMethod(double borderA, double borderB)
- {
- Console.WriteLine("***********************");
- Console.WriteLine("Right Rectangles Method");
- Console.WriteLine("***********************\n");
- int N;
- Console.Write("Enter N: ");
- N = Convert.ToInt32(Console.ReadLine());
- double h = (borderB - borderA) / N;
- double I = 0;
- double Xi = borderB;
- for (int i = 0; i < N; i++)
- {
- I += f(Xi) * h;
- Console.WriteLine($"X{i + 1} = {Xi:F4}\tY{i + 1} = {f(Xi):F4}");
- Xi -= h;
- }
- Console.WriteLine($"Integral from {borderA} to {borderB} = {I} ± {rectanglesError(borderA, borderB, N)}");
- }
- static void midpointRectanglesMethod(double borderA, double borderB)
- {
- Console.WriteLine("**************************");
- Console.WriteLine("Midpoint Rectangles Method");
- Console.WriteLine("**************************\n");
- int N;
- Console.Write("Enter N: ");
- N = Convert.ToInt32(Console.ReadLine());
- double h = (borderB - borderA) / N;
- double I = 0;
- double Xi = borderA + h / 2;
- for (int i = 0; i < N; i++)
- {
- I += f(Xi) * h;
- Console.WriteLine($"X{i + 1} = {Xi:F4}\tY{i + 1} = {f(Xi):F4}");
- Xi += h;
- }
- Console.WriteLine($"Integral from {borderA} to {borderB} = {I} ± {rectanglesError(borderA, borderB, N)}");
- }
- static void trapezoidMethod(double borderA, double borderB)
- {
- Console.WriteLine("****************");
- Console.WriteLine("Trapezoid Method");
- Console.WriteLine("****************\n");
- int N;
- Console.Write("Enter N: ");
- N = Convert.ToInt32(Console.ReadLine());
- double h = (borderB - borderA) / N;
- double I = 0;
- double Xi = borderA;
- for (int i = 0; i < N; i++)
- {
- I += h * (f(Xi) + f(Xi + h)) / 2;
- Console.WriteLine($"X{i + 1} = {Xi:F4}\tY{i + 1} = {f(Xi):F4}");
- Xi += h;
- }
- Console.WriteLine($"Integral from {borderA} to {borderB} = {I} ± {trapezoidError(borderA, borderB, N)}");
- }
- static void simpsonMethod(double borderA, double borderB)
- {
- Console.WriteLine("**************");
- Console.WriteLine("Simpson Method");
- Console.WriteLine("**************\n");
- int N;
- Console.Write("Enter N: ");
- N = Convert.ToInt32(Console.ReadLine()) * 2;
- double h = (borderB - borderA) / N;
- double I = 0;
- double Xi = borderA;
- int iter = 1;
- for (int i = 0; i < N; i += 2)
- {
- I += (h / 3) * (f(Xi) + 4 * f(Xi + h) + f(Xi + 2 * h));
- Console.WriteLine($"X{iter} = {Xi:F4}\tY{iter} = {f(Xi):F4}");
- Xi += 2 * h;
- iter++;
- }
- Console.WriteLine($"Integral from {borderA} to {borderB} = {I} ± {simpsonError(borderA, borderB, N)}");
- }
- static void Main(string[] args)
- {
- Console.OutputEncoding = System.Text.Encoding.UTF8;
- leftRectanglesMethod(1, 5);
- rightRectanglesMethod(1, 5);
- midpointRectanglesMethod(1, 5);
- trapezoidMethod(1, 5);
- simpsonMethod(1, 5);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment