Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Wolfram Mathematica | Математика

Модерирует : gyra, Maz

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57

Открыть новую тему     Написать ответ в эту тему

xy



ХУдератор
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Wolfram Mathematica 14

Загрузка и поиск "лекарств"в "Варезнике"


 
Здесь обсуждаем вопросы языка Mathematica и программы, которая ИМХО лучше других выполняет свою задачу и, кроме, того очень точно соответствует своему названию, хотя там не забыли и про физиков и химиков и всех остальных:)

Всего записей: 10530 | Зарегистр. 28-05-2003 | Отправлено: 16:00 01-12-2003 | Исправлено: zAlAn711, 18:21 10-01-2024
popkov

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Andrew10
Тогда, боюсь, я ничего не могу подсказать, не зная сам алгоритм решения задачи. Видимо, необходимо решать задачу по шагам, чередуя символьные и численные этапы, и в одну строчку записать это вряд ли получится.

Всего записей: 1834 | Зарегистр. 22-03-2003 | Отправлено: 16:51 18-06-2012
Andrew10

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
popkov

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

 
В одну строчку и не требуется. Для "полуавтоматизации" выкладок мне достаточно понять, как сделать примерно следующее:
 
Есть выражение вида  
 
Sum[ expr, {n,0,Infinity}]==0
где expr - выражение, представляющее собой произведение нескольких сомножителей, каждый из которых зависит от целой переменной n, а также может зависеть от непрерывной переменной x, а может и не зависеть. Интегрирую это уравнение по x от 0 до 1 и хочу представить все выражение в виде
 
Sum[ expr1 Integrate[expr2,{x,0,1}],{n,0,Infinity}],  
 
где в expr1 сгруппированы те сомножители, которые не зависят от x, а в expr2 - те, которые зависят.
 
Сейчас делаю это "тупо" руками, переписывая формулы в окне Математики. Требует изрядного времени, но, главное, велик риск ошибок.
 
Мне нужно на Математике только получить аналитические выражения для коэффициентов системы линейных уравнений, а численные расчеты будут проводиться на Фортране.

Всего записей: 780 | Зарегистр. 26-02-2005 | Отправлено: 17:51 18-06-2012
r_green



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Andrew10

Код:
 
Sum[expr[n, x], {n, 0, Infinity}] == 0 // MapAt[Integrate[#, {x, 0, 1}] &, #, {1, 1}] &
 

Всего записей: 145 | Зарегистр. 17-09-2004 | Отправлено: 10:19 19-06-2012
Andrew10

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
r_green
 
Спасибо, почти то, что нужно. Еще бы научиться выносить из под интеграла множители в expr, не зависящие от x!
 

Всего записей: 780 | Зарегистр. 26-02-2005 | Отправлено: 11:23 19-06-2012
r_green



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Andrew10

Цитата:
Еще бы научиться выносить из под интеграла множители в expr, не зависящие от x

Это не улучшит эффективность интегрирования - Integrate[] сама умеет делать такое упрощение. AFAIK.

Всего записей: 145 | Зарегистр. 17-09-2004 | Отправлено: 12:03 19-06-2012
Andrew10

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
r_green

Цитата:
Это не улучшит эффективность интегрирования - Integrate[] сама умеет делать такое упрощение. AFAIK.  

А мне и не нужно интегрировать. В конечном счете получаются интегралы от произведения полиномов Гегенбауэра на синусы и косинусы, для которых в Бычкове-Прудникове есть формулы, а Математика их не знает. Так что все равно приходится интегралы с помощью подстановки заменять на их аналитические выражения.
Я уже написал чуть выше, что собственно численные расчеты планируется проводить не на Математике, а на Фортране, Математика используется только для аналитических выкладок.
 

Всего записей: 780 | Зарегистр. 26-02-2005 | Отправлено: 13:31 19-06-2012
r_green



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Andrew10
Сделайте тогда ф-цию, которая произведение expr разбивает на 2 по критерию зависимости от заданной переменной (например, с пом. Select[]) и применяет Intergate (или вашу собственную ф-цию интегрирования) к зависящей части.

Всего записей: 145 | Зарегистр. 17-09-2004 | Отправлено: 16:21 19-06-2012
Andrew10

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
r_green
Про Select[] понял, а есть ли в Математике функция, которая определяет, зависит ли expr от переменной x, или нужно такую функцию соорудить самому, например с помощью дифференцирования?

Всего записей: 780 | Зарегистр. 26-02-2005 | Отправлено: 19:06 19-06-2012
r_green



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Andrew10
FreeQ[]

