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
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.