• Tidak ada hasil yang ditemukan

Аппроксимация функций. П ростейш им способом приближе

ния функции f [ x), заданной в п точках x h К г < и , является линейная интерполяция по двум точкам.

Д ля лю бого х, х , < х < х „ , значение / ( х ) приближенно заменяется формулой

f { x ) - P { x ) = . f { x ) X‘ +l Х + f { x i+l) X Х‘ Х , < * < * |+ 1,

І + 1 І І + 1 л і

описывающей прямую , которая проходит по двум точкам (хь / ( х () и (xi+1, / ( x i+1)) плоскости (х, у).

Напиш ем програм м у линейной интерполяции в двух вариантах:

1) когда f (x) задан а таблично с постоянны м ш агом ; 2) с пе­

ременным.

В а р и а н т 1.

Входные данные: / ( x f), 1 х 0, Һ, х;

выходные данные: р (х).

Основным м ом ентом алгоритм а линейной интерполяции явля­

ется поиск интервала [xb x i+ 1], котором у принадлеж ит точка х, где производится вычисление р(х). Ч тобы найти номер /, следует вычислить целую часть дроби [(x — x^/h]. Среди библиотечных функций ф ортран а есть соответствую щ ая функция IN T (X ), реали­

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

F U N C T IO N A3S0(Y,N,X1,H,X) REA L Y (N),X 1 ,H ,P,X M ,X M 1 IN T E G E R N,M

С В Х О Д Н Ы Е П А РА М ЕТРЫ

С Y (N )— М А ССИ В ЗН А Ч Е Н И Й Ф У Н К Ц И И С N — РА ЗМ Е РН О С Т Ь М АССИВА

С Н — Ш АГ Т А Б Л И Ц Ы

С X - К О О РД И Н А Т А , В К О ТО РО Й П РО И ЗВ О Д И ТС Я С И Н Т Е Р П О Л Я Ц И Я

С В Ы Х О Д Н Ы Е П А РА М ЕТРЫ

С A3S0 П Р И Б Л И Ж Е Н Н О Е ЗН А Ч Е Н И Е Ф У Н К Ц И И В С Т О Ч К Е X

М = IN T((X —Х1)/Н) ХМ = Х1 + М*Н Х М 1 = Х М + Н

р = (Y(M )*(XM 1 - X) + Ү(М + 1 M X - Х М ))/Н A3S0 = Р

R E T U R N EN D В а р и а н т 2.

Входные данные: х ь /( х ,) , 1 < г < и, z;

выходные данные: p(z). Будем предполагать, что z ¥=хп. В этом варианте поиск интервала [х;, х ;+ 1], содерж ащ его точку z, м ож но провести различными способами. Воспользуемся просты м перебо­

ром , а именно: в цикле по г, 1 < г < и , используем логический оператор IF. К огда выражение в скобках станет истинным, цикл прекратим. И м еем соответствую щ ий ф рагмент

93

1=1

1 IF (Z .G E .X (I).A N D .Z .L T .X (I+ 1)) G O TO 2 1 = 1 + 1

GO TO 1 2

Теперь полная програм м а мож ет быть полностью представлена следую щим образом:

F U N C T IO N A3S1(X,Y,N,Z) REA L X (N ),Y (N ),P,Z IN T E G E R N,I 1=1

1 IF (Z .G E .X (I).A N D .Z .L T .X (I+ 1)) GO TO 2 1 = 1 + 1

G O TO 1

2 P = (Y(I)*(X(I + 1) - Z) + Y(I + 1 )*(Z - X(I)))/(X(I + 1 ) - X(I)) A3S1 = P

R E T U R N E N D

3.3.4. Интегрирование. В качестве элементарного алгоритм а численного интегрирования примем ф ормулу Симпсона

, / т т - 1 \

С = з ( / о + 4 / м - 1 + 2 X /2i + /2J .

Здесь Һ— ш аг по оси х, f = / ( х ;), 0 < / <2т, x i+l — х ; = /г (см.

рис. 7.7). Д ля написания программы вычисления Q по значе­

ниям функции f заметим, что она м ож ет быть представлена в виде

6 = (/2i + 4/2 i+ l+ /2 i+ 2 ^ - Каж дое слагаемое в сумме имеет вид

f ( x ) + 4 f { x + h ) + f ( x + 2 h ) ,

где х = x 2i, х 0 = а. П оэтом у для вычисления суммы м ож но использо­

вать следующий фрагмент:

Q = 0.

Х = А

DO 1 1 = 2,N,2

Q = Q + F(X) + 4.*F(X + H) + F(X + 2.*H) 1 Х = Х + 2.*Н

Здесь N = 2m, Н = /г, А = а. Теперь уже не представляет труда оф орм ить соответствую щ ую программу:

F U N C T IO N A4S0 (A, B ,N ,F) R EA L A ,B ,H ,Q

IN T E G E R N

С ВХ О Д Н Ы Е П А РА М ЕТРЫ

С А Н И Ж Н И Й П РЕ Д Е Л И Н Т Е Г РИ РО В А Н И Я С В — ВЕРХ Н И Й П РЕ Д Е Л И Н Т Е Г РИ РО В А Н И Я

С N Ч Е Т Н О Е Ч И С Л О ОТРЕЗКОВ И Н Т Е ГРИ РО В А Н И Я С Ғ - И М Я ВНЕШ НЕЙ Ф У Н К Ц И И ВИДА

С REAL F U N C T IO N F(X) С REAL X

С В Ы Ч И С Л Я Ю Щ Е Й ЗН А Ч Е Н И Е П О Д И Н Т Е Г Р А Л Ь Н О Й С Ф У Н К Ц И И

С A4S0 — П Р И Б Л И Ж Е Н Н О Е ЗН А Ч Е Н И Е И Н Т Е ГРА Л А Н = (В —A )/N

Q = 0.

Х = А

DO 1 1 = 2 ,N,2

Q = Q + F(X ) + 4.*F (X + H) + F (X + 2.*H) 1 Х = Х + 2.*Н

Q = Q * H /3 A4S0 = Q R E T U R N EN D

В гл. 7 показано, что оценка погреш ности приближенного значения интеграла мож ет бы ть получена вычислением Q, с ш агом Н, затем Q 2 с ш агом Н /2 , а абсолю тная погреш ность е определя­

ется выражением (по правилу Рунге) е = 1 0 1 - 0 2 1 /1 5 - Вычислим

2

| exp(sinx)</.x:

о

с числом отрезков разбиения интервала [0, 2], равны м N = 1 0 0 , 200.

Результаты (приближенное значение интеграла Q 2 и ошибку е) будем вы давать на терминал:

R EA L A ,B ,E ,Q 1,Q 2 IN T E G E R N E X TER N A L F

D A TA А ,В ,N /О.,2., 100/

Q 1 = A4S0 (A, B, N, F) Q2 = A4S0 (A, B,2 * N, F) E = ABS((Q1 —Q2)/15.) W R ITE (5,1) Q2.E

1 F O R M A T (2X,E13.6,2X,E13.6) EN D

С ВНЕШ Н ЯЯ Ф У Н К Ц И Я F(X) F U N C T IO N Ғ(Х)

Ғ = EXP (SIN (X)) R E T U R N EN D

3.3.5. Суммирование рядов. Суммирование конечной числовой последовательности

5 = X а, І — 1

выполняется с помощ ью оператора цикла DO тремя операторам и:

S = 0.

D O 1 1 = 1 ,N 1 S = S + A (I)

где A — имя функции-подпрограммы, вычисляющей а,. Н апример, REA L F U N C T IO N A (I)

IN T E G E R I R E T U R N EN D

С уммирование бесконечных числовых рядов 00

5 = X

;= 1

выполняется обычно с пом ощ ью цикла, организованного логичес­

ким оператором IF и оператором безусловной передачи управления G O ТО. Выход из цикла осуществляется при достижении значения вычисляемой точности заданной е.

Рассм отрим программу суммирования сходящегося знакопере­

менного ряда, для которого легко вычислить оценку погреш ности;

она меньше модуля первого отброш енного члена ряда

\ S - S H\= S - І at i= 1

П риведем соответствую щ ую программу:

F U N C T IO N A5S0(E,A) REA L E,S

IN T E G E R N

С В Х О Д Н Ы Е П А РА М ЕТРЫ

С Е — ЗА Д А Н Н А Я А БС О Л Ю Т Н А Я П О ГРЕШ Н О С ТЬ С А — И М Я ВНЕШ НЕЙ Ф У Н К Ц И И -П О Д П Р О Г Р А М М Ы , С В Ы Ч И С Л Я Ю Щ Е Й ОБЩ ИЙ Ч Л Е Н ЗН А К О П ЕРЕ- С М Е Н Н О ГО РЯ Д А

С В Ы Х О Д Н Ы Е П А РА М ЕТРЫ

С A5S0 — П Р И Б Л И Ж Е Н Н О Е ЗН А Ч Е Н И Е С У М М Ы РЯ Д А D A TA N ,S /1 ,0 ./

1 S = S + A (N )

IF (ABS (A (N)).GT.E) GO TO 2 GO TO 3

2 N = N + 1

G O TO 1 3 A5S0 = S

R E T U R N EN D

В качестве иллю страции применения этой п рограм м ы рас­

см отрим суммирование ряда

s = Z ( - i ) 20'2+ i r i= 1

с точностью 8 = 10~4. П рограм м а м ож ет им еть вид REA L E,S

E X T E R N A L А DATA E / l .E —4 / S = A 5S0(E,A ) W R ITE (5,1) S

1 F O R M A T (2X,'S = ', E l 1.4) EN D

С

F U N C T IO N A (I) IN T E G E R I

IF (M O D (I,2).E Q .l) G O TO 1 A = 1 /( I * I + 1 )

R E T U R N 1 A = ( — l)/(I* I + 1)

R E T U R N EN D

Суммирование функциональных рядов S ( * ) = £ а М )

і=і

в области сходимости х, с точки зрения програм м ирования, приводит к незначительным усложнениям по сравнению с число­

выми рядами. Действительно, пусть требуется найти S ( x ) в точках Xj, 1 < 7 < т, из области сходимости с заданной абсолю тной точностью в. Т огда эта задача сводится к суммированию т чис­

ловых рядов

ОО S (*,•)= £ a , ( x j )

i= 1

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

SU B R O U T IN E A 5S 1 (X, S, Е, А, Е 1, М) R E A L X (M ),S (M ),E

IN T E G E R N ,M

С В Х О Д Н Ы Е П А РА М Е Т РЫ

С X (М) — М А С С И В , С О Д ЕРЖ А Щ И Й ЗН А Ч Е Н И Я Х,В

4 Ю. П. Боглаев 97

с

К О ТО РЫ Х В Ы П О Л Н Я Е Т С Я С У М М И РО В А Н И Е

С РЯД А

С Е — ЗА Д А Н Н А Я А БС О Л Ю Т Н А Я П О ГРЕШ Н О С ТЬ С А — И М Я ВНЕШ НЕЙ Ф У Н К Ц И И , В Ы Ч И С Л Я Ю Щ Е Й С ОБЩ И Й Ч Л Е Н РЯ Д А , Д О Л Ж Н А И М Е Т Ь ВИД С REA L FU N C T IO N А (І,Х )

С REA L X С IN T E G E R I

С E l — И М Я ВНЕШ НЕЙ Ф У Н К Ц И И , В Ы Ч И С Л Я Ю Щ Е Й С Д О С Т И Г Н У Т У Ю П О ГРЕШ Н О С ТЬ, Д О Л Ж Н А

С И М Е Т Ь ВИД

С R EA L F U N C T IO N E l (I,X) С R EA L X

С IN T E G E R I

С M — РА ЗМ ЕРН О С ТЬ М АССИВА X,S С В Ы Х О Д Н Ы Е П А РА М ЕТРЫ

С S(M) — М АССИВ, С О Д ЕРЖ А Щ И Й С У М М Ы РЯ Д А В

С ТО Ч К А Х X(J)

DO 3 J = 1 ,M N = 1

S(J) = 0.

1 S (J) = S (J) + A (N, X (J))

IF (El (N,X(J)).GT.E) G O TO 2 G O TO 3

2 N = N + 1 GO TO 1 3 C O N T IN U E

R E T U R N E N D

Отличие этой програм мы от A5S0 состоит в том , что добавлен цикл по J — перебор по точкам Xj— и предполагается, что пользователь долж ен написать внешние функции-подпрограммы А(1,Х), Е1(1,Х).

П рименим программ у A5S1 для суммирования ряда .5 „2п+1

S { x ) = 2 X X

х-\-—+ ——Һ... + - --- - + .

3 5 2и+1

с абсолю тной погреш ностью 8 = 1 0 5 в точках х }= — 0,5; —0,3;

+ 0,4; + 0 ,7 . Известно, что сумма этого ряда S ( x ) = In ((1 + jc)/(1 — jc));

область сходимости | х \ < 1, оценка остатка

П рограм м а мож ет иметь вид REAL X (4), S (4), Е IN T E G E R М EX T E R N A L А ,El

D A TA E, M / l .E —5, 4 /,X / - 0 . 5 , - 0 .3 ,0 .4 Д 7 / CA LL A 5S1 (X, S, E, A, E 1, M)

W R ITE (5,1) S 1 F O R M A T (2X,4E12.5)

EN D С

F U N C T IO N A (I,X ) REA L X

IN T E G E R I

IF (M O D (I,2).E Q .l) G O TO 1 A = 0.

R E T U R N 1 1 = 2*1+ 1

A = 2 * X * * I/I R E T U R N EN D С

F U N C T IO N E l (I,X) R EA L X

IN T E G E R I

IF (M O D (I,2).E Q .l) G O TO 1 E l = 1.E10

R E T U R N 1 1 = 2* 1 + 1

E l = (A B S (X ))* * I/(I* (l —X*X)) R E T U R N

EN D

Н а примере этой програм м ы можно заметить, что она далеко не универсальна. Д ействительно, если в массив Xj внести значение х = 1, 3, лежащее вне области сходимости, то програм м а A5S1 зацикливается (нет выхода из цикла операторов с м еткам и 1 — 3) и заканчивается аварийно переполнением. О днако если пользователь знает область сходимости ряда и м ож ет оценить скорость сходимос­

ти, то применение програм м ы A5S1 мож ет бы ть оправдано.

С д р у г о й с т о р о н ы , п р о г р а м м а A 5S1 с л у ж и т д л я с у м м и р о в а н и я рядов общ его вида, поэтому она более гром оздка, чем програм м а сумм ирования конкретного ряда, например, приведенного выше.

3.3.6. Фурье-анализ. П од Ф урье-анализом обычно понимается процедура определения коэффициентов ряда Фурье функции f ( x ) . В зависимости от того, в каком виде задается f { x ) (аналитически или таблично, в вещественном виде или комплексном) существует несколько процедур Ф урье-анализа. Однако в основе всех процедур леж ит вычисление интегралов по ф орм улам

л

а т = (1 /я ) | f ( x ) c o s m x d x , т = 0, 1 ,2 , ...,

— Я п

bm = ( l / n) J f ( x ) s i n m x d x , т = 1, 2, ....

Будем предполагать, что для вычисления f ( x ) м ож ет быть написана функция-подпрограмма. Количество коэффициентов ат. Ьт, под­

лежащ их определению, задается парам етром М, 0 < w i< A /. Д ля вычисления интеграла воспользуемся програм м ой A4S0 с числом отрезков интегрирования п = 2к( т+ 1 ) , где коэффициент к будем задавать:

SU B R O U T IN E A6S0 (F, М , М 1,К ,А , В) REA L A (M 1),B (M ),P I,Q .R 1,R 2,R 3 IN T E G E R M ,M 1 ,K ,I1 ,N

С

С В Х О Д Н Ы Е П А РА М ЕТРЫ

С F И М Я ВНЕШ НЕЙ Ф У Н К Ц И И -П О Д П Р О Г Р А М М Ы , С В Ы Ч И С Л Я Ю Щ ЕЙ Г(Х)

С М РА ЗМ ЕРН О С ТЬ М АССИВА В

С M l РА ЗМ ЕРН О СТЬ М АССИВА А, М 1 = М + 1 С К К О Э Ф Ф И Ц И Е Н Т , О П РЕ Д Е Л Я Ю Щ И Й Ч И С Л О С ОТРЕЗКОВ И Н Т Е ГРИ РО В А Н И Я

С В Ы Х О Д Н Ы Е П А РА М ЕТРЫ

С А М АССИВ К О Э Ф Ф И Ц И ЕН ТО В Ф У РЬЕ А(1) С В М АССИВ КО ЭФ Ф И Ц И ЕН ТО В Ф У РЬЕ В (I) С

DATA P I/3.1415929/

С В Ы Ч И С Л Е Н И Е М АССИВА А Н = Р1/(К *М 1)

N = 2*K *M 1 DO 2 1 = 1 ,Ml Q = 0.

X = - P I 11 = 1 -1 DO 1 J = 2,N ,2 R l = F (X )* C O S (Il* X )

R2 = F X + H )* C O S (Il* (X + H)) R3 = F (X + 2.*H )*C O S(Il *(X + 2.*H)) 1 Q = Q + R 1 + 4 .* R 2 + R3

