2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу Пред.  1, 2
 
 
Сообщение13.03.2009, 13:54 
e7e5 в сообщении #194651 писал(а):
Теперь я не понял. Почему требуют?
Я неудачно выразился, взял просто свежий случай из своей практики, когда был один действительный корень. Я лишь о том, что
gris писал(а):
Несколько раз пытался по формуле Кардано посчитать корни, просто для интереса. Но каждый раз путался и злился.
Берём не формулу Кардано, а так называемое тригонометрическое решение. Там всё ясно и легко, путаться и злиться не приходится. Есть, правда, и другая точка зрения:
ewert в сообщении #135304 писал(а):
Не знаю и знать не хочу, что такое "тригонометрическое решение", но сильно подозреваю: это -- не более чем перевод на вещественный язык комплексной формулы Кардано.


Добавлено спустя 1 час 35 минут 45 секунд:

Вот пример возни с кубическим уравнением. Не сосем в тему e7e5, но пример мне кажется полезным.
Почему-то все обычно избегают явных решений кубических и четвёртой степени уравнений.

Когда я работал на строительстве одного автобана, и понадобилось рассчитывать т.н. переходную кривую,
мне пришлось, между прочими делами, искать точку пересечения окружности

$$
   [x+\mathrm{sign}w(1{+}r_w)]^2+y^2 -r_w^2=0
$$

с куском гиперболы

$$\sin\sigma(1-x^2+y^2)+2x y\cos\sigma=0,\qquad
    \mathrm{sign}(xy)=\mathrm{sign}\sigma.
$$

Прораб тогда попросил меня написать решение подробно. Кусок отчёта вставляю.

Исключение $x$ даёт

