Ru-Board.club
← Вернуться в раздел «Программы»

» Mathematica (математика)

Автор: TomasVercetti
Дата сообщения: 25.06.2010 21:09
Хочу попытаться использовать Mathematica для подготовки текста, используя, например Journal Article Style. А как вставить формулу по середине (inline идёт с начала новой строки) и включить авто-нумерацию?
Автор: TeXpert
Дата сообщения: 30.06.2010 00:45
Требуется сгенерировать список, может есть готовая функция, а я не знаю?
Проще на модельном примере, дано: n (показатель степени) и k штук переменных, x_i, i=1...k
Требуется сгенерировать список, состоящих из всевозможных произведений x_i*x_j*...*x_l, 0 <= i,j,l <= k, i + j + l <= n
Пример: n=3 и x, y, и z
1, x, x^2, x^3, y, xy, yx^2, y^2, x y^2, y^3, z, xz, zx^2, yz, xyz, zy^2, z^2, xz^2, yz^2, z^3
Автор: popkov
Дата сообщения: 30.06.2010 00:57
TeXpert
Ликбез:
Цитата:
k штук переменных, x_i, i=1...k

Код: In[1]:= k = 10;
Array[x, k]
Out[2]= {x[1], x[2], x[3], x[4], x[5], x[6], x[7], x[8], x[9], x[10]}
Автор: TeXpert
Дата сообщения: 30.06.2010 01:11
popkov
Цитата:
Ликбез
Юмора не понял. Я Mathematica хоть немного, да знаю (начал пользовать потихоньку с версии 2.1), со списками тоже быстро разобрался
Цитата:
Лень на ночь думать, но функция Permutations кажется более подходящей
Не лучший вариант. Пока привлекательным кажется такой вариант: разложить, например, для случая выше, выражение (1 + x + y + z)^3, слагаемые из результата "вынуть", "очистив" от коэффициентов. То есть, в список занести операнды суммы. Придётся, наверное, так

Добавлено:
Пока такое решение:
Код: A := Expand[(1 + x + y + z)^3]
Level[A, 1] /. _Integer*x_ -> x
Автор: Partner1
Дата сообщения: 30.06.2010 08:52
TeXpert
Можно так:
Код:
k = 10;
Apply[Times, Rest[Subsets[Table[Subscript[x, n], {n, k}]]], 1]
Автор: popkov
Дата сообщения: 30.06.2010 12:40
TeXpert
Можно немного укоротить, используя новую функцию MonomialList:
MonomialList[(1 + x + y + z)^3] /. _Integer*x_ -> x

А так, решение уже достаточно простое.
Автор: TeXpert
Дата сообщения: 30.06.2010 13:34
Partner1
Цитата:
Можно так:
Код:
 
k = 10;
Apply[Times, Rest[Subsets[Table[Subscript[x, n], {n, k}]]], 1]
Так нельзя, например при n=3 результат таков:
{x_1, x_2, x_3, x_1*x_2, x_1*x_3, x_2*x_3, x_1*x_2*x_3}

popkov
Да, так чуть-чуть покороче
Цитата:
А так, решение уже достаточно простое
Оно то так, да только подход немного неизящный (жульнический, что ли) -- решение от обратного, разлагая полином. Ну да ладно, пока другого нет
Автор: Vskazka
Дата сообщения: 30.06.2010 15:52
TeXpert
Если Вам нужен коэффициент при сем члене в разложении (x1+x2+...+xk)^(n) при
x1^m1*x2^m2*x^m3*...*xk^mk, то это (n)!/(m1!*m2!*...* mk!) - это бином Ньютона...
Пол страницы рассуждений развели на ровном месте
Автор: TeXpert
Дата сообщения: 30.06.2010 16:08
Vskazka, может всё-таки стоит повнимательнее прочитать пост? Речь совсем о другом, и тогда не писал бы
Цитата:
Пол страницы рассуждений развели на ровном мест
Автор: Vskazka
Дата сообщения: 30.06.2010 16:37
TeXpert
Вы подумайте, что что вам надо исходя из описания - Вашего - Список сгенерить.. Какой..

Цитата:
Требуется сгенерировать список, состоящих из всевозможных произведений x_i*x_j*...*x_l, 0 <= i,j,l <= k, i + j + l <= n

что Вам собственно надо простой перебор - так и перебирайте... если просто так выписать таковы произведения...
Но это не задача ни при каком определении оной. Странно, что простейший перебор дает повод для писанины
Ну и нельзя через задницу гланды резать, напоследок

