Рассмотрите уравнение x^3-3x+1=0: какие аналитические и численные методы поиска корней вы бы применили, в каких случаях один метод превосходит другой, и какие критерии остановки использовать
Аналитически: - Общая формула Кардано для кубического есть (для приведённого к виду t3+pt+q=0t^3+pt+q=0t3+pt+q=0): корни выражаются через кубические корни t=u+v,u3,v3=−q2±(q2)2+(p3)3.
t=u+v,\qquad u^3,v^3=-\tfrac{q}{2}\pm\sqrt{\left(\tfrac{q}{2}\right)^2+\left(\tfrac{p}{3}\right)^3}. t=u+v,u3,v3=−2q±(2q)2+(3p)3.
Но при трёх действительных корнях («casus irreducibilis») подкоренные выражения отрицательны и появляются комплексные промежуточные величины, поэтому на практике удобнее тригонометрическая форма. - Для уравнения x3−3x+1=0x^3-3x+1=0x3−3x+1=0 имеем p=−3, q=1p=-3,\ q=1p=−3,q=1. Пусть r=2−p3=2,ϕ=13arccos (3q2p−3p)=2π9.
r=2\sqrt{-\tfrac{p}{3}}=2,\qquad \phi=\tfrac{1}{3}\arccos\!\Big(\tfrac{3q}{2p}\sqrt{-\tfrac{3}{p}}\Big)=\tfrac{2\pi}{9}. r=2−3p=2,ϕ=31arccos(2p3q−p3)=92π.
Тогда три действительных корня xk=rcos (ϕ−2πk3),k=0,1,2,
x_k=r\cos\!\Big(\phi-\tfrac{2\pi k}{3}\Big),\quad k=0,1,2, xk=rcos(ϕ−32πk),k=0,1,2,
т.е. x1=2cos 2π9,x2=2cos 4π9,x3=2cos 8π9
x_1=2\cos\!\tfrac{2\pi}{9},\quad x_2=2\cos\!\tfrac{4\pi}{9},\quad x_3=2\cos\!\tfrac{8\pi}{9} x1=2cos92π,x2=2cos94π,x3=2cos98π
(приблизительно x≈1.53209, 0.34730, −1.87939x\approx 1.53209,\ 0.34730,\ -1.87939x≈1.53209,0.34730,−1.87939). Это точное и стабильное аналитическое выражение для данного случая. Численные методы (когда использовать и достоинства/недостатки): - Метод деления пополам (bisection): гарантированно сходится к корню, монотонно уменьшая интервал; скорость линейная. Использовать для надёжного обнаружения и брукетирования корней (когда известен знак на концах интервала). - Ньютон (Newton–Raphson): квадратичная сходимость близко к ненулевому простому корню; требуется вычисление f′(x)=3x2−3f'(x)=3x^2-3f′(x)=3x2−3 и хорошее начальное приближение. Уязвим к сходимости к другому корню или расползанию, если начальное приближение далеко или f′f'f′ близко к нулю. - Секант: не требует производной, скорость суперлинейная (~1.618), полезен если производная неудобна или вычислительно дорога. - Brent (комбинированный метод: bisection + secant + inverse quadratic interpolation): надёжен и быстрый на практике — предпочтителен, если нужно автоматически и стабильно найти корень с брекетом. - Методы для всех корней: метод Дженкинса–Траба или численное нахождение собственных значений компаньон-матрицы (QR) — хороши, если нужно все корни полинома; Durand–Kerner/Weierstrass для одновременного поиска всех корней. - Для комплексных корней или вырожденных (многократных) ситуаций: Muller's метод, модифицированный Newton для кратных корней, или специальные алгоритмы с регуляризацией. Рекомендация для данного уравнения: - Получить точные выражения тригонометрически (см. выше) или — если нужны десятичные значения — быстро: брукетирование знаками на отрезках (−2,−1),(0,1),(1,2)(-2,-1),(0,1),(1,2)(−2,−1),(0,1),(1,2) + Brent или сначала bisection, затем Newton для «полировки» (полиному вычисление производной тривиально). Критерии остановки (практические): - По разности приближений: ∣xn+1−xn∣<εx|x_{n+1}-x_n|<\varepsilon_x∣xn+1−xn∣<εx. - По невязке: ∣f(xn)∣<εf|f(x_n)|<\varepsilon_f∣f(xn)∣<εf. - Комбинированный критерий: одновременно ∣xn+1−xn∣<εx|x_{n+1}-x_n|<\varepsilon_x∣xn+1−xn∣<εx или ∣f(xn)∣<εf|f(x_n)|<\varepsilon_f∣f(xn)∣<εf и число итераций < N_max. - Для полинома полезно контролировать относительную погрешность: ∣xn+1−xn∣<εrel ∣xn+1∣|x_{n+1}-x_n|<\varepsilon_{\text{rel}}\,|x_{n+1}|∣xn+1−xn∣<εrel∣xn+1∣. - Практические значения для двойной точности: εx∼10−12÷10−14\varepsilon_x\sim 10^{-12}\div 10^{-14}εx∼10−12÷10−14, εf∼10−12÷10−14\varepsilon_f\sim 10^{-12}\div 10^{-14}εf∼10−12÷10−14; или stricter до порядка машинного эпсилона ∼10−16\sim 10^{-16}∼10−16 при необходимости. Обязательно устанавливать предел по итерациям (например Nmax=50N_{\max}=50Nmax=50–100) и проверять, не застряла ли итерация в точке с малым производным. Коротко: для данного уравнения — аналитическое трёхкосинусное решение предпочтительно; для численных задач — брекетирование + Brent (или bisection→Newton) как универсальная и быстрая стратегия; использовать сочетание критерия по ∣Δx∣|\Delta x|∣Δx∣ и ∣f(x)∣|f(x)|∣f(x)∣ и лимит итераций.
- Общая формула Кардано для кубического есть (для приведённого к виду t3+pt+q=0t^3+pt+q=0t3+pt+q=0): корни выражаются через кубические корни
t=u+v,u3,v3=−q2±(q2)2+(p3)3. t=u+v,\qquad u^3,v^3=-\tfrac{q}{2}\pm\sqrt{\left(\tfrac{q}{2}\right)^2+\left(\tfrac{p}{3}\right)^3}.
t=u+v,u3,v3=−2q ±(2q )2+(3p )3 . Но при трёх действительных корнях («casus irreducibilis») подкоренные выражения отрицательны и появляются комплексные промежуточные величины, поэтому на практике удобнее тригонометрическая форма.
- Для уравнения x3−3x+1=0x^3-3x+1=0x3−3x+1=0 имеем p=−3, q=1p=-3,\ q=1p=−3, q=1. Пусть
r=2−p3=2,ϕ=13arccos (3q2p−3p)=2π9. r=2\sqrt{-\tfrac{p}{3}}=2,\qquad \phi=\tfrac{1}{3}\arccos\!\Big(\tfrac{3q}{2p}\sqrt{-\tfrac{3}{p}}\Big)=\tfrac{2\pi}{9}.
r=2−3p =2,ϕ=31 arccos(2p3q −p3 )=92π . Тогда три действительных корня
xk=rcos (ϕ−2πk3),k=0,1,2, x_k=r\cos\!\Big(\phi-\tfrac{2\pi k}{3}\Big),\quad k=0,1,2,
xk =rcos(ϕ−32πk ),k=0,1,2, т.е.
x1=2cos 2π9,x2=2cos 4π9,x3=2cos 8π9 x_1=2\cos\!\tfrac{2\pi}{9},\quad x_2=2\cos\!\tfrac{4\pi}{9},\quad x_3=2\cos\!\tfrac{8\pi}{9}
x1 =2cos92π ,x2 =2cos94π ,x3 =2cos98π (приблизительно x≈1.53209, 0.34730, −1.87939x\approx 1.53209,\ 0.34730,\ -1.87939x≈1.53209, 0.34730, −1.87939). Это точное и стабильное аналитическое выражение для данного случая.
Численные методы (когда использовать и достоинства/недостатки):
- Метод деления пополам (bisection): гарантированно сходится к корню, монотонно уменьшая интервал; скорость линейная. Использовать для надёжного обнаружения и брукетирования корней (когда известен знак на концах интервала).
- Ньютон (Newton–Raphson): квадратичная сходимость близко к ненулевому простому корню; требуется вычисление f′(x)=3x2−3f'(x)=3x^2-3f′(x)=3x2−3 и хорошее начальное приближение. Уязвим к сходимости к другому корню или расползанию, если начальное приближение далеко или f′f'f′ близко к нулю.
- Секант: не требует производной, скорость суперлинейная (~1.618), полезен если производная неудобна или вычислительно дорога.
- Brent (комбинированный метод: bisection + secant + inverse quadratic interpolation): надёжен и быстрый на практике — предпочтителен, если нужно автоматически и стабильно найти корень с брекетом.
- Методы для всех корней: метод Дженкинса–Траба или численное нахождение собственных значений компаньон-матрицы (QR) — хороши, если нужно все корни полинома; Durand–Kerner/Weierstrass для одновременного поиска всех корней.
- Для комплексных корней или вырожденных (многократных) ситуаций: Muller's метод, модифицированный Newton для кратных корней, или специальные алгоритмы с регуляризацией.
Рекомендация для данного уравнения:
- Получить точные выражения тригонометрически (см. выше) или — если нужны десятичные значения — быстро: брукетирование знаками на отрезках (−2,−1),(0,1),(1,2)(-2,-1),(0,1),(1,2)(−2,−1),(0,1),(1,2) + Brent или сначала bisection, затем Newton для «полировки» (полиному вычисление производной тривиально).
Критерии остановки (практические):
- По разности приближений: ∣xn+1−xn∣<εx|x_{n+1}-x_n|<\varepsilon_x∣xn+1 −xn ∣<εx .
- По невязке: ∣f(xn)∣<εf|f(x_n)|<\varepsilon_f∣f(xn )∣<εf .
- Комбинированный критерий: одновременно ∣xn+1−xn∣<εx|x_{n+1}-x_n|<\varepsilon_x∣xn+1 −xn ∣<εx или ∣f(xn)∣<εf|f(x_n)|<\varepsilon_f∣f(xn )∣<εf и число итераций < N_max.
- Для полинома полезно контролировать относительную погрешность: ∣xn+1−xn∣<εrel ∣xn+1∣|x_{n+1}-x_n|<\varepsilon_{\text{rel}}\,|x_{n+1}|∣xn+1 −xn ∣<εrel ∣xn+1 ∣.
- Практические значения для двойной точности: εx∼10−12÷10−14\varepsilon_x\sim 10^{-12}\div 10^{-14}εx ∼10−12÷10−14, εf∼10−12÷10−14\varepsilon_f\sim 10^{-12}\div 10^{-14}εf ∼10−12÷10−14; или stricter до порядка машинного эпсилона ∼10−16\sim 10^{-16}∼10−16 при необходимости. Обязательно устанавливать предел по итерациям (например Nmax=50N_{\max}=50Nmax =50–100) и проверять, не застряла ли итерация в точке с малым производным.
Коротко: для данного уравнения — аналитическое трёхкосинусное решение предпочтительно; для численных задач — брекетирование + Brent (или bisection→Newton) как универсальная и быстрая стратегия; использовать сочетание критерия по ∣Δx∣|\Delta x|∣Δx∣ и ∣f(x)∣|f(x)|∣f(x)∣ и лимит итераций.