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

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



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

Цитата:
http://en.wikipedia.org/wiki/Sphere_packing

Тут наверное лучше написано, но сейчас разбираться нет времени.
Но по логике надо рассматривать варианты упаковки, заменяя круг многоугольниками: треугольник, квадрат (именно про него мне пришла в голову идея, когда я писал тот пост, но она оказалась не верная), пяти-, шести- и тд-угольник, и вообще говоря не обязательно правильными (по крайней мере сразу неочевидно, хотя и вероятно - или невероятно, если реально не решена).

Всего записей: 2471 | Зарегистр. 20-04-2004 | Отправлено: 02:52 07-09-2009
rakis

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
В принципе, то что надо нашел (включая код)
Cubic Close Packing
Sphere Packing

Всего записей: 379 | Зарегистр. 17-01-2006 | Отправлено: 10:42 07-09-2009
kyznez1

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
а можно ли как-нибудь представить результат в виде обычных (не многоэтажных) дробей?
полазил по справке - ничего не нашел.

Всего записей: 18 | Зарегистр. 22-08-2008 | Отправлено: 20:53 17-09-2009
KChernov



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kyznez1
Надо "посчитать" - N

Всего записей: 2471 | Зарегистр. 20-04-2004 | Отправлено: 00:26 18-09-2009
TomasVercetti

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Сейчас выбираю, скольки ядерный процессор (2/3/4) взять; основной критерий выбора — соотношение увеличения скорости расчётов именно в Mathematica с ценой. Какой прирост скорости даст каждое дополнительное ядро?
 
В основном приходится иметь дело с численным интегрированием, решением (систем) уравнений (обычно, с точностями выше, чем по-умолчанию) для создания списков (через Table) для их дальнейшего графического построения. Насколько хорошо Mathematica распараллеливает вычисления? Или насколько хорошо можно сделать распараллеливание, и сколько для этого понадобится усилий?
 
Может быть у кого-нибудь есть такой опыт? Или где-то в интернете есть тесты (я не нашёл)?
 
Спасибо!

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

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

Цитата:
Насколько хорошо Mathematica распараллеливает вычисления?
Не слишком хорошо: реализация распараллеливания выполнена простейшим и тупейшим способом. Распараллелить она может только то, что можно распараллелить вручную, запустив соответствующее количество копий Mathematica и в каждой выполняя соответствующую порцию кода. Такие функции, как NSolve, конечно, распараллелены быть не могут. Да и вообще: всё это встроенное распараллеливание - просто надстройка над встроенными функциями, ранее оно было отдельным пакетом, теперь он интегрирован в кернел.
С точки зрения эффективности намного лучше иметь один мощный процессор, чем 2 маломощных, поскольку это распараллеливание кушает само по себе немало процессорного времени. Для задач малого масштаба оно может приводить к снижению производительности, вместо роста (пример).
 

Всего записей: 1834 | Зарегистр. 22-03-2003 | Отправлено: 19:13 15-10-2009
Griefin

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
У меня Mathematica 7 не распараллеливает даже вычисления таблиц (ParallelTable), где фигурируют функции, содержащие численные интегралы и суммы. Хотя казалось бы, что может быть проще: взять и разбить таблицу на части и каждую считать своим процессором.

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

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Griefin
Думаю, эта проблема как раз решаема, если обойтись без ParallelTable, а использовать что-то вроде ParallelSubmit. Сам с распараллеливанием не работаю, поэтому большего не скажу.

Всего записей: 1834 | Зарегистр. 22-03-2003 | Отправлено: 19:35 15-10-2009
Griefin

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Кстати, странно, что там параллельных версий функций построения графиков нет. Вот уж что надо было в первую очередь сделать. ParallelSubmit наверное поможет, спасибо.

Всего записей: 759 | Зарегистр. 19-07-2003 | Отправлено: 19:40 15-10-2009 | Исправлено: Griefin, 19:41 15-10-2009
popkov

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

Цитата:
Кстати, странно, что там параллельных версий функций построения графиков нет.  

Как я уже сказал, все функции параллелизации - не более, чем обёртка над базовыми функциями. В случае Plot параллелизация невозможна, т.к. задачу построения Plot нельзя разбить на 2 задачи построения Plot (т.е. вручную с помощью ParallelSubmit можно, конечно,  но число вычислений значений функции при этом увеличится).
 
Добавлено:
В общем, реализация параллелизации в Mathematica сделана тупейшим и наименее эффективным образом, прямо противоположно надеждам пользователей. Можно сказать, что разработчики прохалявили, поленились реализовать внутреннюю параллелизацию путём переписывания кода встроенных функций. И вряд ли сделают это в ближайшем будущем. Зато разрекламировали новую версию ещё и "встроенной параллелизацией", повышая продажи.

Всего записей: 1834 | Зарегистр. 22-03-2003 | Отправлено: 21:18 15-10-2009 | Исправлено: popkov, 09:07 03-08-2013
Griefin

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
popkov
Я не вижу принципиальных ограничений для параллелизма в функции Plot. Она делает фактически следующее: вычисляет таблицу значений {{x_1, f(x_1)},...,{x_2, f(x_2)}} и делает рекурсивные разбиения внутри интервалов, пока приращение функции f(x_n) - f(x_{n-1}) не будет меньше некоторой величины (скорее всего ее сравнивают с приращением аргумента) или пока число разбиений не станет равным MaxRecursion. Таблицу значений можно разрезать и раскидать на несколько процессоров, рекурсивные разбиения -- тоже.

