Головна Робота Фото Малюнки Гостьова
До попереднього розділуДо наступного розділу


4. Розрахунок раціональних точок на колі

Трансцендентні функції, такі як тригонометричні функції, в комп'ютерах задають у вигляді апроксимації двійковим дробом. Таке представлення завжди має похибку, хоча цю похибку можна зробити досить малою. Згідно з виразами (5), тригонометричні функції в деяких точках кола можна задавати точно, використовуючи піфагорові трійки. Так як кількість піфагорових трійок така сама, як і кількість цілих чисел, тобто є нескінченною, то можна передбачити, що можна задавати функції для довільних кутів, заданих з високою точністю.

Розглянемо ряд трійок, згенерованих за (2) і їхнє положення на колі. В таблиці 3 представлені трійки і їхні кути для m = 10 і зростаючих значень n. Тобто в таблиці представлені не тільки примітивні трійки.

Таблиця 3. Піфагорові трійки та їхні кути для m = 10.
n a b c α, град. n а b с α, град.
1 20 99 101 11,42 6 120 64 136 61,93
2 40 96 104 22,62 7 140 51 149 69,98
3 60 91 109 33,40 8 160 36 164 77,32
4 80 84 116 43,60 9 180 19 181 83,97
5 100 75 125 53,13 10 200 0 200 90

Аналіз таблиці показує, що при зафіксованому m, коли n пробігає ряд 1,…,9 , генеруються трійки зі зростаючими кутами, які розміщуються в першому квадранті. Остання десята трійка — з нульовим компонентом b дає кут 90°. Ці кути трійок рівномірно розміщені по колу, як показано на рис.3.

         

Рисунок 3. Раціональні точки серії піфагорових трійок

Рисунок побудовано програмою, яка написана на мові Паскаль і яка генерує необхідні послідовності піфагорових трійок. На рис.4 показано, як розміщено на колі 150 раціональних точок піфагорових трійок.

         

Рисунок 4. Раціональні точки серії 150 піфагорових трійок

Таким чином, можна, підібравши відповідну піфагорову трійку, задати будь-яку тригонометричну функцію, яка дорівнює раціональному числу. Але залишається питання, яким чином це зробити, щоб кут трійки відрізнявся від заданого кута на допустиму похибку.

З дослідів по зміні параметрів m і n видно, що для пошуку потрібної трійки досить вибрати достатньо велике значення m і підібрати n послідовним перебором таке, щоб

                                 2mn
          tgα = a/b = ————.                   (9)
                               m2n2

Як бачимо, числа а і b мають порядок квадрата чисел m і n. Тобто їхня розрядність приблизно вдвічі більша, ніж розрядність останніх. Це означає, що, по-перше, може статись, що потрібно буде вибрати занадто велике число m, таке, що числа а і b не можна буде представити як цілі числа в комп'ютері, по-друге, чим більше значення m — тим складніше підібрати відповідне число n. Тому слід розробити раціональний спосіб пошуку m і n.

Нехай tgα = х. Тоді розв'яжемо рівняння (9) відносно n:

          х(m2n2) = 2mn;

          хn2 + 2mnхm2 = 0;

                 −2m ± √(4m2 + 4x2m2)          −1 ± √(1 + x2)
          n = —————————— = m ———————.
                                  2x                                       x

Звідси, прийнявши до уваги, що n повинно бути позитивне, одержимо:

          n'      −1 + √(1 + tg2α)
         — = ————————.                    (10)
          m                 tgα

Слід зауважити, що тут для справдження рівності n' — не ціле число, яке відрізняється від цілого числа n на величину δ = n'n, яка пропорційна похибці представлення кута. На основі рівняння (10) можна запропонувати наступний алгоритм пошуку гідної апроксимації кута α.

    Алгоритм. Початкові дані: кут 0<α<90°, максимальна похибка Δ, максимальне значення генеруючого коефіцієнта mmах.
  1. Пункти 2−6 виконати для 2 ≤ mmmах.
  2. Обчислити f = n'/m за формулою (10).
  3. n = rnd(f ·m).
  4. Обчислення трійки (a,b,c) за формулами (2).
  5. Обчислення похибки δ = |arctg(a/b) − α|.
  6. Якщо δ ≤ Δ, то (a,b,c) і δ запам'ятовуються.
  7. Серед запам'ятованих (a,b,c) вибрати найбільш підходящу трійку, як результат. Кінець.

В алгоритмі операція rnd(a) — дає найближче до а ціле число, тобто округлене а. Найбільш підходяща трійка — означає оптимальне рішення, яке, наприклад, задовольняє вимоги невеликої розрядності при задовільній точності.

Алгоритм реалізовано в програмі Triplet_find.PAS, яка виконується в інтерпретаторі мови Паскаль — програмі Algo. Результат її роботи:
         

для кута 10° з абсолютною похибкою 0,1% є трійка (92,525,533), а з похибкою 0,002% — (1120,6351,6449).

Слід відмітити, що для кута 45° з точністю 5·10−10 одержується трійка (927538920,927538921,1311738121) , яка задає число с/а = √2 з точністю 10−9. А якщо це число представити як 2c / (a + b), то похибка представлення складе 10−19. Це свідчить про те, що за допомогою піфагорових трійок можна досить точно розраховувати деякі ірраціональні числа.



До попереднього розділуДо наступного розділу


Сайт управляется системой uCoz