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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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 | Цитировать | Сообщить модератору
Igorr
В Mathematica 7 в "Documentation Center" в строке поиска набираешь "HypergeometricPFQ", и сразу попадаешь на страницу соответствующей функции... Я не знаю, то ли это, что тебе нужно, но на вопрос ответил...
P.S. "Поиск" рулит... - это ключевое преимущество версий 6 и выше, согласно разработчикам, - пользуйся!

Всего записей: 1834 | Зарегистр. 22-03-2003 | Отправлено: 04:56 29-12-2008 | Исправлено: popkov, 04:57 29-12-2008
Igorr

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

Цитата:
на вопрос ответил...  
P.S. "Поиск" рулит... - это ключевое преимущество версий 6 и выше, согласно разработчикам, - пользуйся!

Возможно, я чего-то не понимаю, но где там алгоритм/код вычисления функции? Как его найти?

Всего записей: 2003 | Зарегистр. 01-05-2002 | Отправлено: 05:22 29-12-2008
popkov

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

Цитата:
где там алгоритм/код вычисления функции? Как его найти?

Хм... Ты от коммерческого пакета ожидал открытости алгоритмов...? Это коммерческая тайна, так что и не надейся на их ракрытие! В самом лучшем случае разработчики в документации могут сослаться на оригинальные статьи в научных журналах - но это скорее исключение... Что ещё добавить? Слепо верь - или пользуйся пакетами с открытым исходным кодом (только сколько времени ты потратишь на изучение этого кода?).

Всего записей: 1834 | Зарегистр. 22-03-2003 | Отправлено: 06:38 29-12-2008
Griefin

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Igorr
Алгоритмы есть в научных работах по вычислительной математике. Не факт, что доступ к ним тоже будет открыт. Обычно, для более быстрого вычисления таких рядов люди пользуются асимптотическими формулами, аналитическим продолжением и интегральными представлениями (чтобы аппроксимировать Гауссовыми квадратурами). Эти вещи можно найти в справочнике, но программу нужно писать самому. Однако, даже прямое суммирование дает неплохие результаты, если ряд хорошо сходится. Я недавно считал нечто с функцией Аппеля F4, и для достижения точности в 6-м знаке после запятой мне хватило первых десяти членов ряда. Оценку остаточных членов ряда обычно изучают на 1-м или 2-м курсе.

Всего записей: 759 | Зарегистр. 19-07-2003 | Отправлено: 19:42 29-12-2008 | Исправлено: Griefin, 19:55 29-12-2008
Igorr

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

Цитата:
Не факт, что доступ к ним тоже будет открыт.  

Есть факты:
http://webscripts.softpedia.com/scriptDownload/Generalized-Hypergeometric-Function-Download-34003.html  
http://www.ece.mtu.edu/faculty/wfp/codes.html
Но эти варианты (это одна и та же программа с небольшими модификациями) меня пока не устраивают. А вот в Mathematica расчет мне понравился - потому и спросил алгоритм в этой теме, а не в темах по изучению математики.

Всего записей: 2003 | Зарегистр. 01-05-2002 | Отправлено: 20:28 29-12-2008
terminat0r



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Igorr
Я когда-то интересовался этим вопросом. Фортрановский код pFq лежит в основе почти всех программ. Он кстати работоспособный, проверено.

Всего записей: 2084 | Зарегистр. 31-03-2002 | Отправлено: 23:53 29-12-2008
Igorr

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
terminat0r
Какой код ты имеешь ввиду?
Если по приведенным мной ссылкам, то он много случаев не считает, например, при ((p>q && abs(z)>1) && p > 2), хотя Mathematica - считает.

Всего записей: 2003 | Зарегистр. 01-05-2002 | Отправлено: 00:24 30-12-2008
Griefin

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Igorr
В Mathematica используются символьные преобразования pFq в другие функции, а в этой программе тупо суммируется оборванный ряд. Кроме того, при p > q + 1 && z != 0 ряд расходится. Если есть какие-то специальные случаи, то стоит обратиться к справочнику Бейтмена и Эрдейи и внести их в эту программу.

Всего записей: 759 | Зарегистр. 19-07-2003 | Отправлено: 06:45 30-12-2008 | Исправлено: Griefin, 07:08 30-12-2008
Igorr

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Griefin
при чем здесь
Цитата:
p > q + 1