Всего записей: 759 | Зарегистр. 19-07-2003 | Отправлено: 00:34 16-10-2009
popkov

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Griefin
Можно. Но для этого надо модифицировать функцию Plot, добавив в неё параллелизацию. А с существующей версией единственное решение - разбитие интервала на 2 части и построение в каждом кернеле своего Plot'а, затем объединение. Однако, как я понимаю, при этом несколько возрастёт число вычислений значений функции (хотя при грамотном указании параметров, возможно, и нет). Алгоритмы очень многих, если не большинства функций Mathematica, допускают распараллеливание в принципе. Но пакет параллелизации вовсе не занимается добавлением в эти алгоритмы таких возможостей, а всего лишь подразбивает задачу на части, выполняемые разными ядрами, в тех случаях, когда это можно сделать очевидным образом.

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

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Благодарю всех за ответы. Посмотрел ссылки, поискал ещё в интернете — на самом деле, встроенная реализация разочаровывает. Но, вроде бы, ручками можно распараллелить достаточно эффективно: как я понял, какое-либо вычисление можно отнести к конкретному ядру; поэтому, даже если M. не будет распараллеливать численное интегрирование и решение уравнения, куда входят эти интегралы, то эти вычисления для различных наборов параметров можно разнести по различным ядрам, а результаты записывать в один список. Или я не прав?

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

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

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

Всё верно.

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

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть такая проблема. Хочу написать функцию, которая бы присваивала некой глобальной переменной значение только, если она ранее не была определена. Однако, такой код почему-то не работает
If[Definition[var]==Null, var = 3];
Definition[var]==Null всегда возвращает Indeterminate. Это странно.
 
Добавлено:
Условие NumberQ[var] работает только если переменной присвоено число, а если var является функцией, не помогает.

Всего записей: 759 | Зарегистр. 19-07-2003 | Отправлено: 00:30 21-10-2009 | Исправлено: Griefin, 00:51 21-10-2009
popkov

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Griefin
Дело в том, что  Definition[var] возвращает не Null, а InterpretationBox:
Cell[BoxData[
 InterpretationBox["Null",
  Definition[$CellContext`var],
  Editable->False]], "Output",
 CellChangeTimes->{3.4650867423239994`*^9,  
  3.465086783839624*^9}]
 
Следующий код работает правильно:
ToString[Definition[f]] === "Null"
 
Но это, конечно, обходной путь. "Красивое" решение могут подсказать в группе новостей.

Всего записей: 1834 | Зарегистр. 22-03-2003 | Отправлено: 08:12 21-10-2009
exTail

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте!
 
Есть вопрос по передаче переменных в функцию, используемую в подинтегральном выражении NIntegrate, по которым не ведется интегрирование...  
Собственно, вот тестовый код:
 
f[a_, b_] := NIntegrate[a*x + b, {x, 0, 1}];
g[a_] := NIntegrate[f[a, y]/(1 + f[a, y]), {y, -1, 1}];
 
При попытке счета, получаем:
 
In[23]:=
g[2]
 
From In[23]:=
NIntegrate::inum: Integrand 2 x + y is not numerical at {x} = {0.5`}.
 
Out[23]=
0.901388
 
Т.е. судя по в функцию f передается не кокретное значение b, а y, как параметр... Что делать? По советам, найденным в сети вставил проверку переменных в определние функции f:
f[(a_)?NumericQ, (b_)?NumericQ] := NIntegrate[a*x + b, {x, 0, 1}]
 
Результат тот же...
 
Я бы, может, и плюнул на это предупреждение - счет оно не останавливает и тестовые результаты похожи на правду. НО "настоящая" функция гораздо сложнее и вложенных интегралов тоже больше, поэтому неочевидно, как эти предупреждения скажутся на "реальных" результатах
 
Спасибо за ответы!

Всего записей: 2 | Зарегистр. 02-11-2009 | Отправлено: 11:41 02-11-2009
popkov

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
exTail
Попробуй так:
f[(a_)?NumericQ, (b_)?NumericQ] := NIntegrate[a*x + b, {x, 0, 1}];
g[a_] := NIntegrate[Hold[f[a, y]/(1 + f[a, y])], {y, -1, 1}];
 
In[3]:= g[2]
 
Out[3]= 0.901388
 
У меня работает без ошибок...

Всего записей: 1834 | Зарегистр. 22-03-2003 | Отправлено: 14:43 02-11-2009
exTail

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

Цитата:
Попробуй так:  
f[(a_)?NumericQ, (b_)?NumericQ] := NIntegrate[a*x + b, {x, 0, 1}];  
g[a_] := NIntegrate[Hold[f[a, y]/(1 + f[a, y])], {y, -1, 1}];
У меня работает без ошибок...

Спасибо!  
 
Не понимаю, правда, почему заработало - вроде бы, Hold должна препятствовать преобразованиям того, что стоит у нее в аргументе, но не значения переменных. Т.е. если в функцию передается что-то символьное, числа из символьного значения Hold сделать не может...

Всего записей: 2 | Зарегистр. 02-11-2009 | Отправлено: 15:19 02-11-2009
popkov

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
exTail
Странно, но выполнение следующего кода у меня вовсе не приводит к сообщению об ошибке (хотя ранее, вроде, приводило):
 
f[(a_)?NumericQ, (b_)?NumericQ] := NIntegrate[a*x + b, {x, 0, 1}];
g[a_] := NIntegrate[f[a, y]/(1 + f[a, y]), {y, -1, 1}];
g[2]
 
То ли ошибки и не было, то ли я не знаю...

Всего записей: 1834 | Зарегистр. 22-03-2003 | Отправлено: 16:09 02-11-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