Android-приложение для поиска дешевых авиабилетов: play.google.com
Главная -> Справочник по алгоритмам

0 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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78

Ai(n+i) сразу подставляются в последующие уравнения. Обычно (но не всегда) метод Зейделя дает лучщую сходимость.

Необходимость преобразования (4.16) и трудности в обеспечении быстрой сходимости ограничивают применение этих методов. Однако программная реализация их довольно проста (см. Приложение 5).

Метод Ньютона (или Ньютона - Раф-сона) является наиболее распространенным методом рещения системы уравнений (4.16). Он реализуется следующим алгоритмом.

1. Задаем абсолютную или относительную погрещиость в=£, число уравнений Л/, максимальное число итераций М и вектор начальных приближений Хю (с компонентами

XtO, Х20.....-Кда)-

2. Используя разложение Fi{Xi) в ряд Тейлора, формируем матрицу Якоби [dFi/dXi], необходимую для расчета приращений FXi) при малом изменении переменных. Матрица Якоби в развернутом виде записывается следующим образом:

дР,/дх, aF,/dxi ... dFi/dXf, dFi/дх, dF-i/dXi ... dF/dx

dFfi/dXt dF/dxi

дРц/дХц

Поскольку аналитическое дифференцирование Fi(Xi) в общем случае нежелательно, заменяем частные производные в матрице Якоби их приближенными конечно-разностными значениями

dFi FiXi + H)-FiXi)

3. Составляем и решаем систему линейных уравнений для малых приращений Хг.

dFt/dxi dF,/dx2 .

. dFi/dXf, -

-АхГ

dF-2/.дх, dF.Jdx2 .

. dFi/dXf,

dFJdxt dFjdx-, .

dFldXf,

.Axfj-

где Hi - малое приращение Xi, nanpHiep Я. = е1Х,1.

Решение этой системы дает Дх), Ах2, ... т. е. ДЛ,.

4. Вычисляем уточненные значения

Х1(п+1) = Х(п) + ДХ1, Х2(„+ 1) = + ДХ2,

(п4-1) ~% (и) или в общем виде

Х- (л + 1) = •П +

5. Для всех AXi проверяем одно из условий: ДЛ,>е, ДХ,-/А:,->е.

Если оно выполняется, идем к п. 2, т. е. выполняем новую итерацию. Иначе считаем вектор Х(п-(-1) найденным решением.

Отметим, что решение системы нелинейных уравнений (4.16) можно представить и в виде Х,(„+ ,)=Хм- W(7)f,(A,-t„,), где Win) - обращенная матрица Якоби. Обращение матрицы Якоби осуществляется в ходе решения системы линейных уравнений для приращений ДХ, методом Гаусса. Программа 4.20.

16 PRINTРЕШЕНИЕ С1СТЕМЫ НЕЛИНЕЙНЫХ УРАВНЕНИЙ 26 PRINT . МОДИФИЦИРОВАННЫМ МЕТОДОМ НЫвТОНА

30 ШРиТЗАДАйТЕ ЧИСЛО УРАВНЕНИЙ N=NsriIM A<NN),B<N),X<N),F<N)

40 INPUTЗАДАЙТЕ МАКСИМАЛЬНОЕ ЧИСЛО ИТЕРАЦИЙ М=М

50 ШРИТЗАДАЙТЕ ОТНОСИТЕ ЛЬНУ» ПОГРЕШНОСТЬ E=E!LETS=e

66 FOR I-l ТО N!PRINT 12.0!ВВЕДИТЕ ХЧ<е)

76 IHPUT X<I>sHEXT I

80 60SUB 260:FOR 1=1 TO N!LETB<I)=-F<D!NEXT I

96 FOR J-1 TO N:LETX=X<d)sLETH=EiKABS<X>

166 LETX<J)=X+Hi60SUB 2601FOR 1=1 TO N

116 LETA<bJ)=<F<I)+B<I))/H!NEXT I:LETX<J>=X!NEXT J

120 LETS-S+ISIF S=M+1 THEN PRINTЧИСЛО ИТЕРАЦИЙ S=M:STOP

136 FOR 1=1 TO N-i:FOR J=I+1 TO N

140 leta<J,I>=-A<J,I>A<bI>:for K=I+1 TO N

150 L£TA<JK>=A<J,K>+A<J,niKA<IK):NEXT К

160 LETB<J)=B<J)+A<v),I)*B<I>!NEXT J!NEXT I

170 I.ETF<N>=B<N>/A<:N*N>!F0R I=N-1 to 1 STEP -1

186 LETH=B<I>»for J=l+1 TO N!LETH=H-F<J>iKA<bJ):NEXT J

190 LETF<I)=H-A<bI):NEXT I-.LETR=6

206 FOR 1=1 TO NsLETX<I>=X<I>+F<I)

210 IF ABS<F<I)X<I))>E THEN LETR=1

226 NEXT I:IF R=l THEN 86

230 PRINTРЕШЕНИЕ СИСТЕМЫ*