Всего записей: 145 | Зарегистр. 17-09-2004 | Отправлено: 19:27 19-06-2012
Andrew10

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
r_green

Цитата:
FreeQ[]
 

 
Понял, спасибо!!!
 

Всего записей: 780 | Зарегистр. 26-02-2005 | Отправлено: 19:41 19-06-2012
Andrew10

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет всем!
 
Очередной вопрос знатокам Mathematicа-и:
Как в автоматическом режиме детектировать, что выполнение функции FindRoot завершилось с сообщением:
 
FindRoot::lstol: The line search decreased the step size to within tolerance specified by AccuracyGoal and PrecisionGoal but was unable to find a sufficient decrease in the merit function. You may need more than MachinePrecision digits of working precision to meet these tolerances
?
 
В хелпе рекомендуется в этом случае запустить FindRoot еще раз, задав в качестве начального приближения результат поиска корня при вызове, закончившимся таким сообщением. Хочется делать это автоматически.
 
Спасибо!

Всего записей: 780 | Зарегистр. 26-02-2005 | Отправлено: 16:54 27-08-2012
popkov

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Andrew10
Цитата:
В хелпе рекомендуется в этом случае запустить FindRoot еще раз, задав в качестве начального приближения результат поиска корня при вызове, закончившимся таким сообщением.
Любопытно. Ссылочку не подкинете (или цитату)?

Цитата:
Хочется делать это автоматически.  
Это несложно:
Код:
min = FindRoot[{Exp[x - 2] == y, y^2 == x}, {{x, 1}, {y, 1}}]
FindRoot[{Exp[x - 2] == y, y^2 == x}, Evaluate[min /. Rule -> List]]

Всего записей: 1834 | Зарегистр. 22-03-2003 | Отправлено: 17:33 27-08-2012
Andrew10

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
popkov

Цитата:
Любопытно. Ссылочку не подкинете (или цитату)?
 

В help-e к функции FindRoot написано, в частности:
 
If FindRoot does not succeed in finding a solution to the accuracy you specify within MaxIterations steps, it returns the most recent approximation to a solution that it found. You can then apply FindRoot again, with this approximation as a starting point.  
 
Кроме этого, личный опыт показывает, что это действительно так, если только отыскиваемый корень не является кратным.
 

Цитата:
Это несложно:
Код:
min = FindRoot[{Exp[x - 2] == y, y^2 == x}, {{x, 1}, {y, 1}}]
FindRoot[{Exp[x - 2] == y, y^2 == x}, Evaluate[min /. Rule -> List]]
 

 
К сожалению, это несколько не то, что требуется.  Я хотел бы вторично вызывать FindRoot _только_ в том случае, если первый вызов закончился соответствующим сообщением FindRoot::lstol. Для этого нужно иметь средство автоматической диагностики нештатного завершения вызова.

Всего записей: 780 | Зарегистр. 26-02-2005 | Отправлено: 22:08 27-08-2012
popkov

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Andrew10
Цитата:
Для этого нужно иметь средство автоматической диагностики нештатного завершения вызова.  
Для этого есть функция Check[]. Однако должен заметить, что Вы неправильно понимаете смысл сообщения FindRoot::lstol. Надо читать то, что написано: проблема не в ограниченном MaxIterations, а в недостаточном WorkingPrecision. Повышение последнего выше MachinePrecision часто помогает решить проблему, если Вам действительно необходимо большое количество точных значащих цифр решения. Если же нет, - можно просто снизить PrecisionGoal, и сообщение больше появляться не будет.
 
Приведенная цитата из справки относится к другому сообщению: FindRoot::cvmit.  
 
Если Вы решите пойти по пути увеличения WorkingPrecision, то учтите один ключевой и недостаточно ясно документированный момент: чтобы это сработало, необходимо, чтобы все действительные числа внутри Вашей функции (а также стартовые значения, если указаны) имели точность не ниже той, что указана в качестве значения опции WorkingPrecision.

Всего записей: 1834 | Зарегистр. 22-03-2003 | Отправлено: 22:32 27-08-2012 | Исправлено: popkov, 22:48 27-08-2012
Andrew10

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
popkov

