Главная страница Алгоритмы [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] begin wro]: = aXw[0]; d[j]: = cIj]Xw[0]; Кроме того, нужно добавить еще один символ end перед посладней строкой end potyx; Исправленный алгоритм был транслирован и дал правильные результаты для следующих примеров-1) 2x+Sx+\, xtVX; 2) bx+x+Sx+Q, x=2t+Z-3) 3x4+:2, х=Ы+А; 4) -x+W, x~2t+\. АЛГОРИТМ 306 Нахождение комплексных корней полинома с использованием формул Берстоу-Ньютона [С21 В процедуре rootpol (сокращение от root - корень, polinomial--полином) при синтетическом делении многочленов используются корректурные формулы Берстоу и Ньютона. Коэффициенты исходного полинома степени п задаются в виде a[i] {i=0, l,...,n), где а[п] -свободный член. Коэффициенты преобразуются делением на их среднее геометрическое. Метод итераций Берстоу или Ньютона почти всгда будет сходиться с точностью до k-й цифры либо к значениям корней, либо к их обратным значениям. Если совместные итерации по Ньютону и Берстоу не дают сходимости .к значениям корней или к их обратным значениям за it повторений, то требование к сходимости последовательно понижается на одну значащую цифру. Данная программа предупреждает и защищает от потери смысла при квадратичном* синтетическом делении многочленов [13i, с. 644-647]. Действительная и мнимая части .каждого корня обозначаются как u[i] я v[i] соответственно вместе с соответствующей константой acc[i], используемой дл-я проверки сходимости. procedure rootpol (n,a,it,k) result: (u,v,acc); value n,a,it,k; integer n,it,k; array a,u,v,acc; begin real t,kk,ps,qs,pt,qt,s,rev,r,p,q; integer i,j,m; array h,b,c,d,e[-2:n]; bl-l]:=bl-2]:=cl-l]: = cl-2]: = dl-l]: = e[-l]:=h[-1 :=0; for j:= 0 step 1 unti! n do ЬШ"-= &[]]; t: = l; kk-lOfk; testO: if h[n] =0 Д n>0 then begin uin]:=vln]:=0; acc[nj:=kk; n:=n-1; go to testO end; g.tart: if n=0 then go to fin; ps:=qs: = pt:=qt:=s:=0; .rev: = l; kk: = 10fk; If n=l then begin r:=-hlll/h[0]; go to lin end; for j:= 0 step 1 until n do ,, if h[j]0 then s: = s+In(abs(ii[j])); s:-=exp(s/(n+l)); for j:= 0 step 1 until n do hlj]:=ih[j]/s; if abs (h[n-l]/h[n])>abs(h[l]/hIO]) theii revers: begin t:==-t; m:= (n-1) -r-2; for j:= 0 step 1 until m do begin s: = hij]; h[j]:=h[n-jl; h[n-j]: = s end end; Sf qsO then begin p: = ps; q: = qs; go to iter end; if Щп-2]=0 then begin q: = l; p:=-2 end else begin q: = hi[n]/h[n-2]; p: = (h[n-I]-q X h[n-3]) /h[n-2] end; if n=2 then go to quadr; r:=0; iter: for i:= 1 step 1 until it do begin bairstow: for ]:= 0 step 1 until n do -pXb[ qXblj-2]; qXclj-2] testbn: newton: begin bO]: = h[j] c[j]: = b01-pXc[j end; if h[n-l]=0V4n-1]=0 then go to testbn; if abs(h[n-1]/Цп-l])<kk then go to newton; b[n]:=.hi[n]-qXib[n-2]; if bln]=0 then go to quadr; if abs(h(n]/b[n3) >kk then go to quadr; for j:= 0 step 1 until n do begin dO]:=h[jl+rXdO-1]; eO]: = dO]+rXeO-l] end; if di[n]=0 then go to lin; if abs(4n]/d[n3) >kk then go to lin; Ф-1]:=-p X cin-2]-q X Ф-3]; s: = ctn-212-cln-lix otn-3j; if s=0 Шеп begin p: = p-2; q:=qX(q+l) end else begin p: = p+(b[n-llxc[n-гНЪИх c[n-3])/s; q:=.q+ ( b[n-1] Xc[n-1] -l-b[n] X c[n-2])ys end; r:= if e[n--1]=0 then r-1 else r-d[n]/eln-1] end iter; ps:=pt; qs:=qt; pt:p; qt:=q; if rev<0 then kk:=kk/10; rev:-rev; go to revers; Iin: if t<0 then r:=:==l/r; u[n]:=r; v[n]:=0; acc[n]:=kk; n:=n-1; Sf n=:0 then go to fin; for j:=0 step 1 until n do h[i]: = if abs(hlj]/d[j])<kk then d[j] else 0; go to iter; . quadr: If t<0 then begin p: = p/q; q: -1/q end; s:=q-(p/2)t2; if s>0 then begin s:=sqrt(s); uln]:=uln-1]:=-p/2; v.[n]: = s; v[n- Ij:=-s end else begin s:=sqrt(-s); uln]:== if p<0 then -р/2+s else -p/2-s; u[n-l]: = q/u[n]; v[n]:=vln-1]:=0 end; acoIn]:=accIn-l]:=kk; n:=:n-2; if n=0 then go to fin; for j:= 0 step 1 until n do hO]:= if abs(h[j]/blj]) <kk then bij] else 0; go to start; fin: end rootpol; Свидетельстве к алгоритму 306 Аяг#ритм 306 получен в ре#ультат« внесения в алгоритм 30а двух поправок, гедлвжвнных Г. В. Пеледовым в его «Замечании н подтверждении к алгоритму 30а» (см. ниже). [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] 0.0153 |