2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Системы неравенств в Mathematica
Сообщение05.03.2018, 13:45 


02/12/16
60
Всем привет, при решении системы полиномиальных неравенств Mathematica с помощью функции Reduce выдает решения типа
Код:
t < 0. || 0. < t < 0.0458252 || 0.0458252 < t < 0.0942255 ||  t > 5.3268

Как можно отформатировать этот ответ, чтобы выколотые точки включились в решение?
Код:
t < 0.0942255 || t > 5.3268

Также, можно ли как-то убирать из ответа крошечные интервалы
Код:
6.55446 < t < 6.55446 || t > 7.3268

(Здесь должно быть просто $t > 7.3268$)

Можно конечно перевести все в тип String и пробовать парсить, но слиишком неудобен этот способ...

 Профиль  
                  
 
 Posted automatically
Сообщение05.03.2018, 13:52 
Заслуженный участник


09/05/12
25179
 i  Тема перемещена из форума «Околонаучный софт» в форум «Карантин»
по следующим причинам:

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

Исправьте все Ваши ошибки и сообщите об этом в теме Сообщение в карантине исправлено.
Настоятельно рекомендуется ознакомиться с темами Что такое карантин и что нужно делать, чтобы там оказаться и Правила научного форума.

 Профиль  
                  
 
 Posted automatically
Сообщение05.03.2018, 16:53 
Заслуженный участник


09/05/12
25179
 i  Тема перемещена из форума «Карантин» в форум «Околонаучный софт»

 Профиль  
                  
 
 Re: Системы неравенств в Mathematica
Сообщение05.03.2018, 18:24 
Заслуженный участник


25/02/11
1797
По первому вопросу
Код:
FullSimplify[
  t < 0. || 0. < t < 0.0458252 || 0.0458252 < t < 0.0942255 || t > 5.3268
    /. {Less -> LessEqual, Greater -> GreaterEqual}
  ] /. {LessEqual -> Less, GreaterEqual -> Greater}

По второму
Код:
FullSimplify[6.55446 < t < 6.55446 || t > 7.3268]

 Профиль  
                  
 
 Re: Системы неравенств в Mathematica
Сообщение05.03.2018, 20:28 


02/12/16
60
Vince Diesel
Спасибо!
Неожиданным оказалось, что при запросе
Код:
FullSimplify[
0.49883727482560103 < t < 0.49883727482560104 || 1. < t < 2.]

Mathematica выдает
Код:
1. < t < 2.

Хотя "0.49883727482560103 < t < 0.49883727482560104" определяет существующий промежуток.
Кстати, ответ на запрос (отличаются только последние цифры)
Код:
0.49883727482560103 < 0.49883727482560104

будет False. Я же думал, что при любой точности Mathematica будет такие вещи определять правильно.

 Профиль  
                  
 
 Re: Системы неравенств в Mathematica
Сообщение05.03.2018, 21:16 
Аватара пользователя


11/06/12
10390
стихия.вздох.мюсли
xjar1 в сообщении #1295517 писал(а):
Можно конечно перевести все в тип String и пробовать парсить, но слиишком неудобен этот способ...
Это худшая идея, которую только можно придумать. Выражения WL, получаемые в результате выполнения вычислений, всегда структурированы достаточно хорошо для того, чтобы их можно было использовать как входные данные для последующих вычислений. Эта цельность является неотъемлемым свойством языка.
xjar1 в сообщении #1295604 писал(а):
Неожиданным оказалось, что...
Думается, что FullSimplify использует некие более широкие умолчания, но это нужно проверять, а сейчас не могу.

 Профиль  
                  
 
 Re: Системы неравенств в Mathematica
Сообщение06.03.2018, 00:06 


02/12/16
60
Vince Diesel в сообщении #1295575 писал(а):
По первому вопросу
Код:
FullSimplify[
  t < 0. || 0. < t < 0.0458252 || 0.0458252 < t < 0.0942255 || t > 5.3268
    /. {Less -> LessEqual, Greater -> GreaterEqual}
  ] /. {LessEqual -> Less, GreaterEqual -> Greater}

По второму
Код:
FullSimplify[6.55446 < t < 6.55446 || t > 7.3268]

Кстати, тут специально используется FullSimplify вместо Simplify? Как я понял разницы при ответе нет, но FullSimplify вычисляет чуть быстрее(хотя обычно наоборот)

 Профиль  
                  
 
 Re: Системы неравенств в Mathematica
Сообщение06.03.2018, 07:14 
Заслуженный участник


25/02/11
1797
xjar1 в сообщении #1295624 писал(а):
Кстати, тут специально используется FullSimplify вместо Simplify?

Использую FullSimplify по умолчанию, чтобы не проверять каждый раз, все ли Simplify упростило, что можно.

Похоже, что числа с десятичной точкой вроде 0.49883727482560103 автоматически преобразуются в 0.49883727482560103`, что означает машинную точность $MachinePrecision. Если эта точность меньше разности чисел, то они считаются равными. Например, проверка 0.49883727482560103 == 0.49883727482560104 дает True.

Кстати, если использовать Reduce вместо FullSimplify
Код:
0.49883727482560103 < t < 0.49883727482560104 || 1. < t < 2. // Reduce

то выдается предупреждение:
Код:
Reduce::ratnz: Reduce was unable to solve the system with inexact coefficients. The answer was obtained by solving a corresponding exact system and numericizing the result.

указывающее, что может быть не все в порядке. То есть, возможно, Reduce решает правильно, а затем перегоняет ответ в числа с плавающей точкой, который автоматически упрощается, удаляя малые интервалы.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: DariaRychenkova


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group