Всего записей: 2003 | Зарегистр. 01-05-2002 | Отправлено: 06:53 30-12-2008
Griefin

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В общем случае, при p = q + 1 ряд сходится только при abs(z) < 1, за исключением неких частных значений параметров. Их просто надо добавить в эту программу.

Всего записей: 759 | Зарегистр. 19-07-2003 | Отправлено: 07:22 30-12-2008 | Исправлено: Griefin, 07:26 30-12-2008
Igorr

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

Цитата:
В общем случае, при p = q + 1 ряд сходится только при abs(z) < 1, за исключением неких частных значений параметров.

Аналитическое продолжение ряда - как "некое частное значение параметров"? - интересная математика...
А аналитическое продолжение при p = q + 1 и |z| >=1 можно получить, например, с помощью интеграла Меллина-Барнса.  
(ИМХО не есть гут править пост, на который уже ответили)

Всего записей: 2003 | Зарегистр. 01-05-2002 | Отправлено: 08:06 30-12-2008
Griefin

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

Всего записей: 759 | Зарегистр. 19-07-2003 | Отправлено: 09:02 30-12-2008 | Исправлено: Griefin, 09:06 30-12-2008
terminat0r



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

Цитата:
А аналитическое продолжение при p = q + 1 и |z| >=1 можно получить,

да, это я тоже припоминаю. Справочник Градштейна и Рыжика.
Igorr

Цитата:
Если по приведенным мной ссылкам, то он много случаев не считает, например, при ((p>q && abs(z)>1) && p > 2),

именно. Но его очень просто модифицировать именно для таких случаев с помощью формул с упомянутого справочника.

Всего записей: 2084 | Зарегистр. 31-03-2002 | Отправлено: 21:36 30-12-2008 | Исправлено: terminat0r, 21:37 30-12-2008
popkov

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Интересный глюк 7-й Mathematica, превращающий её буквально  в настоящий random bug generator!  
Попробуйте выполнить несколько раз следующий код, и сами в этом убедитесь:
 
