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, Супермодераторы



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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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