240 FOR 1=1 TO N:PRINT!2.6!XI!F1.9! = X(I)!NEXT I-245 PRINT!2.0!ЧИСЛО ИТЕРАЦИЙ S=S!STOP

250 REMПОДПРОГРАММА ВЫЧИСЛЕНИЯ F(I>=F<X<1>,X<2),...*Х<Н)> 266 LETF<l>=X<i)+3*L6T<X<l>)-X<2>*X<2) 270 ьеТР<2)=г»Х<1>»Х<1>~Х<1)жХ<2>~5жХа>+1 280 RETURN:END



Пример. В программе со строки 260 записывается подпрограмма вычисления правых частей (4.16) в виде

f(/)=(функция переменных Х(/)).

В данном случае подпрограмма служит для решения системы уравнений

x,+31gx,-xi=0, 2xi - jfijf2 - 5x1 +) = 0.

Задав N=2, M=10 (максимальное число итераций для случая, если решение расходится), 8=£=lIO- x,o=A:1(0)=3,4 и Х2о=Х2(0)=2,2, получим х, =3,487442788, Х2=2,261628631 и S=3. Значение переменной 5 дает число итераций, а значения Р{Г) - невязки системы. Время счета контрольного примера 16 с.

Решение (4.16) с помощью методов минимизации функций ряда переменных описано в § 4.6.

§ 4,5. Решение алгебраических уравнений с действительными и комплексными коэффициентами

Алгебраические (но ие трансцендентные) уравнения сводятся к канонической форме

где коэффициенты Ао, А\, An-в общем случае комплексные" числа. В таком виде алгебраические уравиеиия используются редко. На практике обычно встречаются полиномиальные уравнения с действительными коэффициентами

аоХ" + а,х- + ...+а„ ,х + а„=0, (4.18)

причем нередко (4.18) записывается в другой форме:

апХ" + ап-1х- + ...+а,х+ао=0. (4.19)

Отметим некоторые известные свойства алгебраических уравнений, на которых базируются методы их решения.

1. Корни алгебраических уравнений могут быть действительными и комплексно сопряженными, причем на комплексной плоскости все они лежат в пределах кольца, ограии-ченного окружностями с радиусами Л=1 + + амЕкс/ап и г=1 + (аСакс/ап1, где а„акс- наибольший по модулю коэффициент полинома, аяшс- следующий наибольший по модулю коэффициент (т. е. без учета а„акс)-

2. Число корней с учетом их кратности равно п, причем полиномы нечетной степени обязательно имеют хотя бы один действительный корень.

3. Число положительных (отрицательных) корней равно числу перемен (постоянств) знаков в последовательности а„, ап-\, ..... со коэффициентов или меньше его на четное число.

Квадратное уравнение

имеет решение в виде

Xl,2= -

a2X+aiX+ao=0

(4.20)

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

Программа 4.21.

Приме р. Для уравнения 2х-5х-10= = 0 получим х, = -1,311737691 и Х2=3,811737691, а для уравнения х + 2х + + 15 = 0 получим Х.2=-1±/-3,741657387. Приведенное кубическое уравнение x + a2x-f a,x-fao=0 (4.21)

может решаться по точным формулам [18]. Однако более компактное решение получается при использовании следующего алгоритма.

Вначале методом половинного деления с е=ЫО~° находится действительный корень Хз (он обязательно существует). Затем делением (4.21) на (х-хз) получается квадратное уравнение, из которого вычисляются два других корня xi и хг.

Программа 4.22.

Пример. Для уравнения х-6x+21х- -52=0 получаем х,.2=1 ±/-3,464101615 и хз=4, а для уравнения х-6х+11х-6=0 получим Xi=3, Х2 = 2 и хз=1.

Уравнение (4.19) с действительными коэффициентами решается методом Хичкока. При этом (вначале) итерационным методом из (4.19) выделяется квадратичный множитель (если rt2) и вычисляются два eto корня. Затем (4.19) делится на этот множитель, т. е. п уменьшается на 2, и процесс повторяется до вычисления всех корней.

Программа 4.23.

Пример. Для уравнения х+9х+ +31х*+59х+60=0 прлучим кории xi = = -1+/-2, Х2= -1-/-2, хз=-3+/-0, Х4=--4+/-0 (т. е. Хз и Х4 действительны), а для уравнения х+8х + 31х + 80х* + 94х + + 20 = 0 получим Х = -0,2679491924, Х2 = = -2, хз= -1+/-3, Х4= -1-у-З и Хб = = -3,732050808 (при вычислениях принималось 6=Ы0-*).

Решение уравиеиия общего вида (4.17) с комплексными коэффициентами Л=а/+/6,-обобщенным методом Ньютона реализуется следующим алгоритмом.

1. Вводим массив Л,- и задаем точность вычислений 6.

2. Задаем начальное приближение Zo= * -xo+jyo, в частности Хо=0 и уп=0 (Метод дает сходимость к какому-либо корню при любых начальных приближениях).

3. По методу Ньютона (ио е применением аппарата комплексной арифметики) находим корень (4.17) Zl.

4. Делим (4.1.7) иа {Z-Z,), т. е. понижаем степень (4.17) иа единицу и повторяем вычисления с п. 2 до нахождения второго корня и т. д. до тех пор, пока ие будут вычислены все кории.

Более подробное описание этого метода см. в. , [24]. При использовании програм-



Программа 4.22.

05 printрешение приведенного кубического уравнения

10 1НРиТвведите а2=с! шритвведите а1=в

15 inputвведите а0=а: inputвведите а rmV=k

20 letx=0sletk=k+1

25 letg=x+c!letl=6!«x+b

30 if L:«X+A>=0 then 50

40 letx=x+k

50 letk=k2!letx=x-k

60 if k>=1e-10 then 25

70 lete=-6/2!leth=e*e~l

80 if M>=0 then 130

90 printXb2=e+- JiKsqr(-M>

100 prihtx3=x!st0p

130 letf=SQRi:M) s leth=f+e: leti=e-f

140 printx1=h5 printx2=i:printx3=x!end

Программа 4.23.

05 PRINTВЫЧИСЛЕНИЕ ВСЕХ КОРНЕЙ ПОЛИНОМА 10 PRINTC ДЕЙСТВИТЕЛЬНЫМИ КОЭФФИЦИЕНТАЖ 15 ШРИТЗАДАЙТЕ ПОГРЕШНОСТЬ Е=Е

20 INPUTЗАДАЙТЕ СТЕПЕНЬ ПОЛИНОМА N=N!DIM А«:гжН+1>

25 FOR J=l ТО N+1SPRINTВВЕДИТЕ А!2.e!N+l-J

30 INPUT A<J>!NEXT J!LETK=1

35 LETT=1SLETC=A(2>/A<1)

40 IF N=1 THEN LETP=-C!LETG=0s6OTO 270

50 IF H=2 THEN LETH=C:*.C4-A<3)/A<1)!60T0 220

