Численные методы в среде символьной математики. Программирование и решение задач: Учебно-методическое пособие, страница 19

X(n):=LIM(ITERATES((x0·x)·®,x,(x0·x)·®,n),x,x0,0)

Y(n):=LIM(ITERATES((y0(1/y))®,y,(y0(1/y))®,n),y,y0,0)

Здесь функция LIM() в полученных рекуррентной подстановкой векторах вместо символьных переменных x и y подставляет их начальные значения, равные соответственно x0 и y0.

Покомпонентные произведения выполним следующим оператором:

S(n):=VECTOR(((Y(n))™k·(X(n))™k)·®,k,1,n+1)

Чтобы получить скалярное произведение, достаточно последовательно просуммировать компоненты вектора S(n), умножая каждую частичную сумму на множитель вносимой погрешности ®:

             €n+1          m-1          ‚

Sn(n):=EXPAND¦ ¤  (S(n)) ·®   ,Trivial,®¦

             m=1       m               ƒ

В качестве контроля за правильностью работы запрограммированных рекуррентных подстановок вычислим векторы [X(5),Y(5),S(5)] и сумму  Sn(5)  для n=5:

„    2       3  2      4  3     5  4      6  5     7  6   †

¦  x0 ·®   x0 ·®     x0 ·®    x0 ·®     x0 ·®    x0 ·®    ¦

¦                                                         ¦

¦    ®       y0         ®       y0         ®       y0     ¦

¦                                                         ¦

¦   2  3    3     3    4  5    5     5    6  7    7     7 ¦

… x0 ·®   x0 ·y0·®   x0 ·®   x0 ·y0·®   x0 ·®   x0 ·y0·®  ‡

  7     12   6  11   5     8   4  7   3     4   2  3

x0 ·y0·®  +x0 ·®  +x0 ·y0·® +x0 ·® +x0 ·y0·® +x0 ·®

Степени у сомножителей в каждом слагаемом полученной суммы являются функциями порядкового номера слагаемого m. По полученному отрезку суммы ряда из шести слагаемых при n=5 можно в общем виде записать выражение для любого m–того слагаемого (1 £ m £M+1), не прибегая к выполнению рекуррентных формул для формирования векторов размерности M:

M+1   m+1   MOD(m+1,2)  2·m+MOD(m,2)

Vxy(M):= ¤  x0   ·y0          ·®            

        m=1                                 

  7     12   6  11   5     8   4  7   3     4   2  3

Vxy(5)Þx0 ·y0·®  +x0 ·®  +x0 ·y0·® +x0 ·® +x0 ·y0·® +x0 ·®

Функция MOD(m,2) возвращает целый остаток от деления m на2.

Положив в полученном выражении ®=1 , можно получить скалярное произведение для   x0 = 1.234   и   y0 = -0.567   с предельной точностью (в данном случае с 25 разрядами):

  7      6   5      4   3      2

x0 ·y0+x0 +x0 ·y0+x0 +x0 ·y0+x0 =

= 2.214120004569176098023551  »  2.21412

Для вычисления абсолютной погрешности необходимо вспомнить, что при 1 >> «  степень ®^k =(1 + «)^k »(1 + k «). Поэтому, продифференцировав результат по ®, подставив  ® = 1 и умножив на ­=«, получим численное значение абсолютной погрешности

      d        

­·lim —— Vxy(5)

  ®˜1 d®       

        7         6     5        4     3        2

­·(12·x0 ·y0+11·x0 +8·x0 ·y0+7·x0 +4·x0 ·y0+3·x0 )=

=0.00001275288655726128559228262 » 0.000013

Взяв отношение найденой абсолютной погрешности к значению скалярного произведения, получим значение ожидаемой относительной погрешности:       » 0.0000057598

Для проверки полученных оценок погрешности проведем вычисление этого же скалярного произведения, выполняя все действия с плавающей точкой:

Xz(x0,n):=ITERATES(Zn(x0·x),x,Zn(x0·x0),n)

Yz(y0,n):=ITERATES(Zn(y0·Zn(1/y)),y,Zn(y0·Zn(1/y0)),n)

Sz(x0,y0,n):=VECTOR(Zn((Xz(x0,n))™k·(Yz(y0,n))™k),k,1,n+1)

Snz(x0,y0,n):=¤(Zn((Sz(x0,y0,n))™m),m,1,n+1)

После подстановки конкретных значений x0,y0,n получим:

[Xz(1.234,5),Yz(-0.567,5),Sz(1.234,-0.567,5)]

„ 1.52276   1.87909  2.3188   2.8614   3.53097   4.35722 †

¦    1      -0.567      1     -0.567      1      -0.567  ¦

… 1.52276  -1.06544  2.3188  -1.62241  3.53097  -2.47054 ‡

Вычисленное значение скалярного произведения будет таким:

Snz(1.234,-0.567,5)Þ 2.21414

Реально полученные абсолютная и относительная погрешности равны

c =¦2.21414-2.21412¦ = 0.00002

      c     ¦2.21414-2.21412¦

«c = ———- = ——————————————————- = 0.00000903285

       c          2.21414      

Сравнивая аналитические оценки погрешности и реальные погрешности вычислений с плавающей точкой, видим, что результаты являются однопорядковыми с разбросом в пределах ±40%:

0.0000057598  » 0.00000903285