Автор: TeXpert
Дата сообщения: 30.06.2010 17:01
Vskazka
Мда. Не разобравшись, сначала бином (кстати, это ещё в школе проходят) приплёл, а потом невнятные бормотания про перебор
Цитата:
что Вам собственно надо  простой перебор - так и перебирайте... если просто так выписать таковы произведения...
Я же там простой пример привёл, что там после этого непонятного?
Цитата:
Но это не задача ни при каком определении оной
Задача достаточно ясная
Цитата:
Требуется сгенерировать список, может есть готовая функция
в русле темы
Цитата:
Странно, что простейший перебор дает повод для писанины
В том-то и дело, что это не тупой перебор
Цитата:
Ну и нельзя через задницу гланды резать, напоследок
Надо же, какая глубокая мысль! Я в восхищении! А ты мое замечание
Цитата:
Оно то так, да только подход немного неизящный (жульнический, что ли) -- решение от обратного
опять не заметил (невнимательность, али не дошло)? Что же тебе мешает предложить короткое и изящное решение? Просто развел флуд
Автор: nikitak
Дата сообщения: 04.08.2010 09:15
Здравствуйте, вопрос по программированию в Математике.
Задача: Посчитать "гистограммную характеристику" неких свойств объекта. Объект состоит из множества координат точек. Позиция в гистограмме и интегральная характеристика, обновляемая в этой позиции формализуются отдельно.
Моё решение:

Код:
(* Вычисление позиции в гистограмме, обновление для одной точки *)
PointUpdateResult[res_, x_, y_, n_] := Block[ {offset = MyOffset[x, y, n] (* позиция в гистограмме *)},
++res[[offset,1]]; (* количество *)
res[[offset,2]] += Sqrt[x^2 + y^2]; (* "интегральное свойство" *)
];
SetAttributes[PointUpdateResult, {HoldFirst}];

