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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
karl_karlsson



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

Цитата:
Есть ещё платный пакет, который делает эту логику похожей на человеческую. Но я его в доступном виде не встречал.

Calculus WIZ ?
Mathematica CalcCenter ?

Всего записей: 2027 | Зарегистр. 14-03-2007 | Отправлено: 13:00 16-02-2009
popkov

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

Цитата:
где вы про это прочитали?  

Кстати, часть этого написана в справке ref/CompoundExpression (просто набираешь в поиске точку с запятой).
 

Цитата:
А как в математике наиболее правильно сделать функции локальными?

По правде говоря, этим никогда не заморачивался. Мои задачи "вылизывания" кода не требуют. Но ключевыми словами при поиске в справке будут Module[] и Block[]. Ещё, возможно, полезно обратить внимание на Compile[] (это для оптимизации выполнения кода).
 
Добавлено:
karl_karlsson
Я уже не помню, как он назывался. Делал выводы по описаниям пакетов от сторонних разработчиков на сайте wolfram.com .
 
Добавлено:

Цитата:
Желательно, чтобы после evaluation'а только конечная функция стала глобальной, а имена остальных остались бы (глобально) свободными.  

Можно создать процедуру, в которой определяется функция.
Затем просто удалить символ с помощью Clear[] или Remove[] или просто Unset[]. Однако предупреждаю, что в Mathematica с очисткой памяти дела обстоят очень плохо: все эти функции толком не освобождают память, и мусор постоянно накапливается.

Всего записей: 1834 | Зарегистр. 22-03-2003 | Отправлено: 13:04 16-02-2009
TomasVercetti

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Понял. Пошёл читать и экспериментировать. Просто накопилась целая куча многократно используемого по разным ноутбукам кода - поэтому и решил всё это "причесать" и описать.

Всего записей: 319 | Зарегистр. 09-01-2006 | Отправлено: 16:31 16-02-2009
popkov

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

Цитата:
Просто накопилась целая куча многократно используемого по разным ноутбукам кода

Для этих  случаев есть такая штука, как пакет. Встроенных пакетов много (например, Combinatorica), но их можно создавать и самостоятельно, хотя документация на эту тему неполная. Если же не так уж много постоянно используемых функций, то их можно просто добавить в файл init.m, выполняемый при запуске Kernel.exe, и тогда эти функции станут как бы аналогом встроенных, то есть будут доступны всегда. Им можно даже добавить атрибут Protected - и тогда они станут совсем как встроенные, то есть их нельзя будет просто так переопределить или удалить.

Всего записей: 1834 | Зарегистр. 22-03-2003 | Отправлено: 16:50 16-02-2009 | Исправлено: popkov, 16:52 16-02-2009
TomasVercetti

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо - это будет полезно!

Всего записей: 319 | Зарегистр. 09-01-2006 | Отправлено: 17:37 16-02-2009
TomasVercetti

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В Mathematica 7.0 Win (смотрел и Student, и Pro версии) в справке отсутствует tutorial/NIntegrateIntegrationStrategies. Одноимённого файла вообще нету в \Wolfram Research\Mathematica\7.0\Documentation\English\System\Tutorials. Видимо баг - на сайте в интернете этот раздел есть. Может люди, обладающие лицензией, сообщат куда нужно?
 
Нашёл в интернете файл для 6й версии математики (для линукса). Кинул его в \Tutorials, но help его не подхватывает - ссылки на этот файл по-прежнему не работают. Что делать?

Всего записей: 319 | Зарегистр. 09-01-2006 | Отправлено: 09:27 20-02-2009 | Исправлено: TomasVercetti, 09:44 20-02-2009
eriik



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
TomasVercetti
Друг,а я то думал что я что-то напортачил при упаковке WIM-архива.
Та же байда - отсутствуют файлы справки ( конкретно попался на Tutorials\NIntegrateIntegrationStrategies.nb)
 
Скачал по адресу (хттп: / / linux.iingen.unam.mx/pub/Documentacion/Cluster_TONATIUH/Mathematica/v6/Mathematica/System/Tutorials/) (это единственный что был в интернете, правда версия для шестой математики, но думаю что не очень страшно).
 
Короче, зазеркалировал я всю эту папку Documentation и стал стравнивать в ExamDiff'e. В скачанных доках от шестерки даты файлов новее (показывает 9-02-2009, в то время как у моей домашней семерки - 11-11-08), но внутри написано (created with Mathematica6), размеры больше у февральской шестерки...
 
 
 