myMod := Module[{p}, Dot[
     {0.5018839897852984567457648, 0.544293499215831476457645674576, 0.67220312964800834576456745674567},
     {-0.5359693986690249`, -0.41257352636613975`, -0.736559494563862`}
     ]*{-0.5359693986690249`, -0.41257352636613975`, -0.736559494563862`} - {0.5579131132707782`, 0.2715072333003815`, 0.7842300557273234`}]
 
For[ii = 1, ii <= 250, ii++,  
 If[myMod =!= myMod,  
   Print["Iteration " <> ToString[ii] <> " fails comparison "]];]
 
В операторе сравнения функция myMod вызывается 2 раза, и результаты её выполнения сравниваются. Они должны бы быть строго одинаковы, однако совершенно непредсказуемым образом оказываются вдруг разными. Самый настоящий генератор случайных багов!
Глюк критически зависит от присутствия в Module[] неиспользуемой локальной переменной и присутствует, видимо, только в 32-битных системах (подтверждено для 32-bit Windows XP и 32-bit MacOS, в 64-bit'ных системах вроде не наблюдается).

Всего записей: 1834 | Зарегистр. 22-03-2003 | Отправлено: 18:16 31-12-2008 | Исправлено: popkov, 17:50 01-01-2009
Griefin

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
popkov
Баг-то есть, но сам код какой-то неграмотный. Зачем делать p локальной переменной, если она вообще в функции не используется? Плохо другое: я иногда вижу, что в Mathematica внешне правильный код приводит к неправильному результату. Если перенабрать то же самое заново, то все приходит в порядок.

Всего записей: 759 | Зарегистр. 19-07-2003 | Отправлено: 20:29 01-01-2009
popkov

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

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

В некоторых случаях, вероятно, может помочь удаление форматирования: выделить ячейку и Format :: Clear FormattingMathematica 6 и 7) или Format :: Remove Options :: RecursivelyMathematica 5).

Всего записей: 1834 | Зарегистр. 22-03-2003 | Отправлено: 23:45 01-01-2009
popkov

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Griefin
Только что получил письмо от некоего Marcelo Ribeiro с интересными примерами как раз "внешне правильного кода". Попробуй следующее:  
 
Создай новую ячейку в ноутбуке, выдели её, нажми Ctrl+Shift+E и вставь туда следующее:
Цитата:
Cell[BoxData[
 RowBox[{
  RowBox[{"451", "/", "24"}], " ",  
  FormBox[
   RowBox[{"-",  
    FractionBox["185", "24"]}],
   TraditionalForm]}]], "Input"]
Теперь снова нажми Ctrl+Shift+E. Содержимое ячейки отображается как разность между 451/24 и 185/24. Однако её выполнение приводит к ответу -83435/576, что явный абсурд.  
 
Andrzej Kozlowski прокомментировал это следующим образом:
Цитата:
If I copy your input, enclose it in Hold and convert to InputForm I get
 
Hold[451/24 -(185/24)]//InputForm
Hold[(451/24)*(-(185/24))]
 
In words, there is actually multiplication hidden in your input, and when I simply type in the correct in my Mathematica everything works fine:
 
In[37]:= 451/24-185/24
Out[37]= 133/12
 
I have no idea how you managed to produce these strange inputs, perhaps you copied them from Mathematica 2?

 
Добавлено:
Я даже решил выложить оба письма в общий доступ (предварительно удалив из них все E-Mail), поскольку они могут прояснять некоторые вещи:
Письмо Marcelo Ribeiro
Ответ Andrzej Kozlowski

Всего записей: 1834 | Зарегистр. 22-03-2003 | Отправлено: 05:45 04-01-2009 | Исправлено: popkov, 05:49 04-01-2009
Griefin

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
popkov
Я тоже подозревал, что дело в скрытых умножениях и пробовал редактировать сложные куски кода в текстовом редакторе, чтобы избегать подобных ошибок. Есть ли во frontend возможность разрешить умножение, только если явно указан знак *, отредактировав какие-то свойства ячейки?

Всего записей: 759 | Зарегистр. 19-07-2003 | Отправлено: 12:11 04-01-2009
popkov

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

Цитата:
Есть ли во frontend возможность разрешить умножение, только если явно указан знак *, отредактировав какие-то свойства ячейки?

Как я догадываюсь, можно в Option Inspector указать другой вид новой ячейки по умолчанию. Например, InputForm.  
Возможно также, что это делается перенастройкой стилей самого ноутбука по умолчанию: открой Default.nb, и там в соответствующем подразделе выдели ячейку, нажми Ctrl+Shift+E, и редактируй опции. Возможно, именно этот путь наиболее верный.
 
Если не получится, можно ещё задать этот вопрос в группе новостей.

Всего записей: 1834 | Зарегистр. 22-03-2003 | Отправлено: 13:23 04-01-2009 | Исправлено: popkov, 14:28 04-01-2009
popkov

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
За тип ячейки ввода отвечает опция (Global Preferences): "Input" (CommonDefaultFormatTypes). Её значение по умолчнию StandardForm. Однако и в InputForm всё равно пробел рассматривается как знак умножения. Ещё интересная опция "InputInline" (CommonDefaultFormatTypes). Её значение по умолчанию также StandardForm. Однако если установить его в InputForm, то знак пробела автоматически превращается в крестик: x. Это мне очень понравилось, так что оставлю это поведение по умолчанию. За стиль новой ячейки отвечает опция DefaultNewCellStyle со значением "Input" по умолчанию. Есть ещё опция DefaultNewInlineCellStyle со значением {} по умолчанию.
 
Есть ещё функция CellEventActions. С её помощью можно, например, создать ячейку, которая будет автоматически конвертироваться в InputForm при клике по ней, нажатии определённой комбинации клавиш, выполнении и т.п. Или же InputForm этой ячейки можно поместить в Tooltip к ней же... В общем простор для фантазии.  
 
Но прямого пути сделать то, что ты хочешь, я не нашёл.
 
Интересные опции также нарыл:
DefaultNotebook: "DefaultTemplate.nb"
DefaultStyleDefinitions: "Default.nb"
PrintPrecision: по умолчанию значение 6 (видимо, точность позиционирования векторных объектов 6 значащих цифр)
"PrintingMargins" (PrintingOptions): по умолчанию значение {{54,54},{72,72}} - это в типографских точках (printer's points, pt): 1 pt = 127/360 mm
"RasterizationResolution" (PrintingOptions):  по умолчанию значение "Automatic"
"ScreenResolution" (FontProperties): 72 (я выставил в 96, и шрифт в ноутбуке стал крупнее и немного более гладким)
EmphasizeSyntaxErrors: False

Всего записей: 1834 | Зарегистр. 22-03-2003 | Отправлено: 16:17 04-01-2009 | Исправлено: popkov, 03:08 05-01-2009
Открыть новую тему     Написать ответ в эту тему

Страницы: 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