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

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

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
terminat0r
Видимо это потому что Mathematica тупо делает символьное интегрирование каждый раз при вызове функции, без кэширования результатов. Замена Integrate на NIntegrate дает значительный выигрыш в скорости. С другой стороны, интегралы от двух функций Бесселя есть в таблицах Прудникова-Брычкова-Маричева, лучше сразу использовать общую формулу оттуда. Там в общем случае возникают гипергеометрические ряды, так что проще будет считать эти интегралы численно. Зачем повсюду столько N[]? Они тоже создают тормоза. Кроме того, Plot значительно ускоряется, если выставить опцию MaxRecursion->0.
 
Исправленный вариант, который на процессоре Q6600 считается примерно за 2 секунды

Всего записей: 759 | Зарегистр. 19-07-2003 | Отправлено: 15:57 09-04-2010 | Исправлено: Griefin, 16:52 09-04-2010
terminat0r



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Griefin
СПАСИБО!
Ваши замечания очень ценны, так как я только сейчас вплотную столкнулся с математикой, до этого делал в maple и не было особенной мотивации. (сейчас есть )
А мой  сарказм постом раньше -это результат 5 дней тотальной борьбы с mathematica.

Всего записей: 2084 | Зарегистр. 31-03-2002 | Отправлено: 18:34 09-04-2010 | Исправлено: terminat0r, 18:44 09-04-2010
popkov

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
terminat0r
В качестве краткого и информативного пособия для начала рекомендую книгу Леонида Шифрина "Mathematica® programming: an advanced introduction". Простота изложения сочетается с рассмотрением потенциальных "грабель" и "тонких" мест программирования, имеющих большую ценность на практике и не всегда известных даже опытным пользователям.

Всего записей: 1835 | Зарегистр. 22-03-2003 | Отправлено: 19:26 09-04-2010 | Исправлено: popkov, 19:27 09-04-2010
terminat0r



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
popkov
Спасибо, очень хорошая книга, читаю.

Всего записей: 2084 | Зарегистр. 31-03-2002 | Отправлено: 03:14 11-04-2010
TomasVercetti

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Приветствую всех!
 
А в Mathematica7 есть named arguments: f[x=5, y=7, z=10]? (В принципе, под это дело можно Optional Arguments пристроить, но, может быть, «фича» уже реализована.)

Всего записей: 319 | Зарегистр. 09-01-2006 | Отправлено: 11:18 02-05-2010
eriik



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

Цитата:
(p.205)
 
Default arguments are those which we can leave out when calling a function, in which case there are some default values that the function will use for these arguments. The matching between missed arguments and values is based on the positions of the arguments in this case. In Mathematica, this mechanism is realized through optional patterns (section 4.2.9). We will give just a few simple examples of such functions. Here we define a function which sums all its arguments, and has the last two arguments optional, with default values being 1 and 2 :
 
ClearAll[f];
 
f[x_, y_: 1, z_: 2] := x +y +z
 
Check :
 
{f[1], f[1, 3], f[1, 3, 5]}
 
{4, 6, 9}

Кроме этого ничего на ум не приходит...  
 
p.s. Не совсем понял смысл named arguments - это аналог With[] что ли?

Всего записей: 453 | Зарегистр. 09-01-2003 | Отправлено: 13:14 02-05-2010 | Исправлено: eriik, 13:14 02-05-2010
dikun

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

Цитата:
А в Mathematica7 есть named arguments [...]?

 
Похоже, что нету.
Вообще, при помощи Optional Arguments и советуют это реализовывать:
http://stackoverflow.com/questions/1615836/named-arguments-in-mathematica
Причины?
1. Всякие там "\[Element]", ":>", "===", "->" и т.д. уже заняты.
2. Последовательность аргументов самоочевидна/привычна (и тогда зачем нам нужны named arguments?), иначе речь идёт не просто об аргументах, а об опциях (и порядок перечисления аргументов уже не важен).
3. В Mathematica принято давать нормальные вменяемые имена идентификаторам, что улучшает читабельность/понятность кода.

Всего записей: 22 | Зарегистр. 16-06-2005 | Отправлено: 15:41 02-05-2010
TomasVercetti

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
eriik,
Named arguments — возможность указывать имена аргументов в вызове функции. Т.е., задана функция f[x_,y_,z_]; при её вызове вместо f[5, 7, 10] можно писать f[x=5, y=7, z=10]. Становится очень полезно, когда количество аргументов увеличивается до десятка и упомнить, что каждый из них представляет, становится сложно. Тем более, если несколько похожих по смыслу функций.
 
dikun,
Интересные примеры по ссылке! Видимо, Optional Arguments под это дело и должны использоваться. Придётся только проверять, чтобы каждый из аргументов был присвоен (отличался от «по-умолчанию») — думал, что эта функциональность уже могла быть реализована.

Всего записей: 319 | Зарегистр. 09-01-2006 | Отправлено: 20:51 02-05-2010
eriik



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
TomasVercetti
Спасибо за объяснение. Т.е. функциональность - чистая косметика, этакий "in situ" комментарий? Согласен, иногда не помешает

Всего записей: 453 | Зарегистр. 09-01-2003 | Отправлено: 14:13 03-05-2010
dikun

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
@TomasVercetti
 
