Упростите выражение sin^2 x / (1 - cos x) и обсудите, какие преобразования допустимы при приближённых вычислениях для малых x; какие алгебраические тождества и численные приёмы (например, использование формул приведения или разложения в ряд) следует предпочесть, чтобы избежать потери точности и деления на числа, близкие к нулю?
Упрощение. Используя формулы половинного угла: 1−cosx=2sin2x2,sinx=2sinx2cosx2,
1-\cos x=2\sin^2\frac{x}{2},\qquad \sin x=2\sin\frac{x}{2}\cos\frac{x}{2}, 1−cosx=2sin22x,sinx=2sin2xcos2x,
получаем sin2x1−cosx=4sin2x2cos2x22sin2x2=2cos2x2,
\frac{\sin^2 x}{1-\cos x}=\frac{4\sin^2\frac{x}{2}\cos^2\frac{x}{2}}{2\sin^2\frac{x}{2}}=2\cos^2\frac{x}{2}, 1−cosxsin2x=2sin22x4sin22xcos22x=2cos22x,
при условии sinx2≠0\sin\frac{x}{2}\neq0sin2x=0 (т. е. x∉2πZx\notin 2\pi\mathbb{Z}x∈/2πZ). Для точек x∈2πZx\in2\pi\mathbb{Z}x∈2πZ исходное выражение имеет вид 0/00/00/0, но предел при x→0x\to0x→0 даёт значение 222, так что расширение по непрерывности даёт тот же результат. Допустимые преобразования и замечания для приближённых вычислений - Алгебраическая отмена общих множителей допустима только если они не равны нулю; при вычислениях в конечной арифметике лучше применять тождественную замену на 2cos2x22\cos^2\frac{x}{2}2cos22x, чтобы избежать деления на малое число. - Численная проблема: выражение 1−cosx1-\cos x1−cosx при малых xxx страдает от вычитания близких величин (катастрофическое сокращение точности). Поэтому НЕ рекомендуется вычислять sin2x1−cosx\frac{\sin^2 x}{1-\cos x}1−cosxsin2x как есть для малых xxx. - Рекомендуемые приёмы: 1. Использовать тождественную замену sin2x1−cosx=2cos2x2,
\frac{\sin^2 x}{1-\cos x}=2\cos^2\frac{x}{2}, 1−cosxsin2x=2cos22x,
— численно устойчиво, ибо вычисление cosx2\cos\frac{x}{2}cos2x для малого xxx даёт число близкое к 111, а операция возведения в квадрат и умножения на 222 не приводит к потере значащих цифр. 2. При очень малых xxx можно использовать разложение в ряд для нужной точности. Разложения: sinx=x−x36+O(x5),cosx=1−x22+x424+O(x6),
\sin x=x-\frac{x^3}{6}+O(x^5),\qquad \cos x=1-\frac{x^2}{2}+\frac{x^4}{24}+O(x^6), sinx=x−6x3+O(x5),cosx=1−2x2+24x4+O(x6),
следовательно sin2x1−cosx=2−x22+O(x4).
\frac{\sin^2 x}{1-\cos x}=2-\frac{x^2}{2}+O(x^4). 1−cosxsin2x=2−2x2+O(x4).
Для ∣x∣|x|∣x∣ меньше некоторого порога (например, порядка eps\sqrt{\mathrm{eps}}eps) можно подставлять конечный член ряда (например 2−x222-\tfrac{x^2}{2}2−2x2) с контролируемой ошибкой. 3. Альтернатива: вычислять через sinx2\sin\frac{x}{2}sin2xsin2x1−cosx=(2sinx2cosx2)22sin2x2=2cos2x2,
\frac{\sin^2 x}{1-\cos x}=\frac{(2\sin\frac{x}{2}\cos\frac{x}{2})^2}{2\sin^2\frac{x}{2}}=2\cos^2\frac{x}{2}, 1−cosxsin2x=2sin22x(2sin2xcos2x)2=2cos22x,
— практически то же, но при реализации ввести явную проверку на случай, когда sinx2\sin\frac{x}{2}sin2x под машинный ноль. - Практический порог: для двойной точности (eps ≈ 2.2⋅10−162.2\cdot10^{-16}2.2⋅10−16) порог порядка eps∼10−8\sqrt{\mathrm{eps}}\sim10^{-8}eps∼10−8. Для ∣x∣<10−8|x|<10^{-8}∣x∣<10−8 удобнее брать разложение ряда; для более крупных малых xxx безопасно использовать 2cos2x22\cos^2\frac{x}{2}2cos22x. - Если xxx близко к 2πk2\pi k2πk, предварительно свести аргумент по модулю 2π2\pi2π до небольшого значения (нап., в интервале [−π,π][-\pi,\pi][−π,π]), чтобы корректно оценивать малую величину. Кратко: для точных и устойчивых вычислений замените sin2x1−cosx\dfrac{\sin^2 x}{1-\cos x}1−cosxsin2x на 2cos2x22\cos^2\frac{x}{2}2cos22x; при очень малых xxx можно дополнительно использовать ряд 2−x22+O(x4)2-\tfrac{x^2}{2}+O(x^4)2−2x2+O(x4).
1−cosx=2sin2x2,sinx=2sinx2cosx2, 1-\cos x=2\sin^2\frac{x}{2},\qquad \sin x=2\sin\frac{x}{2}\cos\frac{x}{2},
1−cosx=2sin22x ,sinx=2sin2x cos2x , получаем
sin2x1−cosx=4sin2x2cos2x22sin2x2=2cos2x2, \frac{\sin^2 x}{1-\cos x}=\frac{4\sin^2\frac{x}{2}\cos^2\frac{x}{2}}{2\sin^2\frac{x}{2}}=2\cos^2\frac{x}{2},
1−cosxsin2x =2sin22x 4sin22x cos22x =2cos22x , при условии sinx2≠0\sin\frac{x}{2}\neq0sin2x =0 (т. е. x∉2πZx\notin 2\pi\mathbb{Z}x∈/2πZ). Для точек x∈2πZx\in2\pi\mathbb{Z}x∈2πZ исходное выражение имеет вид 0/00/00/0, но предел при x→0x\to0x→0 даёт значение 222, так что расширение по непрерывности даёт тот же результат.
Допустимые преобразования и замечания для приближённых вычислений
- Алгебраическая отмена общих множителей допустима только если они не равны нулю; при вычислениях в конечной арифметике лучше применять тождественную замену на 2cos2x22\cos^2\frac{x}{2}2cos22x , чтобы избежать деления на малое число.
- Численная проблема: выражение 1−cosx1-\cos x1−cosx при малых xxx страдает от вычитания близких величин (катастрофическое сокращение точности). Поэтому НЕ рекомендуется вычислять sin2x1−cosx\frac{\sin^2 x}{1-\cos x}1−cosxsin2x как есть для малых xxx.
- Рекомендуемые приёмы:
1. Использовать тождественную замену
sin2x1−cosx=2cos2x2, \frac{\sin^2 x}{1-\cos x}=2\cos^2\frac{x}{2},
1−cosxsin2x =2cos22x , — численно устойчиво, ибо вычисление cosx2\cos\frac{x}{2}cos2x для малого xxx даёт число близкое к 111, а операция возведения в квадрат и умножения на 222 не приводит к потере значащих цифр.
2. При очень малых xxx можно использовать разложение в ряд для нужной точности. Разложения:
sinx=x−x36+O(x5),cosx=1−x22+x424+O(x6), \sin x=x-\frac{x^3}{6}+O(x^5),\qquad \cos x=1-\frac{x^2}{2}+\frac{x^4}{24}+O(x^6),
sinx=x−6x3 +O(x5),cosx=1−2x2 +24x4 +O(x6), следовательно
sin2x1−cosx=2−x22+O(x4). \frac{\sin^2 x}{1-\cos x}=2-\frac{x^2}{2}+O(x^4).
1−cosxsin2x =2−2x2 +O(x4). Для ∣x∣|x|∣x∣ меньше некоторого порога (например, порядка eps\sqrt{\mathrm{eps}}eps ) можно подставлять конечный член ряда (например 2−x222-\tfrac{x^2}{2}2−2x2 ) с контролируемой ошибкой.
3. Альтернатива: вычислять через sinx2\sin\frac{x}{2}sin2x sin2x1−cosx=(2sinx2cosx2)22sin2x2=2cos2x2, \frac{\sin^2 x}{1-\cos x}=\frac{(2\sin\frac{x}{2}\cos\frac{x}{2})^2}{2\sin^2\frac{x}{2}}=2\cos^2\frac{x}{2},
1−cosxsin2x =2sin22x (2sin2x cos2x )2 =2cos22x , — практически то же, но при реализации ввести явную проверку на случай, когда sinx2\sin\frac{x}{2}sin2x под машинный ноль.
- Практический порог: для двойной точности (eps ≈ 2.2⋅10−162.2\cdot10^{-16}2.2⋅10−16) порог порядка eps∼10−8\sqrt{\mathrm{eps}}\sim10^{-8}eps ∼10−8. Для ∣x∣<10−8|x|<10^{-8}∣x∣<10−8 удобнее брать разложение ряда; для более крупных малых xxx безопасно использовать 2cos2x22\cos^2\frac{x}{2}2cos22x .
- Если xxx близко к 2πk2\pi k2πk, предварительно свести аргумент по модулю 2π2\pi2π до небольшого значения (нап., в интервале [−π,π][-\pi,\pi][−π,π]), чтобы корректно оценивать малую величину.
Кратко: для точных и устойчивых вычислений замените sin2x1−cosx\dfrac{\sin^2 x}{1-\cos x}1−cosxsin2x на 2cos2x22\cos^2\frac{x}{2}2cos22x ; при очень малых xxx можно дополнительно использовать ряд 2−x22+O(x4)2-\tfrac{x^2}{2}+O(x^4)2−2x2 +O(x4).