Вот сейчас сижу и думаю, качать ли новый дистр с варезника, или синхронизировать со скачанными доками...  
 
 

Всего записей: 453 | Зарегистр. 09-01-2003 | Отправлено: 16:56 20-02-2009 | Исправлено: eriik, 17:00 20-02-2009
TomasVercetti

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
eriik
 
Я оттуда же этот файл скачал. При беглом сравнении содержание не отличается от статьи на официальном сайте.
 
Про даты и размеры файлов сложно что-либо сказать, не зная специфик версий.
 
Дистрибутивы 7ки с варезника я уже все попробовал. Так что хотелось бы этот файл интегрировать в систему справки. Видимо, кроме подсовывания файла, нужно ещё какой-то индекс перестроить.

Всего записей: 319 | Зарегистр. 09-01-2006 | Отправлено: 20:59 20-02-2009
egorovshura

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Новое начинание Wolfram'а: http://blog.wolfram.com/2009/03/05/wolframalpha-is-coming/

Всего записей: 371 | Зарегистр. 07-04-2006 | Отправлено: 15:21 10-03-2009
TomasVercetti

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А какая в Mathematica самая короткая запись для вычисления
Plot[ {f1[x], f2[ f1[x], x ], f3[ f1[x], x ]}, {x, xmin, xmax} ] так, чтобы при каждом x f1[x] вычислялась бы только один раз? (Или создание аналогичных списков для ListPlot. И без переопределений типа f21[x_]:=f2[ f1[x], x ].)

Всего записей: 319 | Зарегистр. 09-01-2006 | Отправлено: 15:26 13-03-2009 | Исправлено: TomasVercetti, 17:23 13-03-2009
popkov

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

Цитата:
Или создание аналогичных списков для ListPlot

Ну, это-то понятно:
Table[{y=f1[x], f2[ y, x ], f3[ y, x ]}, {x, xmin, xmax}]
 
Например:
Table[{y = x^2, y*x}, {x, 1, 10}]
сравни с  
Table[{x^2, x^3}, {x, 1, 10}]
- результат идентичен!
 
Однако
Plot[{y = x^2, y*x}, {x, 1, 10}]
и
Plot[{x^2, x^3}, {x, 1, 10}]
- по не ясной мне причине - совсем не одно и то же!

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

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
popkov,
спасибо - сейчас воспользуюсь таким вариантом. Не знал, что переменную внутри списка можно так использовать.
 
Я вначале сделал внутри Plot'а Module, возвращающий список значений, - строит все три кривые как надо, но считает всё полученное одним графиком, строит одним цветом, и через PlotStyle установить цвета не получается. Вообще, интересная эта птица - Plot, нужно научиться её готовить.
 
Глядя на функциональный язык математики, интересно, можно ли в итерации изнутри списка сослаться на текущее (Evaluated) значение другого элемента этого же списка?

Всего записей: 319 | Зарегистр. 09-01-2006 | Отправлено: 22:44 13-03-2009 | Исправлено: TomasVercetti, 22:50 13-03-2009
popkov

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
TomasVercetti
Я бы и сам хотел, чтобы нашёлся человек, способный разъяснить некоторые вещи. Например:
 
In[1]:= Table[{y*x, y = x^2}, {x, 1, 10}]
 
Out[1]= {{100, 1}, {2, 4}, {12, 9}, {36, 16}, {80, 25}, {150,  
  36}, {252, 49}, {392, 64}, {576, 81}, {810, 100}}
 
Каким образом первое значение оказалось 100???  
 
Добавлено:
Хотя при более вдумчивом анализе всё становится понятно (используем On[]):
 
Результат при включённом On
 
Добавлено:

Цитата:
Глядя на функциональный язык математики, интересно, можно ли в итерации изнутри списка сослаться на текущее (Evaluated) значение другого элемента этого же списка?

Можно, если этот элемент выполняется раньше - думаю, после моих примеров это должно быть очевидно.

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

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
TomasVercetti
Нужно ввести локальную переменную с помощью Module, With или Block, в которой и хранить текущее значение f1[x]. Вариант с Module наиболее универсален:
Plot[Module[{f1x=f1[x]}, {f1x, f2[ f1x, x ], f3[ f1x, x ]}], {x, xmin, xmax}]

Всего записей: 759 | Зарегистр. 19-07-2003 | Отправлено: 05:31 14-03-2009 | Исправлено: Griefin, 05:36 14-03-2009
TomasVercetti

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