2 A(I) = Q *H /(3.*P I)

С В Ы Ч И С Л Е Н И Е М АССИВА В DO 4 1 = 1 , М

Q = o . Х = - P I DO 3 J = 2,N ,2 R 1 = F (X )* S IN (I* X )

R2 = F X + H )*S IN (I*(X + H)) R3 = F (X + 2.*H )*S IN (I*(X + 2.*H)) 3 Q = Q + R 1 + 4 .* R 2 + R3

4 B(I) = Q *H /(3.*P I) R ETU R N E N D

Так как в програм м е A6S0 отсутствует контроль точности вычисления интегралов, а следовательно, и значений ат, Ьт, то необходимо будет дваж ды обратиться к A6S0 с различными значениями к и и воспользоваться для оценки погреш ности правилом Рунге, например

CA LL A6S0 (F, 10,11,10,А,В CA LL A6S0 (F, 10,11,20,А, В

Погрешность (массивы ЕА(1), ЕВ(1)) затем определяется в циклах типа

DO 1 1 = 1 ,M l

1 EA (I) = ABS(A1 (I) — A (I)) /15

А лгоритмы Ф урье-анализа при больших значениях т (и соответ­

ственно и), основанные на общих квадратурных ф ормулах, на­

пример формуле Симпсона, оказы ваю тся неэффективными.

В этом случае применяю тся разработанны е специальные быс­

трые алгоритмы , учитываю щ ие специфику тригонометрических функций. Э та группа алгоритм ов обычно называется быстрым преобразованием Фурье. Если обычные алгоритм ы им ею т порядок роста числа арифметических операций 0 ( т 2), т -> со, то быстрые алгоритмы имею т порядок роста О (т log2 /и), т —> ос, что указы­

вает на их более высокую эффективность. Текст фортран-про- грам м ы быстрого Ф урье-преобразования приводится, например, в [30, с. 166].

3.3.7. Численное дифференцирование. Пусть функция у [х ) задана таблично с постоянным ш агом Һ

у(Хі), 1 < г '< л , x i +l - x i = h.

Тогда для приближенного вычисления первой и второй производной можно использовать формулы

d x K

Ъ ( Хі) *уМ - 2уЫ +уЩ 2 < К « - 1 .

d xz ' І г

П рограм м а вычисления производных у ( х) по приведенным выше ф орм улам является простой иллюстрацией использования опера­

торов цикла:

SU B R O U T IN E A 7 S 0 (N ,N 2,Y ,H ,D 1,D 2) REAL Y (N), D 1 (N2), D2 (N2), H, H 1, Н2 IN T E G E R N, N2

С

С ВХ О Д Н Ы Е П А РА М ЕТРЫ

С N — РА ЗМ ЕРН О С ТЬ М АССИВА Ү

С N2 — РА ЗМ ЕРН О С ТЬ М АССИ ВА D 1 ,D 2 ,N 1 = N - 1 С ү — М АССИВ, С О Д ЕРЖ А Щ И Й ЗН А Ч Е Н И Я Ф У Н К Ц И И С В Ы Х О Д Н Ы Е П А РА М ЕТРЫ

С D 1 — М А ССИ В, С О Д ЕРЖ А Щ И Й ЗН А Ч Е Н И Я П ЕРВО Й С П РО И ЗВ О Д Н О Й

С D2 — М А ССИ В, С О Д ЕРЖ А Щ И Й ЗН А Ч Е Н И Я ВТОРОЙ С П РО И ЗВ О Д Н О Й

С

Н1 = 2.*Н Н 2 = Н * Н DO 1 1 = 2 ,N1

D1(I) = ( Y ( I + 1 ) - Y ( I —1))/Н1

1 D2 (I) = (Y (1+ lj —2.* Y (l) + Ү (I — 1))/Н2 R E T U R N

EN D

Dokumen terkait