Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекции по C#(первая часть, версия 2.2)

.pdf
Скачиваний:
209
Добавлен:
23.02.2015
Размер:
1.39 Mб
Скачать

Площадь каждой трапеции, как известно, равна произведению полусуммы основания на высоту. Так для первой трапеции

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