(* итерация по точкам, накопление необходимого свойства *)
UpdateResult[res, x_, y_, w_, r_] := Scan[PointUpdateResult[res, #[[1]], #[[2]], w] &, Table[{x, y + i}, {i, 0, r - 1}]];
SetAttributes[UpdateResult, {HoldFirst}];

(* функция, работающая с самим обьектом *)
SectorFeatures[x_, Order_]:= Block[ { params=Runs[x], second_params = Mec[x], res=Table[{0,0},Order+1] (* "выделяем память" под гистограмму *)},
UpdateResult[res,second_params,Order+1,#] & /@ params;
res // MatrixForm
];
Автор: TeXpert
Дата сообщения: 06.09.2010 09:48
Странно, по документации обращаться к элементам массива следует так: X[[i]], тем не менее, работает также X[i]. В чем тут прикол?
Автор: popkov
Дата сообщения: 09.09.2010 15:50
TeXpert
Не работает:

Код: [no]In[2]:= t = Range[10]
t[1]

Out[2]= {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

Out[3]= {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}[1][/no]
Автор: TeXpert
Дата сообщения: 09.09.2010 18:13
popkov
У меня, наоборот, X[i] работает, а вот X[[i]] --- нет (когда писал предыдущее сообщение, я написал, не проверив, вполне возможно, по описанной тобой причине)! Объявлен как Array[X,N]. С двумерным массивом та же песня. Впрочем, я не стал копаться, надо было считать, а считается нормально, результаты корректны, остальное потом проверю

Вообще, справка местами странная. Хотел лишний раз уточнить насчет индексации элементов массива, долго пришлось рыться. А ведь простая вещь, в примерах почему-то не отражено

Да и пара скобок [ ] выбрана очень неудачно: в математике в определении множества используется пара скобок { }, а аргумент функции заключается в обычные скобки ( ). В Maple с обозначениями все в порядке, а вот в Mathematica это почему-то через заднее место(

Кстати, какой функцией лучше решить численно уравнение:
f(x)-g(x)=0,
f --- заданная функция, g(x)=Int_{a-x}^{a}h(t)dt,
h также задана (не дифференцируема), a --- фиксированная константа. Заданные функции таковы, что уравнение всегда имеет единственное решение. У меня почему-то заткнулись функции NSolve и FindRoot, пришлось решать методом деления отрезка пополам (пристрелки)
Автор: terminat0r
Дата сообщения: 10.09.2010 02:03
TeXpert

Цитата:
а вот в Mathematica это почему-то через заднее место

Я сначала тоже удивлялся, а потом понял, что все это намного глубже и очень даже рационально задумано.
Это в maple все немного через то место, порядка и логики никакой.
Автор: popkov
Дата сообщения: 10.09.2010 02:48
TeXpert

Цитата:
[no]У меня, наоборот, X работает, а вот X[[i]] --- нет (когда писал предыдущее сообщение, я написал, не проверив, вполне возможно, по описанной тобой причине)! Объявлен как Array[X,N].[/no]

Ну неужели так лень почитать документацию? Функция Array[] генерирует список индексированных переменных:

Код: [no]In[2]:= Array[X, 10]

Out[2]= {X[1], X[2], X[3], X[4], X[5], X[6], X[7], X[8], X[9], X[10]}[/no]
Автор: TeXpert
Дата сообщения: 10.09.2010 05:17
terminat0r
Цитата:
Я сначала тоже удивлялся, а потом понял, что все это намного глубже и очень даже рационально задумано
Ну как сказать, все-таки для математика обозначение множеств не через { } --- дико (тем паче сам пакет называется Mathematica), к тому же принято списки обозначать через [ ]. Ну да ладно, не катастрофа

popkov
Цитата:
Ну неужели так лень почитать документацию? Функция Array[] генерирует список индексированных переменных
Читал, просто обозначения эти все равно диковаты
Цитата:
Кроме этих функций есть еще FindMinimum
Про это я, естественно, думал, но была надежда на более "прямой" способ
Цитата:
Однако твоя проблема, видимо, в том, что ты не указал специально, что интегрирование должно быть численным (надо использовать NIntegrate, а не Integrate)
А функция g у меня определена как раз через NIntegrate, забыл уточнить, вот примерно так:
Код: g[j_,x_]:=NIntegrate[h[j,t], {t,a-x,a}]
Автор: popkov
Дата сообщения: 10.09.2010 10:02
TeXpert
Цитата:
Спасибо, я тоже подозревал, что что-то уточняющее надо задавать, попробую покопаться в этом направлении
Это существеннее, чем кажется: последние версии Mathematica даже внутри заведомо числовых функций вроде NIntegrate и FindRoot все равно в первую очередь делают символьный анализ, который может занимать жуткое количество времени и оперативной памяти, если аргумент нестандартный, как у тебя.
Автор: APS
Дата сообщения: 19.09.2010 02:28
Всем привет. А получилось у кого-нибудь полностью подружить MathLink 3.2 с Экселем 2010 в обе стороны? Из математики можно запрашивать данные и возвращать их обратно в эксель, но подключать решатель математики из экселя пока не получилось. Может кто знает куда установщик математики кидает надстройки?
Автор: TeXpert
Дата сообщения: 20.09.2010 02:48
Очень странная ситуация наблюдается. Написал программу, обрабатывающую данные, в конце оптимизируется функция, с помощью NMinimize. Прогнал ее под Windows/Mathematica 7.0.1 для разных значений параметров, все нормально, считается (тьфу-тьфу-тьфу) прекрасно (при этом количество переменных доходит почти до 700, для 4000 программа после получаса счета на лаптопе с двуядерным прцессором 1,6 GHz с 3 Gb RAM завершилась с жалобой на нехватку памяти). Теперь ту же программу решил прогонять под Linux/Mathematica 7.0.0, и тут программа быстро завершается, с жалобой типа "NMinimize::nnum: The function value is not a number at ", тут переменные опущены. Набор данных один и тот же! Может, проблема из-за различия версий: глюк в Mathematica 7.0.0?

Добавлено:
Да, похоже на глюк версии, например вот тут говорится:
Цитата:
On Feb 9, 2009, at 4:33 AM, appris@att.net wrote:

> Here is an example from Mathematica's user's guide:
>
> In[8]:= NMinimize[x^4 - 3 x^2 + x, x]
>
> Out[8]= {-3.513905039, {x -> -1.300839566}}
>
> however, trying to replicate it, I get the following:
>
> In[2]:= NMinimize[x^4 - 3 x^2 + x, x]
>
> Out[2]= {-1.070230182, {x -> 1.130901122}}
>
> One way to find the global min, I had to use a constraint such as x<0.
>
> Has anyone come across such a problem?
>
> In[3]:= $Version
>
> Out[3]= "7.0 for Microsoft Windows (32-bit) (November 10, 2008)"

This is fixed in 7.0.1.

Brett Champion
Wolfram Research
Автор: TeXpert
Дата сообщения: 22.09.2010 05:33
Господа, требуется помощь

Как уже писал, речь идет о тестировании одной и той же программы под двумя системами. Под Windows пашет без проблем для разных наборов значений параметров
Под Linux версию Mathematica сменил на 7.0.1, но программа так же завершается, как и в версии Mathematica 7.0.0. Непонятный "бип", а меню Why the Beep? сообщает типа "ядро вышло в процессе вычислений", очень вразумительное, надо сказать(
Пробовал как под простым пользователем, так и root'ом. Вылетает при работе функции NMinimize
Что тут может быть?

Вот информация:
Linux/RHEL 5.5 Client
"Version" -> "7.0 for Linux x86 (32-bit) (February 25, 2009)",
"ReleaseID" -> "7.0.1 (1213964, 1213624)"

Windows Server 2003 SP2
"Version" -> "7.0 for Microsoft Windows (32-bit) (February 18, 2009)",
"ReleaseID" -> "7.0.1 (1213965, 1213635)"

Процессор Xeon E5504 2 GHz, 2 Gb RAM
Автор: popkov
Дата сообщения: 22.09.2010 07:13
TeXpert
Различия могут быть связаны с различием компиляторов под Windows и Linux, что приводит к иным результатам вычислений под Linux. См., например, здесь: переход к новому компилятору под 32-битные версии Windows в Mathematica 7.0.0 неожиданно привел к появлению случайно распределенных числовых погрешностей (невоспроизводимости результатов вычислений в версии 7.0.0 в 32-битных системах). Я не знаю, исправили ли они этот глюк в версии 7.0.1. Так что твоя программа запросто может выдавать другие цифры, соответственно и сообщение "NMinimize::nnum: The function value is not a number at " появляется в связи с этим. А вылетание ядра часто происходит, если NMinimize получает символьную, а не числовую функцию. Попробуй оформить ее как численную через _?NumberQ для каждого аргумента.
Автор: myual
Дата сообщения: 10.10.2010 15:39
Есть длинное выражение -- P(x,y,z,w,v).
Известно, что оно раскладывается в линейную комбинацию:
\sum\limits_i C_i(y,z,w,v)f_i(x).

{f_i(x)} -- конечный набор заданных функций.

Вопрос: как можно осуществить такое разложение в Mathematica?
Автор: ResearchMaker
Дата сообщения: 27.10.2010 14:12
Недавно разместил статью в ArXiv и получил предложение от сотрудников Wolfram Research создать демонстрационный ролик по ее содержанию. Код с помощью Trial (save-disabled) версии Mathematica я написал. Ни может ли кто-либо имеющий лицензионную Mathematica 7 помочь преобразовать его в файл Demonstration? Шаблон имеется, нужно только скопировать в соответствующие разделы части кода и записать файл. При желании можно включить себя в раздел Авторы.
Автор: Andrew10
Дата сообщения: 09.11.2010 12:39
Привет всем!

Простой вопрос, но что-то не могу найти ответ в документации:
Как сделать так, чтобы подписи к осям в функции Plot[] располагались не по умолчанию около окончаний осей, а снизу по центру для горизонтальной и справа по центру для вертикальной оси?

ResearchMaker
Есть лицензионный 6.0, семерки нет. Если устроит шестерка, пиши
Автор: terminat0r
Дата сообщения: 09.11.2010 12:49
ResearchMaker
Ну у меня нет, но я знаю человечка (и главное меня знает он ), у которого есть выход на все лицензионные версии от 4 до 7.
в пм
Автор: ResearchMaker
Дата сообщения: 10.11.2010 20:18
Andrew10 и terminat0r, спасибо, что откликнулись!
Возможно, я еще воспользуюсь вашим предложением.


Цитата:
Простой вопрос, но что-то не могу найти ответ в документации:
Как сделать так, чтобы подписи к осям в функции Plot[] располагались не по умолчанию около окончаний осей, а снизу по центру для горизонтальной и справа по центру для вертикальной оси?


Может быть, использовать команду Inset, задающую расположение текста вместе с опцией Epilog. Andrew10, такой пример есть в программе, которую я тебе отправил.
Автор: terminat0r
Дата сообщения: 24.11.2010 03:09
Тестирую свободную запись от wolframa. Очень даже ничего, это наверное будет даже революция. Только надо хоть немного знать математический английский Абсолютно без подготовки можно строить графики, интегрировать, дифференцировать и показывать геом фигуры. Все логично и достаточно быстро. Задержка конечно есть, где-то секунд 2-3.
Автор: popkov
Дата сообщения: 24.11.2010 11:48
Весьма обнадеживающие новости о возможностях Compile[] в 8-ке:
http://facstaff.unca.edu/mcmcclur/blog/CompileForComplexDynamics.html

Страницы: 12345678910111213141516171819202122232425262728293031323334

Предыдущая тема: Идея несуществующей программы...


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.