Цитата:
Для этого есть функция Check[]. Однако должен заметить, что Вы неправильно понимаете смысл сообщения FindRoot::lstol. Надо читать то, что написано: проблема не в ограниченном MaxIterations, а в недостаточном WorkingPrecision. Повышение последнего выше MachinePrecision часто помогает решить проблему, если Вам действительно необходимо большое количество точных значащих цифр решения. Если же нет, - можно просто снизить PrecisionGoal, и сообщение больше появляться не будет.

 
За ссылку на Check спасибо, это, по-видимому, то, что надо.  
Что касается WorkingPrecision, то повышать его в моем случае затруднительно, т.к. ищется корень функции, которая, в свою очередь, рассчитывается в результате алгоритма, включающего численное интегрирование, разложение матрицы и т.д. Перенастраивать все это на повышенную WorkingPrecision не хочется, да и не имеет смысла, т.к. значения корней нужны не с "бешеной точностью". Поэтому  PrecisionGoal - это в точку, про этот параметр я забыл. Особо высокой точности мне не нужно, а нужно, чтобы поиск корня в цикле при изменении параметра системы проходил без подобных сообщений.
 
Огромное спасибо!

Всего записей: 780 | Зарегистр. 26-02-2005 | Отправлено: 22:50 27-08-2012
Andrew10

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет всем!
Очередной вопрос для гуру
 
Нужно составить паттерн, который соответствовал бы строке, содержащей символьное представление положительного числа с точкой, т.е. таким строкам, как, например, "1234.5678",  "12345678." или ".12345678", но не строке с одной единственной точкой "."!     Предлагаемое решение:  
Except[".",RegularExpression["\\d*\\.\\d*]].
Однако при попытке распознавания получаю следующее:
In[]:= StringMatchQ[ "1234.5678",Except[".",RegularExpression["\\d*\\.\\d*]]]
Out[]:= True
 
In[]:= StringMatchQ[ "12345678.",Except[".",RegularExpression["\\d*\\.\\d*]]]
Out[]"= True
 
In[]:= StringMatchQ[ ".12345678",Except[".",RegularExpression["\\d*\\.\\d*]]]
Out[]:= False
 
То есть в последнем случае паттерн не работает. Не могу понять почему?
 
Спасибо!

Всего записей: 780 | Зарегистр. 26-02-2005 | Отправлено: 21:33 12-09-2012
popkov

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Andrew10
Похоже, баг. Проще обойтись без Except:
Код:
StringMatchQ[".12345678",  
 RegularExpression["(\\d+\\.\\d*)|(\\d*\\.\\d+)"]]

Добавлено:
Однако гораздо проще и правильнее в данном случае использовать NumberString:
Код:
StringMatchQ[".12345678", NumberString]

Всего записей: 1834 | Зарегистр. 22-03-2003 | Отправлено: 08:31 13-09-2012 | Исправлено: popkov, 08:36 13-09-2012
Andrew10

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
popkov

Цитата:
Похоже, баг. Проще обойтись без Except:

 
Понял, а то я уж совсем отчаялся понять такое поведение.
Вашим вариантом воспользуюсь, спасибо!
 

Цитата:
Однако гораздо проще и правильнее в данном случае использовать NumberString:
Код:
StringMatchQ[".12345678", NumberString]  

 
Про NumberString я знаю, но дело в том, что этот кусочек  есть составная часть кода для импорта чисел в формате Фортрана ( типа 1.2345e-005) в формат Real Mathematic-и, хотелось обойтись одним регулярным выражением для всего преобразования. Я искал в хелпе, нет ли такой функции в самой системе, но что-то не нашел.
 
 

Всего записей: 780 | Зарегистр. 26-02-2005 | Отправлено: 10:04 13-09-2012
popkov

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Andrew10
Цитата:
для импорта чисел в формате Фортрана ( типа 1.2345e-005)
Вообще-то Import умеет это делать и сам. Например:
Код:
ImportString["1.2345e-005", "Table"]
(* => {{0.000012345}} *)

 

Цитата:
Я искал в хелпе, нет ли такой функции в самой системе
Готовой нет, но нетрудно придумать. Вот, например:
Код:
StringCases["1.2345e-005", (NumberString ~~ "e" ~~ NumberString) |  
  NumberString]

Всего записей: 1834 | Зарегистр. 22-03-2003 | Отправлено: 13:36 13-09-2012 | Исправлено: popkov, 13:40 13-09-2012
r_green



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
<удалено как неактуальное>

Всего записей: 145 | Зарегистр. 17-09-2004 | Отправлено: 15:48 13-09-2012 | Исправлено: r_green, 15:50 13-09-2012
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57

Компьютерный форум Ru.Board » Компьютеры » Программы » Wolfram Mathematica | Математика


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru