C#: Метод Симпсона. Нахождение интеграла.

Случилось интересное. Некоторое время назад я разместил код метода Симпсона на pascal. После его индексации на него стало приходить большое количество поисковых запросов (до 30% от всех за сутки), и я решил написать этот метод на основных языках. Пусть первым будет C#.

В коде объявлена дополнительная функция double Y(double p) Возвращает значение функции в данной точке. Т.е при решении ваших задач достаточно просто изменить формулу внутри этой функции.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace Simpson_cs
{
class Program
{
static double Y(double p)
{
return 1 / (1 + p * p);
}
static void Main(string[] args)
{
double x, a, b, h, s;
int n;
Console.WriteLine("Отрезок интегрирования [a,b] --> (a) =");
a = int.Parse(Console.ReadLine());
Console.WriteLine("Отрезок интегрирования [a,b] --> (b) =");
b = Double.Parse(Console.ReadLine());
Console.WriteLine("На сколько частей нужно разделить отрезок? n=");
n = int.Parse(Console.ReadLine());
 
h = (b - a) / n;
s = 0; x = a + h;
while (x < b)
{
s = s + 4 * Y(x);
x = x + h;
s = s + 2 * Y(x);
x = x + h;
}
s = h / 3 * (s + Y(a) - Y(b));
Console.WriteLine("Интеграл = {0}", s);
Console.ReadKey();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Simpson_cs
{
class Program
{
static double Y(double p)
{
return 1 / (1 + p * p);
}
static void Main(string[] args)
{
double x, a, b, h, s;
int n;
Console.WriteLine("Отрезок интегрирования [a,b] --> (a) =");
a = int.Parse(Console.ReadLine());
Console.WriteLine("Отрезок интегрирования [a,b] --> (b) =");
b = Double.Parse(Console.ReadLine());
Console.WriteLine("На сколько частей нужно разделить отрезок? n=");
n = int.Parse(Console.ReadLine());

h = (b - a) / n;
s = 0; x = a + h;
while (x < b)
{
s = s + 4 * Y(x);
x = x + h;
s = s + 2 * Y(x);
x = x + h;
}
s = h / 3 * (s + Y(a) - Y(b));
Console.WriteLine("Интеграл = {0}", s);
Console.ReadKey();
}
}
}

Полный архив с проектом и исполняемым файлом от Microsoft Visual Studio 2010.

Добавить комментарий