$$
   \begin{array}{l}
      y(y^3+3c_1y + 2c_0)=0,\quad\mbox{где}\\
      \hphantom{y(y^3+3} c_1=\dfrac13\left[1+2r_w-r_w(2{+}r_w) \sin^2\sigma\right],\\
      \hphantom{y(y^3+3} c_0=\mathrm{sign}w\,r_w(1{+}r_w)\cos\sigma\sin\sigma.
   \end{array}
$$

Исключение $y^2$ из той же пары:

$$
    x=\frac{-\sin\sigma(1+r_w+y^2)}{\sin\sigma(1{+}r_w)\mathrm{sign}(w)+y\cos\sigma}.
$$

Дискриминант кубического уравнения $y^3+3c_1y + 2c_0=0$:
$$
  \begin{array}{rcl}
   D&=&c_1^3+c_0^2=\\
    &=&\frac{1\strut}{27}(1+r_w\sin^2\sigma)^2%
        \left[(1+2r_w)^3-r_w(2+r_w)^3\sin^2\sigma\right].
  \end{array}
$$

Критерий выбора подходящих корней:
$$        
\mathrm{sign} y_i=-\mathrm{sign}w\,\mathrm{sign}\sigma:\quad
\setlength{\unitlength}{2pt}
\parbox[c]{70\unitlength}{%
\begin{picture}(70,20)(-35,-10)
\put(-35,0){\vector(1,0){70}}
\put(0,-10){\vector(0,1){24}}
\put(-20,0){\circle{20}}
\put(20,0){\circle{20}}
\put(10,0){\circle*{1}}\put(-10,0){\circle*{1}}
\put(7,1){1}%\put(-10,1){-1}
%
\put(13,13){$w<0$}
\put(13,2){$\sigma>0$}
\put(13,-5){$\sigma<0$}
%
\put(-27,13){$w>0$}
\put(-27,2){$\sigma<0$}
\put(-27,-5){$\sigma>0$}
\end{picture}}
$$
Всё дико симметрично, поэтому будем искать решение в первом квадранте, т.е. для $\sigma=|\sigma|$, $w<0$
$$
   \left\{\begin{array}{l}
      c_0<0\;\Rightarrow\; |\sigma|\in(0,\pi/2),\\
      c_0=0\;\Rightarrow\; |\sigma|=\pi/2,\\
      c_0>0\;\Rightarrow\; |\sigma|\in(\pi/2,\pi),
   \end{array}\right.
$$
и выделим положительные корни уравнения.

$\bullet$ Имеем единственный действительный корень при $D>0$:
$$   \begin{array}{llll}
     c_1>0:\;%
       &y_1 =-\sqrt{c_1}\left(\dfrac{1}{\tg\alpha}-\tg\alpha\right),\quad
       &\tg\alpha=\sqrt[3]{\tg\dfrac{\beta}{2}},\qquad
       &\beta=\arctg\frac{c_1\sqrt{c_1}}{c_0};\\
%
     c_1<0:\;
     &y_1 = -\sqrt{-c_1} \left(\dfrac{1}{\tg\alpha}+\tg\alpha\right),\quad
     &\tg\alpha=\sqrt[3]{\tg\dfrac{\beta}{2}},\qquad
     &\beta=\arcsin\dfrac{c_1\sqrt{-c_1}}{c_0};\\
%
     c_1 =0: 
     &y_1  =-\sqrt[3]{-3c_0}. & &
   \end{array}
$$
Объединяем два случая $c_1\not=0$:
$$   y_1 = \sqrt{|c_1|} \left(\mathrm{sign} c_1 \tg\alpha- \dfrac{1}{\tg\alpha}\right),
       \quad
   \tg\alpha=\sign c_0\dfrac{\sqrt{|c_1|}}{\sqrt[3]{|c_0|+\sqrt{D} }}.
$$
Убедившись, что при раскрытии скобок неопределённость в случае $\tg\alpha=0$ (от $c_1=0$) корректно исчезает, присоединяем к ним случай $c_1=0$:
$$
   c_1\lesseqgtr0:\quad
   y_1 = - \mathrm{sign} c_0 \left(\sqrt[3]{|c_0|+\sqrt{D} }-
                         \dfrac{c_1}{\sqrt[3]{|c_0|+\sqrt{D} }} \right).
$$
Выражение в скобках положительно (легко убедиться, сравнив кубы слагаемых), и $ \mathrm{sign} y_1 =- \mathrm{sign} c_0$. Положительный корень будет только при
$c_0<0$, т.е. при $|\sigma|<\pi/2$.


$\bullet$~$D=0$ ($r_w=r_0$). При этом $c_1=-\sqrt[3]{c_0^2}<0$, и
$$     (y+2\sqrt[3]{c_0})(y-\sqrt[3]{c_0})^2=0,\quad
     y_1=-2\sqrt[3]{c_0},\quad y_2=y_3=\sqrt[3]{c_0}.
$$
Положительные корни
$$   \begin{array}{lll}
      c_0<0&(|\sigma|<\pi/2): & y_1\\
      c_0=0&(|\sigma|=\pi/2): & \mbox{нет};\\
      c_0>0&(|\sigma|>\pi/2): & y_{2,3}.
   \end{array}
$$


$\bullet$~Имеем три корня при $D<0$, т.е. $r_w>r_0$:
$$
   \begin{array}{l}
     y_1 =2\sqrt{-c_1}\cos\frac{\alpha}{3},\quad
     y_2 =-2\sqrt{-c_1}\cos\left(\frac{\alpha}{3}+\frac{\pi}{3}\right),\quad
     y_3 =-2\sqrt{-c_1}\cos\left(\frac{\alpha}{3}-\frac{\pi}{3}\right),\\
    \mbox{где}\quad \alpha=\arccos\frac{c_0}{c_1 \sqrt{-c_1} }
                          =\arg(-c_0+\iu\sqrt{-D})
   \end{array}
$$
(в частности, если $c_0=0$, то $ y_1 =\sqrt{-3c_1}$, $y_2  = 0$, $y_3 ={-\sqrt{-3c_1}}$.
Выбор положительных корней:
$$
   \begin{array}{ll}
     c_0<0: & y_3 <y_2 <0<y_1;\\
     c_0=0: & y_3 <y_2 =0<y_1;\\
     c_0>0: & y_3 <0<y_2 <y_1.
   \end{array}  
$$

$$\rule{7cm}{4pt}$$

По некоторым причинам явные решения хотелось иметь.
В частности, мастер владел только калькулятором и итерировать на нём отказывался категорически.

 
 
 
 
Сообщение13.03.2009, 14:03 
Прораб не шибко сильно удивился такой вдумчивости?

 
 
 
 
Сообщение13.03.2009, 14:10 
Подозреваю, он просто хотел забабахать красивую рацуху и срубить дополнительные бабки.

 
 
 
 
Сообщение13.03.2009, 14:52 
gris в сообщении #194703 писал(а):
Несколько раз пытался по формуле Кардано посчитать корни, просто для интереса. Но каждый раз путался и злился

Видимо, потому, что в книжках обычно формулу Кардано для красоты приводят в симметричном виде, а этот вид для вычислений очень неудобен. Надо так. Если $z^3+pz+q=0$, то $$z=w-{1\over3w}$$, где

$$w=\sqrt[3]{-{q\over2}\pm\sqrt{{q^2\over4}+{p^3\over27}}}.$

Здесь корни третьей степени -- все возможные, а вот знак перед квадратным корнем фиксирован. Выбрать его надо так, чтобы обеспечить наибольшую точность, т.е. в вещественном случае он должен быть равен знаку первого слагаемого (в комплексном, естественно, безразлично).

Из любопытства набросал процедурку (без оптимизаций), вроде работает. Авось когда и пригодится.

Код:
{--------------------------------------------------------}
procedure roots3pq(p,q: float;
                   var r1,i1, r2,i2, r3,i3: float);
var  rz,iz, d,az,mz: float;
begin
  rz:=-q/2;
  d:=q*q/4 + p*p*p/27;
  if d<0
    then iz:=sqrt(-d)
    else begin
      if rz>0   then rz:=rz+sqrt(d)   else rz:=rz-sqrt(d);
      iz:=0;    end;
  if abs(rz)+abs(iz)=0 then begin
    r1:=0;    r2:=0;    r3:=0;
    i1:=0;    i2:=0;    i3:=0;
    Exit;     end;
  mz:=exp(ln(sqr(rz)+sqr(iz))/6);
  if abs(iz)<abs(rz) then az:=arctan(iz/rz)
    else if iz*rz>=0 then az:=pi/2 - arctan(rz/iz)
    else az:=-pi/2 - arctan(rz/iz);
  if rz<0 then az:=az+pi;
  az:=az/3;

  rz:=mz*cos(az);    iz:=mz*sin(az);
  r1:=rz - p*rz/(3*mz*mz);
  i1:=iz + p*iz/(3*mz*mz);

  az:=az + 2*pi/3;
  rz:=mz*cos(az);    iz:=mz*sin(az);
  r2:=rz - p*rz/(3*mz*mz);
  i2:=iz + p*iz/(3*mz*mz);

  az:=az + 2*pi/3;
  rz:=mz*cos(az);    iz:=mz*sin(az);
  r3:=rz - p*rz/(3*mz*mz);
  i3:=iz + p*iz/(3*mz*mz);
  end;
{--------------------------------------------------------}

 
 
 
 
Сообщение15.03.2009, 08:31 
Алексей К. писал(а):
Вот пример возни с кубическим уравнением. Не сосем в тему e7e5, но пример мне кажется полезным.
Почему-то все обычно избегают явных решений кубических и четвёртой степени уравнений.

Когда я работал на строительстве одного автобана, и понадобилось рассчитывать т.н. переходную кривую,
мне пришлось, между прочими делами, искать точку пересечения окружности

$$
   [x+\mathrm{sign}w(1{+}r_w)]^2+y^2 -r_w^2=0
$$

с куском гиперболы

$$\sin\sigma(1-x^2+y^2)+2x y\cos\sigma=0,\qquad
    \mathrm{sign}(xy)=\mathrm{sign}\sigma.
$$


А почему именно такая окружность? Что значит: $\mathrm{sign}w(1{+}r_w)$ ? угловую скорость какую-то учитывали...

 
 
 
 CAD
Сообщение15.03.2009, 13:29 
Нет, просто в реальной CAD-задачке случилась некая система уравнений, выглядящая как пересечение окружности с гиперболой, $w$ --- это остатки некого весового множителя, а не омега $\omega$, прожектора там и близко не было. В детали вникать не буду, знаю, что этой темой здесь не интересуются. Я уже тоже.

 
 
 [ Сообщений: 21 ]  На страницу Пред.  1, 2


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group