Решение WxMaxima Уравнение приводит к комплексным числам?

Я пытаюсь решить уравнение экв для мю. Как мне сказать Максиму, что я хочу только положительный результат, это лучший способ var : abs(mu), res;? Но моя главная проблема в том, что результаты содержат %i, откуда это взялось? Разве это не должно быть решено в R, без необходимости комплексных чисел, как я продемонстрировал в своем ручном вычислении?

Арифметическое решение:

(%i16)  eq: RN^2 = R^2+N^2;
(eq)    (121*G^2*h2^2*t1^2)/(100*h1^2*t2^2)=(G^2*v^2)/(4*mu^2)+G^2/4
(%i20)  res: solve(eq,mu); var : abs(mu), res; expand(var); res, numer;
(res)   [mu=-(5*%i*h1*t2*v)/sqrt(25*h1^2*t2^2-121*h2^2*t1^2),mu=(5*%i*h1*t2*v)/sqrt(25*h1^2*t2^2-121*h2^2*t1^2)]
(var)   5*abs(h1)*abs(t2)*abs(1/sqrt(25*h1^2*t2^2-121*h2^2*t1^2))*abs(v)
(%o19)  5*abs(h1)*abs(t2)*abs(1/sqrt(25*h1^2*t2^2-121*h2^2*t1^2))*abs(v)
(%o20)  [mu=-(5*%i*h1*t2*v)/(25*h1^2*t2^2-121*h2^2*t1^2)^0.5,mu=(5*%i*h1*t2*v)/(25*h1^2*t2^2-121*h2^2*t1^2)^0.5]

Числовое решение:

(%i26)  t1: 64`mm;
    t2: 33`mm;
    h1: 47`mm;
    h2: 28`mm;
    v: 2;
(t1)    64 ` mm
(t2)    33 ` mm
(h1)    47 ` mm
(h2)    28 ` mm
(v) 2
(%i42)  res: solve(eq,mu); var : abs(mu), res; var, numer; res, numer;
(res)   [mu=-(5*%i*h1*t2*v)/sqrt(25*h1^2*t2^2-121*h2^2*t1^2),mu=(5*%i*h1*t2*v)/sqrt(25*h1^2*t2^2-121*h2^2*t1^2)]
(var)   1410/sqrt(2714239)
(%o41)  0.8558449047226222
(%o42)  [mu=-(0.8558449047226222*%i)/(-1)^0.5,mu=(0.8558449047226222*%i)/(-1)^0.5]

Решение вручную (отрицательный результат опущен): https://www.bilder-upload.eu/bild-07c372-1620053087.png.html


person Dux    schedule 03.05.2021    source источник


Ответы (2)


Если не ошибаюсь, результат реален только если 121*h2^2*t1^2 > 25*h1^2*t2^2.

So:

  ​eq: (121*G^2*h2^2*t1^2)/(100*h1^2*t2^2)=(G^2*v^2)/(4*mu^2)+G^2/4;
  ​assume ( 121*h2^2*t1^2 > 25*h1^2*t2^2 );
  ​solve( eq, mu);
         ​=> [mu = -(5*h1*t2*v)/sqrt(121*h2^2*t1^2-25*h1^2*t2^2),
             mu =  (5*h1*t2*v)/sqrt(121*h2^2*t1^2-25*h1^2*t2^2) ]

Как найти это волшебное неравенство? Ну, вы запускаете solve без него и замечаете, что есть квадратный корень, у которого может быть отрицательный аргумент....

person Stavros Macrakis    schedule 03.05.2021

По крайней мере, часть истории заключается в том, что Maxima упрощает sqrt(-b^2/(c - a)) до %i*abs(b)/sqrt(c - a) вместо abs(b)/sqrt(a - c). С другой стороны, sqrt(b^2/(a - c)) упрощается до abs(b)/sqrt(a - c).

Я подумал, что, возможно, способ получить результат, свободный от %i, состоит в том, чтобы переставить sqrt(-b^2/(c - a)) в sqrt(b^2/(a - c)), а затем позволить встроенному упростителю работать над этим. (tellsimp выполняет это - правило tellsimp применяется до встроенного упрощения, а правило tellsimpafter применяется после него.)

Я попытался определить подходящее правило tellsimp, но не смог найти что-то, что работало бы для приведенного примера. Могу выложить свои попытки, если есть интерес.

person Robert Dodier    schedule 04.05.2021