Цитата:
думаю, после моих примеров это должно быть очевидно.

Что через локальную переменную можно - да, очевидно. А вот что-нибудь наподобие Plot[ {f1[x], f2[ @1, x ], f3[ @1, x ]}, {x, xmin, xmax} ], где я за "@1" условно обозначил текущее значение первого элемента?
 
Griefin,
Я именно так и сделал вначале, но Plot строит все графики одним цветом, и через PlotStyle также устанавливается цвет на все графики сразу.

Всего записей: 319 | Зарегистр. 09-01-2006 | Отправлено: 20:45 14-03-2009
popkov

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

Цитата:
где я за "@1" условно обозначил текущее значение первого элемента?  

Пожалуй, я не настолько ас, чтобы дать ответ. Вполне вероятно, для реализации твоей затеи надо переопределять функцию Plot... В общем, блатные разработчики новой Mathematica далеко не всё способны оказались предусмотреть...

Всего записей: 1834 | Зарегистр. 22-03-2003 | Отправлено: 21:18 14-03-2009
Griefin

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
TomasVercetti
Plot, как и Table, использует Block для формирования массива точек. Block делает Hold на все аргументы, это нужно отменить с помощью Evaluate, чтобы Plot видел массив функций и корректно определял его размерность.
 
Plot[Evaluate[Module[{f1x=f1[x]}, {f1x, f2[ f1x, x ], f3[ f1x, x ]}]], {x, xmin, xmax}]

Всего записей: 759 | Зарегистр. 19-07-2003 | Отправлено: 07:32 15-03-2009 | Исправлено: Griefin, 08:16 15-03-2009
TomasVercetti

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
popkov,
либо, в свете значительного расширения возможностей языков ФП в последние годы, им нужно снова обратить свой взор на дальнейшее развитие такового, либо-таки дополнить документацию, либо исправить баги в некоторых функциях...
 
Griefin,
да - так работает.
 
All,
но я запутался : )
 
Вот это понятно:
 
(1)
Plot[ { f1[x] }, {x, xmin, xmax}, PlotPoints->10, MaxRecursion->0 ] // Timing
Plot[ { f2[ "число", x ] }, {x, xmin, xmax}, PlotPoints->10, MaxRecursion->0 ] // Timing
Plot[ { f3[ "число", x ]}, {x, xmin, xmax}, PlotPoints->10, MaxRecursion->0 ] // Timing
 
12.656
0.407
0.141
---------
 
(2)
Plot[ { f1[x] }, {x, xmin, xmax}, PlotPoints->10, MaxRecursion->0 ] // Timing
Plot[ { f2[ f1[x] , x ] }, {x, xmin, xmax}, PlotPoints->10, MaxRecursion->0 ] // Timing
Plot[ { f3[ f1[x] , x ]}, {x, xmin, xmax}, PlotPoints->10, MaxRecursion->0 ] // Timing
 
11.813
12.046
11.703
---------
 
(3)
Plot[ { f1[x], f2[ f1[x] , x ], f3[ f1[x] , x ] }, {x, xmin, xmax}, PlotPoints->10, MaxRecursion->0 ] // Timing
 
35.421
---------
 
Вот это непонятно:
 
(4)
Plot[Module[{f1x=f1[x]}, {f1x, f2[ f1x, x ], f3[ f1x, x ]}], {x, xmin, xmax}, PlotPoints->10, MaxRecursion->0 ] // Timing
 
34.718
---------
 
(5)
Plot[Evaluate[Module[{f1x=f1[x]}, {f1x, f2[ f1x, x ], f3[ f1x, x ]}]], {x, xmin, xmax}, PlotPoints->10, MaxRecursion->0 ] // Timing
 
110.219
---------

Всего записей: 319 | Зарегистр. 09-01-2006 | Отправлено: 11:02 15-03-2009 | Исправлено: TomasVercetti, 14:55 15-03-2009
Griefin

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Видимо какие-то внутренние оптимизации нарушаются из-за Evaluate. Если Mathematica сама успешно кэширует и подставляет результат вычисления f1[x], то стоит оставить вариант без Module.

Всего записей: 759 | Зарегистр. 19-07-2003 | Отправлено: 14:17 15-03-2009
TomasVercetti

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как я понимаю, успешно было бы порядка 12.656 + 0.407 + 0.141 секунд (первый пример). А из 2го, 3го и 4го видно, что Module "игнорируется".

Всего записей: 319 | Зарегистр. 09-01-2006 | Отправлено: 14:53 15-03-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