6ie LETri=l0sLETC=4! LETD=8s LETU=4

70 UETU=8! LETF=1: LETf)J=2i LETT=0

80 IF М<>10 THEH 100

85 LETP=C:LETM=0 s LETQ=B s LETC=U:LETD=U

90 LETU=PiLETU=Q!LETY=C!LETZ=D!LETF=-F

100 LETM=M+1!LETH=0! LETO=A( 1 >sLETP=A<2>-CiKQ: LETL=Q

120 FOR J=3 TO N!LETR=P!LETP=A<:J>~C*.R-D*e

130 t.ETQ=R!LETR=L!LETL=Q-CiKR-H*IisLETH=R:NEXT J

140 LETQ=A<N+l)-DiteGsLETS=L+CiiiR

150 IF T=0 THEN LETX=IiiKR:LETH=RiKX+SiKL!lF H=0 THEN 80

160 LETC=C+<PiKS-QiKR)/H!LETIi=D+<PiKX+QiKL)H

170 IF C-V+D-ZO0 THEN 190

180 IF Р=-Ы THEN PRINTНЕТ РЕШЕНИЯsSTOP

185 LETW=-F

190 LETH=C*C4-Iil IF S0R<<Q-P*.C2)2+PiiiPiiiABS<:H))>E/N THEN 200 LETT=0iLETA<2)=A<:2)-CiKA<l)!FOR J=3 TO N-l 210 LETft<J)=A<J)-C.iKA<J-l)-D*A<J-2)sNEXT J 220 LETP=-C/2!LET0=SQR(ABSCH))

230 IF H>=0 THEN LETM=P+Q!LETP=P-QsLETQ=0!6OTO 25© 240 LETM=P

250 PRINT!2.0!X<K)=!F1.9!M +JiK<Q>:LETK=K+1 270 PRINT!2.0!X<K>=!F1.9!P +JiK(-Q> !LETK=K+1 290 IF TO0 THEN 35© 300 LETN=N-2!LETA=0

310 IF SQR<<S-RiKC2)-2+RiKRiiiABSCH)><=E THEN LETA=1 320 LETB=0!IF N>=2 THEN LETB=1 330 IF A+B=2 THEN LETT=l!60T0 110 340 60T0 35

350 PRINTВЫЧИСЛЕНИЯ ЗАКОНЧЕНЫsENE

05 PRIWTРЕШЕНИЕ КВАДРАТНОГО УРАВНЕНИЯ

10 ШРИТВВЕДИТЕ А2=С! ШРиТВВЕДИТЕ А1=В

15 ШРИТВВЕДИТЕ А0=А

20 LETri=B-2/C5LETF=DiKri-A-C,

30 IF F>0 THEN ,60

40 PRINTXb2=-ri4- JxSQR(.-f>

50 60T0 10

60 PRINTXl=~ri~SQRi:F> . 70 PRINTX2=-D+SQR(F> 80 GOTO 10:ENB



0 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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78



0.0017
Яндекс.Метрика