Лекции по C#(первая часть, версия 2.2)
.pdfПлощадь каждой трапеции, как известно, равна произведению полусуммы основания на высоту. Так для первой трапеции
S1= y0 y1 *h y0 y1 * b a |
||
2 |
2 |
n |
Весь интеграл может быть вычислен по формуле:
b |
|
|
y |
y |
1 |
|
y |
y |
2 |
|
|
y |
|
y |
n |
|
|
|
|
y |
|
y |
1 |
|
y |
|
y |
2 |
|
|
y |
y |
n |
|
||||||
a f ( x )dx |
|
|
0 |
|
h |
|
1 |
h |
... |
|
n 1 |
|
h h( |
|
0 |
|
|
|
1 |
|
... |
|
n 1 |
) |
||||||||||||||||
|
|
2 |
|
|
2 |
|
|
2 |
|
|
2 |
|
|
|
2 |
|
|
2 |
|
|||||||||||||||||||||
h( |
y0 2y1 |
2y2 |
... 2yn 1 yn |
) h( |
|
y0 yn |
|
2y1 |
|
|
2y2 |
|
... |
2yn 1 |
|
) |
|
|
|
|||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||||
|
b a |
|
y0 |
yn |
|
2 |
|
|
|
|
|
|
2 |
2 |
|
|
2 |
|
|
|
|
2 |
|
|
|
|
|
|
|
|||||||||||
|
( |
y1 y2 |
... yn 1 ) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||
|
n |
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Формула остаточного члена для метода трапеций имеет вид:
Н |
( b a |
) |
* * h 2 , |
|
|
||
12 |
|
|
где max f ( x)
x [ a,b]
В методе парабол (Симпсона) определение площади под графиком интегрируемой функции основано на замене двух смежных фрагментов участком параболы второго порядка (параболической трапецией). Прежде всего, для этого весь интервал интегрирования должен быть разделен на четное количество отрезков n=2m.
Уравнение параболы с осью, параллельной оси Oy, имеет вид: y Ax2 Bx C . Коэффициенты A, B и C однозначно определяются из условия, что парабола проходит через три заданные точки. Аналогичные параболы строятся и для других пар отрезков. Сумма площадей параболических трапеций и даст приближённое значение интеграла. При этом площадь одной параболической трапеции равна:
h
S 3 (y0 4y1 y2 ) ,
где y0 и y2- крайние ординаты, а y1- ордината кривой в середине отрезка. Доказательство:
91
Рис. 8.3 Параболическая трапеция Пусть система координат расположена так, как показано на рис. 3. Коэффициенты в
уравнение параболы y Ax2 Bx C определяются из следующих уравнений:
y0 y( h ) Ah 2 |
Bh C |
|
|
||||
y1 y(0) C |
|
|
|
|
|
|
|
y2 y(h) Ah2 Bh C |
|
|
|
|
|
||
Не вызывает сомнений , что |
Ah2 |
Bh C 4C Ah2 |
Bh C 2Ah2 6C |
||||
y |
0 |
4y y |
2 |
||||
|
|
1 |
|
|
|
С другой стороны, площадь параболической трапеции можно определить с помощью определённого интеграла:
|
|
|
|
Ax3 |
|
|
Bx2 |
|
|
h |
|
|
|
Ah3 |
Bh2 |
|
A( h)3 |
|
B( h)2 |
|||||||||||||||
|
S |
( |
|
|
|
|
|
|
|
|
Cx) |
|
|
|
|
|
|
|
|
|
|
Ch |
( |
|
|
|
C( h)) |
|||||||
|
|
3 |
|
2 |
|
|
3 |
|
|
2 |
3 |
2 |
||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
h |
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
Ah |
3 |
|
Bh2 |
|
|
Ah3 |
|
|
Bh2 |
|
|
|
|
|
|
|
|
|
||||||||||||||
b |
|
|
|
|
|
|
|
|
Ch ( |
|
|
|
|
|
|
|
|
|
|
|
|
Ch) |
|
|
|
|
|
|||||||
3 |
|
|
2 |
|
|
3 |
|
|
|
|
|
2 |
|
|
|
|
|
|
||||||||||||||||
S f( x)dx; |
|
|
3 |
|
|
|
|
|
3 |
|
|
|
|
|
|
|
3 |
|
|
|
|
|
|
|
|
|
|
|||||||
a |
|
Ah |
Ch |
Ah |
Ch |
2Ah |
|
2ch |
h |
(2Ah2 6c) |
|
|
|
|||||||||||||||||||||
a h; |
|
|
|
|
|
|
|
|||||||||||||||||||||||||||
3 |
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||
|
|
|
|
|
|
|
3 |
|
|
|
|
|
|
3 |
|
|
|
|
|
|
|
3 |
|
|
|
|
|
|
b h
Sh ( Ax2 Bx C )dx
h
Как видим, площадь параболической трапеции совпала с ранее полученной суммой с кратностью h/3. Следовательно:
h
S 3 (y0 4y1 y2 )
После этого можно записать формулу для приближенного вычисления интеграла методом парабол:
h b a 2m
|
x2 |
|
|
|
|
h |
|
|||
|
a x0 |
f( x)dx |
|
|
( y0 |
4y1 y2 ), |
||||
|
3 |
|||||||||
|
x4 |
|
|
|
h |
|
||||
|
ч2 |
f( x)dx |
|
|
( y2 4y3 y4 ), |
|||||
|
3 |
|||||||||
x2m b |
|
|
h |
|
|
|
|
|
||
2m 2 |
f ( x )dx |
|
|
( y2m 2 |
4 y2m 1 y2m ), |
|||||
3 |
||||||||||
|
|
|
|
|
|
|
|
Складывая левые и правые части, получим слева искомый интеграл, справа его приближённое значение:
92
b |
|
h |
|
|
a |
f( x)dx |
(( y0 4y1 y2 ) ( y2 4y3 y4 ) ... ( y2m 2 4y2m 1 y2m )) |
||
|
||||
|
3 |
|
h
3( y0 4y1 y2 y2 4y3 y4 ... y2m 2 y2m 1 y2m ))
h
3( y0 4y1 2y2 4y3 ... y2m 2 y2m 1 y2m )
или
b |
|
h |
|
|
|
|
|
|
|
|
|||
a |
f( x)dx |
( y0 y2m 2( y2 |
y4 ... y2m 2 ) 4( y1 y3 ... y2m 1 )) |
||||||||||
|
|
|
|||||||||||
|
3 |
|
|
|
|
|
|
|
|
||||
b |
|
b a |
|
|
|
|
|
|
|
||||
a |
f( x)dx |
( y0 y2m 2( y2 |
y4 ... y2m 2 ) 4( y1 y3 ... y2m 1 )) |
||||||||||
|
|
|
|||||||||||
|
|
6m |
|
|
|
|
|||||||
|
Остаточный член для этого метода находится по формуле: |
||||||||||||
|
|
|
|
|
|
|
|
P |
пр |
|
( b a )5 |
* |
|
|
|
|
|
f ( 4 )( x) |
|
180 n 4 |
|||||||
|
|
|
|
|
|
|
|
||||||
где max |
|
|
. |
|
|
|
|
||||||
|
x [ a,b] |
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
8.2 Программная реализация численного интегрирования
Постановка задачи. Для функции
f (x) 4x3 3x2 2x
на интервале [0, 10] рассчитать определенный интеграл приближённым и точным методом, оценить погрешность и вывести результаты на консоль. Для приближённого вычисления определённого интеграла использовать метод трапеций с кратностью 1000 без дополнительного члена.
Проектирование типов данных. Для решения поставленной задачи целесообразно использовать структурный тип следующей конструкции:
|
|
|
Integral |
|
|
|
Поля |
Свойства |
Методы |
|
|||
a |
|
|
h (get) |
Integral () |
Конструктор |
|
|
|
|||||
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
b |
|
|
ИнтТрапеции (get) |
fx() |
Функция в точке |
|
m |
|
|
|
Fx() |
Первообразная в |
|
|
|
|
||||
|
|
|
||||
|
|
ИнтЛейбниц (get) |
|
точке |
|
|
|
|
|
|
|
||
|
|
|
ToString() |
|
||
|
|
|
|
|
||
|
|
|
|
|
|
|
Рис. 8.4. Схема пользовательского типа
using System; class Интеграл1
{
struct Integral
{
93
double a, b; int m;
public Integral(double ina, double inb, int inm)
{
a = ina < inb ? ina : inb; b = ina < inb ? inb : ina; m = inm;
}
public override string ToString()
{
string s;
s = String.Format("Точное значение= {0:f3}\nПриближённое значение={1:f3}",
ИнтТрапеции, ИнтЛейбниц);
double Delta = (ИнтТрапеции - ИнтЛейбниц) / ИнтЛейбниц * 100; Delta = Math.Abs(Delta);
s += String.Format("\nПогрешность = {0:f3} %",Delta); return s;
}
public double fx(double x)
{
return 4 * x * x * x + 3 * Math.Pow(x, 2) + 2 * x;
}
public double Fx(double x)
{
return x * x * x * x + Math.Pow(x, 3) + x * x;
}
public double h
{
get
{
return (b - a) / m;
}
}
public double ИнтЛейбниц
{
get
{
return Fx(b) - Fx(a);
}
}
public double ИнтТрапеции
{
get
{
double sum = (fx(a)+fx(b))/2;
for (double i = a + h; i < b; i += h) sum += fx(i); sum *= h;
return sum;
}
}
}
94
static void Main()
{
Integral obj=new Integral(0,10,1000); Console.WriteLine(obj.ToString() );
}
}
На экране:
95
9 Приложение 1
Вариант тестовых заданий :
A.Укажите неправильное утверждение:
1.Идентификатор может содержать не более одной цифры
2.Идентификатор может содержать неограниченное количество символов,
3.Идентификатор не может совпадать с ключевым словом,
4.Идентификатор может содержать неограниченное количество цифр,
B.Какого типа на языке C# не существует:
1.ubyte
2.int
3.uint
4.byte
C.Укажите правильное утверждение:
1.Размер типа bool составляет 1 байт,
2.Размер типа bool составляет 1 бит,
3.Размер типа bool составляет 2 байта,
4.Размер типа bool составляет 4 байта,
D. Какое значение принимает переменная а в результате выполнения выражений : int a = 4 << 2 >> 1;
a *= 10 % 6;
1.32
2.9
3.1
4.0
E. Что появится в консольном окне в результате выполнения фрагмента: for (short j = 1; j <= 4; Console.WriteLine(), j++)
for (short i = 4; i >=j; i--) Console.Write( j%i);
№ ответа |
1 |
2 |
3 |
4 |
Содержимое |
1110 |
11 |
1111 |
10 |
окна |
220 |
222 |
222 |
120 |
|
30 |
3333 |
11 |
1230 |
|
0 |
44444 |
0 |
12340 |
F. Что появится в консольном окне в результате выполнения фрагмента: int[,] m = {{1,2,3},{4,5,6},{7,8,9}};
int c=0;
for (int i = 0; i < 3; i++)
for (int j = 0; j < i; j++ ) c += m[i,j]; Console.WriteLine(c);
Правильные ответы:
1. |
19 |
2. |
17 |
3. |
15 |
4. |
12 |
96