Если аргументов у функции много, при этом их все нужно в обязательном порядке фактически определять, то я позволю себе предположить, что эти аргументы могут быть сгруппированы при помощи каких-то Head'ов, например, List[...] или Circle[{x0, y0}, R].
 
Если есть "несколько похожих по смыслу функций", то, опять-таки, предположу, что мы имеем дело с некой одной полиморфной сущностью, которая проявляется в виде этих "похожих по смыслу функций".
 
Если бы ты привёл здесь описание и прототипы своих функций с большим количеством обязательных аргументов, то, возможно, тут тебе порекомендовали бы, что с этими функциями делать...

Всего записей: 22 | Зарегистр. 16-06-2005 | Отправлено: 15:04 03-05-2010
Griefin

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

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

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Пока выбрал такой вариант FermiEnergy[temp,conc,{прочие параметры},{хар-ки матрицы}, {хар-ки примеси}, опциональные_аргументы]. Не очень нравится тем, что 1. некоторые хар-ки матрицы зависят от хар-к примеси; 2. Часть из них пришлось вынести в опциональные.
 
Вообще функции имеют такой вид: FermiEnergyA[temp,conc, v1,v2,v3, ni, e1,e2,e3,e4] — используется один метод, FermiEnergyB[temp,conc, v1,v2,v3, ni, nm, e1,e2,e3] — другой метод для другого набора экспериментально определяемых значений параметров, FermiEnergyC[temp,conc, v1, ni, nm, nz, e1,e2,e3, m] — третий.
 
Разумеется, каждый раз при вызове приходится смотреть, какой аргумент и на каком месте стоит. Хотелось бы что-то типа FermiEnergyA[temp=5, conc=c, v1=1,v2=1,v3=5, ni=10^18, e1=...,e2=...,e3=...,e4=...]. Если порядок не важен — ни плюс, ни минус. В идеале, в зависимости от того, какие параметры указаны, функция сама выбирает метод.

Всего записей: 319 | Зарегистр. 09-01-2006 | Отправлено: 16:57 03-05-2010 | Исправлено: TomasVercetti, 16:58 03-05-2010
Griefin

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

Цитата:
FermiEnergyA, B, C

Функции можно перегружать (создавать несколько функций с одинаковыми именами, но с разным набором аргументов).

Всего записей: 759 | Зарегистр. 19-07-2003 | Отправлено: 17:58 03-05-2010 | Исправлено: Griefin, 18:03 03-05-2010
DeadJDona



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
подскажите плиз, как посмотреть решение дифура?
трейс-дсолв не показывает ((

Всего записей: 438 | Зарегистр. 22-07-2005 | Отправлено: 18:31 05-05-2010
popkov

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
DeadJDona
Логика компьютерных систем сильно отличается от человеческой и на практике вряд ли полезна. Можно включить вывод всех промежуточных операций вообще (осторожно! печатаются тысячи сообщений!):
 
On[];
DSolve[y'[x] == Sin[x], y[x], x]
 
При желании можно указать фильтр только интересующих типов операций - но толку вряд ли будет больше...

Всего записей: 1835 | Зарегистр. 22-03-2003 | Отправлено: 22:08 11-05-2010 | Исправлено: popkov, 09:10 03-08-2013
cdrom2

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите
Каким пакетом (on-line калькулятор тоже подойдет) можно решить такое уравнение  
1.int[(х),а] F(t)dt=в (с неизвестным пределом интегрирования), где а и в - могут быть математическими константами (pi, e... и т.д. )
2. F(x)=G(x) (F(x) и G(x) - спецфункции)
Спасибо.
 

Всего записей: 2393 | Зарегистр. 17-02-2006 | Отправлено: 19:53 15-05-2010
popkov

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
cdrom2
Mathematica и MatLab это точно могут (численными методами). Думаю, многие другие пакеты тоже (если реализованы необходимые тебе спецфункции).

Всего записей: 1835 | Зарегистр. 22-03-2003 | Отправлено: 10:13 16-05-2010
Someek

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
всем здравствуйте) может я немного не в тему, но у меня есть вопросик по Mathematica.
вообщем,я только начинаю ее осваивать и возникла проблема...
d := 1
c := 8
t := 0
e := 0
A:= 67
o:=-3
While[o &#8800; 1; {m = Select[Range[100], Mod[( d # + c), o] == 0 &], If[o < 0, o = -o], t = c,  
c = (t*m[[1]] + A*d)/o, e = d, d = (e* m[[1]] + t)/o, o = c^2 - A*d^2 , Print["x=", d],  
Print["y=", c]}]
 
цикл,не знаю почему, работает только 1 раз. подскажите в чем ошибка...
заранее спасибо)

Всего записей: 4 | Зарегистр. 19-05-2010 | Отправлено: 22:50 19-05-2010
popkov

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Someek
Для начала, в твоем коде ошибка:
Цитата:
o &#8800;
Что это значит? Проверяй код после публикации!

Всего записей: 1835 | Зарегистр. 22-03-2003 | Отправлено: 00:52 20-05-2010
Someek

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
извините,не заметил. Это означает "не равно 1".

Всего записей: 4 | Зарегистр. 19-05-2010 | Отправлено: 07:44 20-05-2010
Открыть новую тему     Написать ответ в эту тему

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