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

WinRAR ZIP archi / 2011_Лабораторные по инф_паскаль_Ч2

.pdf
Скачиваний:
30
Добавлен:
14.02.2015
Размер:
264.15 Кб
Скачать

program N_19_4;

var

S, d: string;

len, I, N, N1, N2: integer;

begin

//writeln('Подсчет общего числа слов и начинающихся на');

//writeln('заданную букву, числа букв в тексте'); write('Строка:');

readln(s); writeln('Буква:'); readln(d);

d := UpperCase(d);

S := UpperCase(s);// перевод текста в верхний регистр len := length(s);

//writeln('Длина строки-"', S, '"', len:3, '

символов');

 

 

S :=

' ' + S;

do

 

for i := 1 to len+1

 

begin

(copy(s, i, 1)

= ' ') and (copy(s, i + 1, 1) <> '

if

') then N += 1; //

число слов

n1 := n1 + 1;

if

(copy(s, i, 2)

= (' '+d)) then

{число

слов на заданную букву}

N2 := N2 + 1; //

if

(copy(s, i, 1)

<> ' ') then

число букв в тексте

 

 

end;

 

тексте-', N:4, ' слов');

writeln('В заданном

writeln('На букву ', d, ' начинается', n1:4, ' слов'); writeln('В заданном тексте-', N2:4, ' букв');

end.

Задачи

1.Определить, сколько раз в тексте встречается буква A.

2.В заданном тексте везде заменить слово A1 на слово A2 (длины слов совпадают).

3.Определить количество слов в тексте.

4.Определить, какой процент слов в тексте заканчивается на букву М (слова разделены пробелами).

5.Определить, сколько раз в тексте встречается заданное слово (слова разделены пробелами).

6.В тексте убрать лишние пробелы между словами, оставив по одному.

31

7.Определить, какой процент слов в тексте начинается на букву K. Слова разделены пробелами.

8.Разбить исходный текст на строки длиной не более 20 символов. Перенос на новую строку осуществлять на месте пробела (слова не переносить).

Контрольные вопросы

1.Что такое строковая константа?

2.Какие стандартные функции определены для строковых величин? Как выполняется операция конкатенации?

3.Как выделить символы, расположенные, начиная с заданной позиции?

4.Как вставить в текст последовательность символов?

32

Лабораторная работа №20 Численное интегрирование. Методы трапеций и парабол (Симпсона). 2 часа.

Цель работы: получение практических навыков разработки и выполнения компьютерной программы.

Предмет и содержание работы: разработка и отладка компьютерной программы для численного интегрирования функций.

Технические средства и программное обеспечение: персональный компьютер с операционной системой Windows™, система Pascal ABC.NET.

В случае, когда функцию нельзя проинтегрировать аналитическим путем или, когда аналитическое интегрирование требует большого объема работы, пользуются численными методами. Эти методы дают возможность вычислить определенный интеграл, если он существует и если численные значения подынтегральной функции известны.

Формулы, при помощи которых ведется численное интегрирование, исторически получили название квадратурных формул. Из них наиболее распространенными и удобными являются формула трапеций и формула парабол, или формула Симпсона.

Определенный интеграл

 

b

 

 

 

S = òf(x)dx

(20.1)

 

 

a

 

 

численно

равен площади криволинейной трапеции aABb

(рисунок

20.1).

 

 

 

Для

того, чтобы найти приближенное значение площади S, разде-

лим отрезок [a,b] точками x0=a, x1, x2, ...., xn-1, xn=b на n равных частей, восставим из этих точек ординаты y0, y1, y2, ...., yn-1, yn и соединим последовательно их верхние концы прямыми. В результате криволинейную трапецию aABb мы заменим суммой n прямолинейных элементарных трапеций, площади которых S1, S2, ..., Sn легко вычислить.

Величину, равную основанию каждой из элементарных трапеций, обозначим буквой h и будем называть шагом квадратурной формулы. Так как

h = b n a ,

33

Y

А

B

y0

y1

y2

yn-1

yn

0

а

x1

x2

xn-1

b

X

Рисунок 20.1 – Метод трапеций а средняя линия каждой из элементарных трапеций равна полусумме

соответствующих ординат, то площадь S1 первой из них

 

 

 

S1 = b − a

* y0 + y1

= h y0 + y1 .

 

 

 

Аналогично

 

 

 

 

 

n

 

 

 

 

2

 

 

2

 

 

 

 

 

 

 

b − a

 

y1 + y2

 

 

 

y1 + y2

 

 

 

 

 

 

S1

=

*

 

= h

,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n

 

 

 

 

2

 

 

2

 

 

 

 

 

 

Sn

= b − a *

yn−1 + yn

= h

yn−1 + yn

,

 

 

 

 

 

 

и, следовательно,

 

 

n

 

 

 

 

2

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

= b − a

 

 

y0 + 2y1 + 2y2 +...+yn−1 + yn

 

S = S

+ S

2

+....+S

n−1

+ S

n

*

.

 

1

 

 

 

 

 

 

 

n

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Отсюда, учитывая, что yk = f(xk), получаем искомую формулу трапеций.

òb f(x)dx = b2na [f(x0) +2f(x1) +2f(x2)+...+2f(xn−1) +f(xn) ] = h2 åcjf(xj), (20.2)

a

где cj = 1, 2, 2,...2, 2, 1.

Чем больше число n, тем точнее, при прочих равных условиях, формула (20.2). Исключение составляет лишь тот очевидный случай, когда функция f(x) линейна, тогда формула (20.2) дает точные результаты при n=2.

34

Рисунок 20.2 – К выводу формулы парабол

Для этого соединим вершины каждых трех ординат (рисунок 20.2) дугами квадратичных парабол P(x), оси которых параллельны оси Y. Таким образом, вместо каждых двух прямолинейных элементарных трапеций будем рассматривать одну элементарную трапецию, ограниченную параболической дугой. Площади этих трапеций обозначим

S12; S34; S56; ....; Sn-1,Sn.

Рассмотрим первую из них. Для упрощения вычислений перенесем ось ординат параллельно самой себе так, чтобы она шла вдоль ординаты y0. Ясно, что от этого величина площади S12 не изменится.

Уравнение квадратичной параболы, ось которой параллельна оси

Y, есть

 

y = A0 + A1Х + A2Х2

(20.3)

Парабола (20.3) будет проходить через точки подынтегральной кривой (x0;y0), (x1;y1), (x2;y2), если мы коэффициенты A0 , A1, A2 подберем так, чтобы координаты рассматриваемых точек удовлетворяли уравнению (20.3).

Так как x0 =0, x1 = h, x2 =2h, то, подставив эти значения в уравнение (20.3), получаем систему уравнений

y0 = A0,

y1 = A0 +A1h + A2h2, y2 = A0 +2A1h + 4A2h2

35

решив которую, находим

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A0 = y0;

A1 =

−y2 + 4y1 − 3y0

; A2

=

y2 − 2y1 + y0

.

 

 

(20.4)

 

 

 

 

 

 

 

 

 

 

 

2h

 

 

 

 

 

 

 

2h2

 

 

 

 

 

 

 

 

Площадь S12

согласно формуле (20.1) определяется интегралом

2h

 

 

2h

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8 A2h3.

 

S12 = òydx = ò(A0 + A1x + A2x2)dx = 2A0h + 2A1h2 +

 

0

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Подставив найденные значения A0, A1, A2 и приведя подобные члены,

имеем

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

S12

= h

(y0 + 4y1 + y2).

 

 

 

 

 

 

 

 

 

 

 

 

 

Аналогично

 

 

 

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

S34

= h

(y2 + 4y3 + y4 ).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

S56

= h

(y4 + 4y5 + y6)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.....................................

 

 

 

 

 

 

 

 

 

 

 

 

 

Sn −1,n = h

(yn −2 + 4yn −1 + yn).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Следовательно,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

S = S + S

 

+....+S

n−1,n

= h (y

 

 

+ 4y

+ 2y

 

+ 2y

 

+...+4y

n−1

+ y

 

).

12

 

34

 

 

 

3

0

 

1

 

 

2

 

4

 

 

 

 

n

 

Отсюда находим формулу парабол, которую называют также формулой Симпсона:

b

òf(x)dx = b3na [f(x0) +4f(x1) +2f(x2) +4f(x3)+...+2f(xn−2) +4f(xn−1) +f(xn )]

a

или в более компактном виде

b

n

 

 

 

ò f (x)dx= h åcj f (xj ),

(20.5)

a

3 j=1

где cj =1,4,2,4,2....2,4,1;

n = 2v; h =

ba

.

 

 

 

 

n

Если в формуле трапеций n есть число произвольное, то в формуле Симпсона оно должно быть четным:

36

n = 2v; v = 1,2,3,4 ......

Абсолютные погрешности для формул трапеций и парабол оцени-

ваются такими формулами:

 

 

 

 

 

 

 

 

 

εтр

 

h2 (b a)M2

;

 

 

(20.6)

 

 

 

 

 

 

 

 

12

 

 

 

 

 

 

 

 

 

 

 

εпр

h4

(b a)M4

 

;

 

 

(20.7)

 

180

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

где

M2

= max

 

f II (x)

 

;

M4 = max

 

f IV (x)

 

 

 

 

 

 

есть максимальные значения модуля второй и четвертой производной функции f(x) на сегменте [a,b].

Таким образом, формула (20.2) дает точные результаты только для линейной функции, а формула (20.5) - для полинома не выше третьей степени, для которого f IV(x)=0.

Формулы (20.6) и (20.7) можно применять только в тех случаях, когда существует и легко вычисляются (или оцениваются) соответственно производные f II(x) и f IV(x), что на практике, т.е. при реальных вычислениях, встречается очень редко. Однако с помощью этих формул можно получить удобные оценки погрешности, которые довольно часто могут обеспечить надежные результаты.

Допустим, что интеграл

b

S = ò f(x)dx

a

вычислен по формуле Симпсона дважды при различных значениях h. Пусть I1, h1, ε1 соответственно обозначают найденный результат, значение шага h и погрешность первого вычисления, I2, h2, ε2 - те же величины при втором вычислении.

Тогда согласно формуле (20.7) имеем

ε1

 

h14

 

æ h1

ö

4

 

 

=

 

, или ε1

= ç

 

÷

ε2

(20.8)

ε 2

h24

 

 

 

è h2

ø

 

 

Отсюда, в частности, если h2

=

 

1

h1 ,

получаем ε1 =16ε 2 и для точности

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

значения

интеграла

S

 

при

двух вычислениях

с

ша-

гом h

 

и h

 

=

1

h

 

имеем

 

 

 

 

 

 

 

1

2

 

1

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

37

 

 

 

S = I1 + ε1 = I1 +16ε 2,

S = I2 + ε2.

Отняв верхнее уравнение от нижнего, находим

ε2 = I215− I1 ,

или, применяя более общие обозначения,

ε2n

=

I2n − In

.

(20.9)

15

 

 

 

 

Следовательно, если мы вычислим по формуле Симпсона интеграл

b

I = òf(x)dx

a

разделив сегмент [a,b] первый раз на n частей, а второй раз - 2n частей, то для второго результата I2n погрешность приблизительно будет

равняться 151 разности результатов I2n –In .

Отсюда получаем такое правило для приближенной оценки результата: число верных знаков значения I2n на единицу больше числа общих знаков, которые имеют значения I2n и In .

Если погрешность найденного результата больше допустимой, то необходимо увеличить число точек деления и тем самым уменьшить h. Согласно (20.8) требуемое значение h будет выражаться формулой

h = h1 4

 

εдоп

 

(20.10)

ε1

 

 

 

 

где ε доп - допустимая погрешность. В частности, при каждом удвоении числа точек деления сегмента [a,b] погрешность формулы Симпсона уменьшается примерно в 16 раз.

Программы для вычисления определенного интеграла по методу трапеций и методу парабол выглядят следующим образом:

program N_20_1;

{Вычисление определенного интеграла по методу трапеций}

var

A, B, S, X1, H, INTEG: real;{описание переменных} N, I: integer;

38

function integrand(X: real): real; {integrand -- подынтегральное выражение} begin

integrand := 1 / X; end;

begin

writeln('Вычисление определенного интеграла по методу трапеций');

write('Верхний предел интегрирования b='); readln(b);

write('Нижний предел интегрирования a='); readln(a);

write('Число интервалов n=');

readln(n);

A)

/ N;

 

H

:=

(B -

 

S

:=

0;

 

 

 

X1 := A;

1

to

N - 1 do

for

I :=

begin

X1 := X1 + H;

S := S + integrand(X1) end;

INTEG := (H / 2) * (integrand(A) + integrand(B) + 2 * S);

writeln('Число интервалов:', N); writeln('Интеграл по методу трапеций ',

INTEG:12:8); end.

39

program N_20_2;

{Вычисление определенного интеграла по методу парабол}

var

A, B, C, S, X1, H, INTEG: real;{описание перемен-

ных}

N, I: integer;

function integrand(X: real): real;{ Описание функ-

ции} begin

integrand := 1 / X; end;

begin

writeln('Вычисление определенного интеграла по методу парабол');

write('Верхний предел интегрирования b='); readln(b);

write('Нижний предел интегрирования a='); readln(a);

write('Число интервалов n='); readln(n);

H := (B - A) / N; S := 0;

C := 1;

X1 := A;

for I := 1 to N - 1 do begin

X1 := X1 + H;

S := S + (3 + C) * integrand(X1); C := -C;

end;

INTEG := H * (integrand(A) + integrand(B) + S) /

3;

writeln('Число интервалов:', N); writeln('Интеграл по методу парабол(Симпсона)

', INTEG:12:8); writeln(ln(b):12:8);

end.

40